📢博客主页:Lockey-s 📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 📢本文由 【Lockey-s】 原创!首发于 CSDN🙉🙉🙉 📢 由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不 尽!✨ 📖精品专栏(不定时更新)✨
JDBC 编程
概念
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 文件。
导入到项目中
- 进入项目之后,可以创建一个目录,这里创建的是 lib
- 把刚刚下载的 jar 文件拷贝到刚刚的目录当中,直接复制文件点一下 lib,然后粘贴就好了
- 右键刚才的目录,有一个 add as library 然后点击这个选项,才会把 jar 包引入到项目中,项目才会读取 jar 内部的 .class 文件。否则代码就找不到 jar 里面的一些类了。
编写代码
JDBC 插入的基本流程
创建 DataSource 对象
这个对象就描述了数据库服务器在哪里。代码如下:
DataSource dataSource =newMysqlDataSource();
其中 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 =newMysqlDataSource();
dataSource.setURL();
dataSource.setUser();
dataSource.setPassword();
因为我们代码中持有的实例是 DataSource 类型,后面一些其他代码如果需要用到其它 DataSource ,相关参数也是 DataSource,代码几乎不用改动,就是“低耦合”。
和数据库服务器建立连接
通过 dataSource.Connection 来建立连接:
Connection connection = dataSource.getConnection();
要注意的是,使用的是 java.sql 里面的 Connection:
操作数据库
- 操作数据库的时候,关键是构造一个 SQL语句,构造 String 类的语句,不用写分号:
String sql ="insert into student values(1,'张三')";
- 然后通过 Connection 里面的 prepareStatement 方法,把 String 风格的 sql语句转化为 JDBC 里面的对象:
PreparedStatement statement = connection.prepareStatement(sql);
- 执行 sql ,如果是插入的话,就是 executeUpdate,选择的话,就是 executeQuery:
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 也成功插入了。
JDBC 删除的基本流程
- 创建数据源:
DataSource dataSource =newMysqlDataSource();((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();
- 用户输入 id:
Scanner scanner =newScanner(System.in);int id = scanner.nextInt();
- 拼装 sql 语句:
String sql ="delete from student where id = ?";PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id);
- 执行 sql :
int line = statement.executeUpdate();System.out.println(line);
- 回收资源:
statement.close();
connection.close();
运行结果如下:
数据库数据如下:
可以看到 id 为1 的都被删除了。
JDBC 更新的基本流程
- 创建数据源:
DataSource dataSource =newMysqlDataSource();((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();
- 用户输入 id
Scanner scanner =newScanner(System.in);int id = scanner.nextInt();String name = scanner.next();
- 拼装 sql 语句
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);
- 执行 sql
int line = statement.executeUpdate();System.out.println("line"+ line);
- 回收资源
statement.close();
connection.close();
数据库当中 id等于 2 的名字是:lisi
执行结果如下:
可以看到数据库当中的数据也被修改了:
JDBC 查找的基本流程
- 创建数据源:
DataSource dataSource =newMysqlDataSource();((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();
- 拼装 sql 语句
String sql ="select * from student order by id";PreparedStatement statement = connection.prepareStatement(sql);
- 执行 sql,因为查询操作返回的是一个临时表,所以用 executeQuery,返回的临时表用 ResultSet 来表示。
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 顺序排列)如下:
版权归原作者 Lockey-s 所有, 如有侵权,请联系我们删除。