PreparedStatement与Statements相比主要有以下优点:
1.PreparedStatement能够执行参数化的SQL语句,避免反复书写相同SQL语句的繁锁。
参数化SQL语句具体如下:
SELECT sname FROM student WHERE sid = ?;
"?"是参数的占位符,程序可以传入不同的sid值完成参数化查询。
2.PreparedStatement比Statements效率更高
因为数据库系统会对SQL语句进行预编译处理。
3.PreparedStatement可以防止SQL注入攻击
PreparedStatement 对象通过executeUpdate()方法实现对数据库的写入,通过executeQuery()方法实现查询。具体如下:
package com.qfedu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestJDBC02 {
public static void main(String[] args) throws Exception {
//加载并注册数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/chapter01?serverTimezone=GMT";
String name="root";
String password="123456";
//获取数据库连接
Connection conn=DriverManager.getConnection(url, name, password);
//书写SQL语句
String sql="select * from student where sname = ?"; //一个问号代表一个占位符
//获取执行者对象
PreparedStatement pstat=conn.prepareStatement(sql);
//设置参数
pstat.setString(1, "zhangsan"); //1代表第一个问号占位符
//执行SQL语句
ResultSet resultSet=pstat.executeQuery();
System.out.println("sid|sname|age|course");
//处理结果集
while(resultSet.next()) {
int sid=resultSet.getInt("sid");
String sname=resultSet.getString("sname");
String age=resultSet.getString("age");
String course=resultSet.getString("course");
System.out.println(sid+"|"+sname+"|"+age+"|"+course);
}
resultSet.close();
pstat.close();
conn.close();
}
}