📢博客主页:Lockey-s 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 📢本文由 【Lockey-s】 原创!首发于 CSDN🙉🙉🙉 📢 由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不 尽!✨ 📖精品专栏(不定时更新)✨
JDBC 就是一种类和方法,是一种执行 SQL 语句的 Java API,可以对多种数据库实现统一访问,就像是班长约定好数据的统计格式一样。优势就是使得程序的可移植性大大增强,不用限定在特定数据库厂商的API。
引入依赖就需要用 MySQL 的驱动包(把 MySQL 自身的 api 给转换成 JDBC 风格)。
最好的方法就是去 MySQL 官网,但是 MySQL 被 Oracle 收购后,就很难找了,所以就可以去 maven 中央仓库 去安装,然后搜索 MySQL,第一个结果就是:
然后点进去选择 5.1.x 系列就可以,因为我的 MySQL 是 5.7 系列的,所以用的是 5 系列的,如果 MySQL 是 8 系列的,那么就用 8 系列的,一定要和自己的 MySQL 版本匹配,如果不匹配的话,就可能导致 bug :
然后点击前面的版本号,然后进入页面之后:
然后点那个 jar 按钮,就会下载驱动包,jar 里面就是其他人写好的 class 文件。
这个对象就描述了数据库服务器在哪里。代码如下:
DataSource dataSource = new MysqlDataSource();
其中 DataSource 是 JDBC 带的接口,后面的 MysqlDataSource 来自之前下载好的 jar 包,是一个向上转型。
设置数据库地址: 这里的数据库地址可以直接复制,127.0.0.1 表示本机 IP ,3306 是端口号,user 是数据库名,后面是字符集,SSL 是传输过程中是否加密。
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
设置数据库用户名:
((MysqlDataSource) dataSource).setUser();
设置数据库的密码:
((MysqlDataSource) dataSource).setPassword();
也可以写成这样,这样就没有转型了:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL();
dataSource.setUser();
dataSource.setPassword();
因为我们代码中持有的实例是 DataSource 类型,后面一些其他代码如果需要用到其它 DataSource ,相关参数也是 DataSource,代码几乎不用改动,就是“低耦合”。
通过 dataSource.Connection 来建立连接:
Connection connection = dataSource.getConnection();
要注意的是,使用的是 java.sql 里面的 Connection:
String sql = "insert into student values(1,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);
int line = statement.executeUpdate();
这里的 line 就是返回值,就是有几行受到了影响。
statement.close();
connection.close();
执行代码,返回值是 1,就说明有一行受到了影响:
执行三次之后,返回数据库查看内容,发现多了三条记录:
通过 Scanner 来让用户输入:
int id = scanner.nextInt();
String name = scanner.next();
用户输入之后,把 id,和 name 替换到 sql 语句里面,在 sql语句 的values 当中用 ?代替:
String sql1 = "insert into student values(?,?)";
这两个 ? 就是表示当前字段的值还没有确定,先来占个位置,再使用 PreparedStatement 的 setXXX 系列方法进行替换:
PreparedStatement statement1 = connection.prepareStatement(sql1);
statement1.setInt(1,id);
statement1.setString(2,name);
这里的 1,2 就是下标,从 1 开始计算,把第一个 ?替换成 id 的值,把第二个 ?替换成 name 的值。然后打印一下替换的对象:
System.out.println("statement1" + statement1);
拼装好的 SQL 的输出值为下:
数据库当中的 lisi 也成功插入了。
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
Connection connection = dataSource.getConnection();
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
String sql = "delete from student where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id);
int line = statement.executeUpdate();
System.out.println(line);
statement.close();
connection.close();
运行结果如下:
数据库数据如下:
可以看到 id 为1 的都被删除了。
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
Connection connection = dataSource.getConnection();
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
String name = scanner.next();
String sql = "update student set name = ? where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, name);
statement.setInt(2, id);
System.out.println("statement" + statement);
int line = statement.executeUpdate();
System.out.println("line" + line);
statement.close();
connection.close();
数据库当中 id等于 2 的名字是:lisi
执行结果如下:
可以看到数据库当中的数据也被修改了:
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("");
Connection connection = dataSource.getConnection();
String sql = "select * from student order by id";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
//先针对一行来获取列
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id= " + id + " ,name= " + name);
}
resultSet.close();
statement.close();
connection.close();
数据库资源如下:
代码执行结果(按 id 顺序排列)如下: