大家好,今天我和大家分享一下JDBC 连接数据库的步骤。
JDBC 连接数据库的步骤:
1、加载数据库驱动
2、获取数据库的连接
3、获取用于执行sql命令的执行对象
4、执行
5、处理结果
6、回收资源
1、加载数据库驱动:高版本兼容低版本(就是数据库驱动包是5.0版本可以用8.0的加载驱动)
注意:驱动的加载在JDBC4之后可以无需显示声明(可以不写),因为在META-INF下services包中有个配置文件java.sql.Driver。在获取连接之前,DriverManager会自动寻找。
//数据库驱动包是8.0版本
Class.forName("com.mysql.cj.jdbc.Driver");
//数据库驱动包是5.0版本
Class.forName("com.mysql.jdbc.Driver");
2、获取数据库的连接:getConnection()中的参数:url,user,password当然这个方法也有重载的其他方法,参数和这个相似。
Connection connection = DriverManager
.getConnection(
"jdbc:mysql://127.0.0.1:3306/mydb?serverTimezone=UTC",
"root",
"123456");
3、获取用于执行sql命令的执行对象:Statement一般用于执行静态sql语句。动态传入的参数时,使用Statement会有sql注入的风险,而PreparedStatement有预处理sql语句的功能可以避免sql注入的风险。
//有动态传入的参数时,不建议使用
Statement stat = conn.createStatement();
//有预处理sql语句的功能
String sql="select * from user where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
4、执行:Statement中有execute()的方法,返回值是boolean类型,true表示执行查询操作,false表示执行更新操作(增删改)
executeUpdate()方法是执行更新操作(增删改),返回值是受影响的行数
executeQuery()方法是执行查询操作,返回值是一个结果集ResultSet
PreparedStatement和Statement方法一样(注意:PreparedStatement继承Statement)只不过在执行之前要为sql语句中的“?”赋值。
//对于Statement
boolean b = stat.execute("insert into user(username,password,phone) " +
"values('coco','123456','12345678910')");
int i = stat.executeUpdate("insert into user(username,password,phone) " +
"values('coco','123456','12345678910')");
ResultSet rs = stat.executeQuery("select * from user");
//对于PreparedStatement
String sql="select * from user where id=?";
String sql1="delete from user where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,1);
boolean b1 = ps.execute();
//执行sql1时使用
int i1 = ps.executeUpdate();
//执行sql时使用
ResultSet rs1 = ps.executeQuery();
5、处理结果:主要是对于结果集的处理,ResultSet 中有next()方法,它相当于一个游标,它的指向是下一条数据,返回值是boolean类型,能判断有没有一条数据,而ResultSet 中的getXxx是用来获取每一条数据中的具体内容比如:username、password等。
//处理execute()的结果
if(!b){
System.out.println("添加成功");
}
//处理executeUpdate()的结果
if(i==1){
System.out.println("添加成功");
}
//处理executeQuery()的结果:只有一条数据
if(rs1.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String phone = rs.getString("phone");
System.out.println(id+"/"+username+"/"+password+"/"+phone);
}
//处理executeQuery()的结果:多条数据
while(rs1.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String phone = rs.getString("phone");
System.out.println(id+"/"+username+"/"+password+"/"+phone);
}
6、回收资源:如果有结果集才能关闭结果集ResultSet,没有就不用写这一句。关闭资源类似递归和栈,就是开启顺序和关闭顺序相反。关闭资源时最好用try..finally...语句用try..catch....finally...语句。
//关闭结果集ResultSet
rs.close();
//关闭Statement
stat.close();
//关闭连接Connection
conn.close();
本文介绍了JDBC连接数据库的详细步骤,包括加载驱动、获取连接、创建执行对象、执行SQL、处理结果及资源回收。强调了PreparedStatement在防止SQL注入上的优势,以及结果集处理中的next()方法和资源关闭的顺序。
1317

被折叠的 条评论
为什么被折叠?



