Connection:与特定数据库的连接(会话)。在连接的上下文中执行SQL语句并返回结果。连接对象的数据库能够提供描述其表、支持的SQL语法、存储过程、此连接的功能等信息。
PreparedStatement:表示预编译SQL语句的对象。SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行该语句。
ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象保持指向其当前数据行的光标。最初,光标位于第一行之前。下一个方法将光标移动到下一行,因为当ResultSet对象中没有更多行时返回false,所以可以在while循环中使用它来迭代结果集。默认的ResultSet对象是不可更新的,并且具有仅向前移动的光标。因此,只能从第一行到最后一行迭代一次。可以生成可滚动和/或可更新的结果集对象。
getConnection:尝试建立到给定数据库URL的连接。DriverManager尝试从已注册的JDBC驱动程序集中选择适当的驱动程序。返回值为“到URL的连接”。
prepareStatement:创建用于向数据库发送参数化SQL语句的PreparedStatement对象。带或不带in参数的SQL语句都可以预编译并存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行该语句。
注意:此方法是为处理从预编译中获益的参数化SQL语句而优化的。如果驱动程序支持预编译,方法prepareStatement将把语句发送到数据库进行预编译。某些驱动程序可能不支持预编译。在这种情况下,在执行PreparedStatement对象之前,语句可能不会发送到数据库。这对用户没有直接影响。
executeQuery:在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。
返回值:ResultSet对象,其包含由查询生成的数据;从不为空。
executeUpdate:在此PreparedStatement对象中执行SQL语句,该对象必须是SQL数据操作语言(DML)语句,如insert、update或delete;或不返回任何内容的SQL语句,如DDL语句。
返回值:
(1)SQL数据操作语言(DML)语句的行数。
(2)不返回任何内容的SQL语句的行计数。
next():将光标从当前位置向前移动一行。结果集光标最初位于第一行之前;对该方法的第一次调用接着使第一行成为当前行;第二次调用使第二行成为当前行,以此类推。当对下一个方法的调用返回false时,光标位于最后一行之后。
返回值:如果新的当前行有效,则为true;如果没有更多行,则为false。
close():立即释放此ResultSet对象的数据库和JDBC资源,而不是等待自动关闭时发生。
以连接MySQL为例:
1、注册驱动:告诉Java程序,即将要连接的是哪个品牌的数据库
// 高版本
Class.forName("com.mysql.jdbc.Driver");
// 低版本
Class.forName("com.mysql.cj.jdbc.Driver");
2、获取连接
Connection conn = DrvierManager.getConnection("jdbc.mysql://localhost:3306/要连接的数据库名", "数据库账号", "数据库密码");
3、获取预编译的数据库操作对象
// 查询
String sql = "select name from student;";
// 插入
String sql = "insert into student values ("001", "张三")";
// 修改
String sql = "update student set sname = "李四" where sno = "001"";
// 删除
String sql = "select from student where sno = "001";
4、执行SQL语句
executeQuery()适用于第三步中的SQL语句是select
executeUpdate()适用于第三步中的SQL语句是insert、update或select
rs = ps.executeQuery();
rs = ps.executeUpdate();
5、处理结果集
如果第三步中的SQL语句为select,则存在处理结果集。
- 如果SQL语句查询的是多条,则使用while
- 如果SQL语句查询的是一条,则使用if
如果第三步中的SQL语句不是select,则不存在处理结果集
while(rs.next()){}
if(rs.next()){}
6、释放资源
先定义的资源后关闭,后定义的资源先关闭。与弹栈和压栈一个原理。
if(rs != null){
try{
rs.close();
} catch(SQLException e) {
e.printStackTrace();
}
}