目录
pstm构建动态sql
JDBC prepareStatement 与Statement的区别
prepareStatement是Statement的一个子接口
1创建:通过连接获得prepareedStatement对象
先来看看JDBC prepareStatement 与Statement的区别
如上图,可以概括两点,
一、使用PreparedStatement更安全,解决了Sql注入的问题
二、效率更高,特别是调用次数较多的时候
相比较Statement而言,它是个半成品。
它是Statement的一个子接口,使用步骤分为3步:
1创建:通过连接获得prepareedStatement对象
String sql = “Select * from users_luxw where username= ? And password = password=? ”
PreparedStatement pstm = conn.prepareStatemement(sql);
创建时,将Sql语句中取值发生变化的部分用占位符(?)代替、。
2,给?赋值(也称参数绑定)
使用Set[type] 方法给?赋值、其中Type表示?位置的数据类型。第一个参数代表问号位置,从1开始;第二个参数是具体取值,比如:
pstm.setString(1, username);
pstm.setString(2, password);
3.执行SQL
Pstm.executeQuery();
Pstm.executeUpdate();//执行官更新时使用
此时JDBC将所有对应的参数发送至数据库服务器,调用池中有第一步创建的预编译的SQL并执行
代码如下:
package jdbc;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class demoprearedStatementf {
public static void main(String[] args) {
//加载获取连接
Connection conn = null;
PreparedStatement psm = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://localhost:3306/mybase";
String user = "root";
String password = "root123";
conn = DriverManager.getConnection(url, user, password);
//3、创建一个preparedStatement对象 预编译sql语句
//查询
String sql = "select * from test where deptno = ?";
psm = conn.prepareStatement(sql);
psm.setString(1,"10");
//删除
// String sql = "delete from test where ename=? ";
// psm = conn.prepareStatement(sql);
// psm.setString(1,"小弟");
//
//修改
// String sql = "update test set job = ? where ename = ?";
// psm = conn.prepareStatement(sql);
// psm.setString(1, "manner");
// psm.setString(2, "白展堂");
// //插入
// String sql = "insert into test(ename,job,deptno) values(?,?,?)";
// psm = conn.prepareStatement(sql);
// psm.setString(1, "大白");
// psm.setString(2, "leader");
// psm.setInt(3, 20);
//4执行sql语句
// int line = psm.executeUpdate();//增删改都用 executeUpdate
// System.out.println("影响行数: "+line);
rs = psm.executeQuery();
while(rs.next()){
int empno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
int mgr = rs.getInt(4);
Date hiredata = rs.getDate(5);
int sal = rs.getInt(6);
int commit = rs.getInt(7);
int deptno = rs.getInt(8);
System.out.println(empno+" "+ename+" "+job+" "+mgr+" "+hiredata+" "+sal+" "+commit+" "+deptno);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
rs.close();
psm.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114784.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...