JDBC: Java database connectivity
Jdbc 就是JAVA代码和数据库的连接桥梁,可以为多重关系学数据库提供同意的访问方式,
Jdbc 对各种数据库驱动(jar包)进行隐藏,操作各种数据库的行为一致化
jdbc 种主要的使用类:
- DriverManager: 管理jdbc驱动
- Connection: 管理连接
- Statement(PreparedStatement):增删改查
- CallbelStatement: 调用数据库中的存储过程/存储函数
- ResultSet: 查询结果集
访问数据库具体步骤:
- 导入具体的驱动类。
- 建立连接
- 发送sql,执行
- 处理结果,查询
不同数据库中的驱动是不一样的,常见的数据库有:(-x: 版本号)
数据库: 驱动: 主要驱动类: 连接字符串
Oracle: ojdbc-x.jar oracle.jdbc.OracleDriver
Mysql: mysql-connector-java-x.jar com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/数据库
Sqler : sqljdbc-x.jar com.microsoft.sqlserver.jdbc
实现数据库的增删改:mysql数据库为例
连接数据库:
private final static String URL = "jdbc:mysql://localhost:3306/springbootdb";
private final static String USER = "root";
private final static String password = "password";
1、加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");
如果要切换数据库,那么导入其他数据库的驱动,并切换驱动,而其它的操作都是OK的,
2、于数据库建立连接
connection = DriverManager.getConnection(URL, USER, password);
3、发送sql 并执行(增删改, 查)
statement = connection.createStatement();
String sql ="insert into `user` values(3,'wangwu', 26);";
// String sql = "update user set name ='lisi' where age=26";
// String sql = "delete from user where age=26";
4 返回值表示修改几条数据, 在增删改都是使用 executeUpdate 执行sql
int count = statement.executeUpdate(sql);
执行结束之后需要将以上的语句都closed,close 的规则是,先打开后关闭,后打开先关闭。打开顺序和关闭顺序是相反的
if (statement != null) statement.close();
if (connection != null) connection.close();
查询:前四步骤都是一样的,只有在执行的时候使用executeQuery, 并且返回的也不是int
String names = "ang";
String sql = "select * from user where name like '%"+names+"%'";
// 查询不再是 executeUpdate
ResultSet resultSet = statement.executeQuery(sql);
resultSet 对应数据库中的一张表数据,通过循环将按照sql语句将数据一行一行的拿出来rs 初始化的时候是指向第0行,通过next方法移到下一行,并在下移动的时候判断是否为空有数据返回true,否则false然后通过 rs.getString(), rs.getInt(), rs.getDate() 等获取字段值。 resultSet 还有 previous() 方法 true/false
while (resultSet.next()){
int age = resultSet.getInt("age");
String name = resultSet.getString("name");
System.out.println(age + " " + name);
// 或者根据index (是从 1 开始)
int age = resultSet.getInt(3);
String name = resultSet.getString(2);
System.out.println(age + " " + name);
驱动产生连接 -> 连接产生语句 -> 执行语句产生结果 Statement (PreparedStatement) 增删改查 connection 产生 PreparedStatement 是 Statement 子接口 PreparedStatement 比 Statement 强大,主要强大地方是 SetXXX 方法,实现赋值
String names = "ang";
String sql = "select * from user where name like ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);// 预编译
preparedStatement.setString(1, "%ang%");
// 查询不再是 executeUpdate
resultSet = preparedStatement.executeQuery();
推荐使用PreparedStatement: 编码会更加简单,避免字符串的拼接。比较上面的例子, 提高性能,有编译操作。 安全 CallableStatement: 调用数据库中的存储过程/存储函数 connection 产生 connection.prepareCall(存储过程/存储函数)
参数格式:
存储过程(无返回值 return,使用out 参数代替): {call 存储过程名(参数列表)}
存储函数(有返回值 return ):{ ?= call 存储函数(参数列表)}