JDBC
概念
JDBC:Java Database Connectivity,它是代表一组独立于任何数据库管理系统(DBMS)的API,声明在java.sql与javax.sql包中,是SUN(现在Oracle)提供的一组接口规范。由各个数据库厂商来提供实现类,这些实现类的集合构成了数据库驱动jar。
JDBC是SUN公司提供的一套规范,一套接口,位于java.sql包中。
具体实现类有各个厂商负责实现来连接各自的数据库。
基本使用
准备驱动
前提操作:
1.选中项目文件 右键new directory 创建名为lib的文件夹
2.将mysql jdbc对应的jar文件粘贴到此目录,例如:mysql-connector-java-8.0.25.jar
3.选中lib文件夹 右键 add as library,这样就可以下拉查看里边的class文件了
使用步骤
try {
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取连接对象
String url = "jdbc:mysql://192.168.1.38:3306/chatai";
String userName = "xxx";
String password = "xxx";
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 3. 创建执行SQL语句st对象
Statement st = connection.createStatement();
// 4. 编写SQL
String sql = "select * from student";
// 5. 执行SQL
ResultSet resultSet = st.executeQuery(sql);
// 6. 遍历结果集
while (resultSet.next()){
int anInt = resultSet.getInt(1);
String anString = resultSet.getString(2);
System.out.println("第一列数据为:" + anInt);
System.out.println("第二列数据为:" + anString);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
API
DriverManager类
位于java.sql包中,驱动管理类。
构造方法:
无
方法:
getConnection()(静态方法)
作用:获取数据库连接对象
参数:url地址,用户名,密码
返回值:Connection对象
示例:
String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/数据库名称";
String userName = "xxx";
String password = "xxx";
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
Connection接口
位于java.sql包中,数据库连接对象,他的实现类就是我们导入的mysql公司提供的jar包中的文件。
构造方法:
无
方法:
createStatement()
作用:创建SQL语句对象
参数:无
返回值:Statement对象
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 3. 创建执行SQL语句st对象
Statement st = connection.createStatement();
close()
作用:关闭连接
参数:无
返回值:无
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 3. 创建执行SQL语句st对象
Statement st = connection.createStatement();
// 关闭连接
connection.close;
prepareStatement(String sql)
作用:创建一个 PreparedStatement对象
参数:String类型的SQL语句
返回值:PreparedStatement类型对象
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 定义一个SQL
String sql = "select * from user where userName = ? and password = ?";
// 创建执行SQL语句pst对象
PrepareedStatement pst = connection.prepareStatement(sql);
// 传值,给第一个?的位置设置值
pst.setString(1,user);
// 传值,给第二个?的位置设置值
pst.setString(2,user);
// 执行SQL语句
ResultSet resultSet = pst.executeQuery();
prepareStatement(String sql,Statement.RETURN_GENERATED_KEYS);
作用:创建一个 PreparedStatement对象,Statement.RETURN_GENERATED_KEYS 的作用就是 让 JDBC 在执行 INSERT 后返回数据库生成的自增主键,方便你在程序里继续使用(比如后续插入子表数据时需要用这个主键)
参数:String类型的SQL语句,Statement.RETURN_GENERATED_KEYS
返回值:PreparedStatement类型对象
示例:
// 创建执行SQL语句的 PreparedStatement 对象,指定返回自增主键
PreparedStatement pst = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
// 传值:给 SQL 中的 ? 占位符设置值
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
pst.setObject(i + 1, params[i]); // JDBC 的占位符索引从 1 开始
}
}
// 执行 SQL 语句(返回受影响的行数)
int count = pst.executeUpdate();
// 获取主键值(返回的是 ResultSet)
ResultSet rs = pst.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1); // 获取第一列(自增主键ID)
System.out.println("新插入记录的ID: " + id);
}
Statement接口
位于java.sql包中,用来执行sql的对象,他的实现类就是我们导入的mysql公司提供的jar包中的文件。
构造方法:
无
方法:
executeUpdate()
作用:执行SQL更新语句
参数:SQL语句string类型
返回值:int类型,大于0成功,小于0失 败
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 创建执行SQL语句st对象
Statement st = connection.createStatement();
// 编写SQL
String sql = "xxx";
// 执行SQL
Int aint = st.executeUpdate(sql);
executeQuery()
作用:执行SQL查询语句
参数:SQL语句string类型
返回值:ResultSet类型
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 创建执行SQL语句st对象
Statement st = connection.createStatement();
// 编写SQL
String sql = "select * from student";
// 执行SQL
ResultSet resultSet = st.executeQuery(sql);
close()
作用:关闭连接
参数:SQL语句string类型
返回值:int类型,大于0成功,小于0失败
示例:
// 获取对象
Connection connection = DriverManager.getConnection(url, userName, password);
// 创建执行SQL语句st对象
Statement st = connection.createStatement();
// 编写SQL
String sql = "select * from student";
// 执行SQL
ResultSet resultSet = st.executeQuery(sql);
PreparedStatement接口
位于java.sql包中,用来执行sql的类,他的父类是Statement类。
构造方法:
方法:
executeUpdate()
作用:执行增删改SQL语句
参数:无
返回值:int类型
示例:
executeQuery()
作用:执行查询SQL语句
参数 :无
返回值:ResultSet类型
示例:
setXxx()
作用:将指定的参数设置为给定的值
参数:
第一个是int类型,代表的是?的位置,第二个参数为当前位置传递的值;
返回值:int类型
示例:
toString()
作用:直接打印这个对象,相当于调用它的toString方法
参数:
返回值:String类型,可以看到拼接好的sql语句
示例:
setDate()
作用:将指定的参数设置为给定的值
参数:
第一个是int类型,代表的是?的位置,第二个参数为当前位置传递的值,
这个Date不是java.util包中的Date,而是java.sql.Date,这个Date没有无参构造,
需要给这个构造方法传递一个long类型的毫秒数。