预编译SQL可以有效的防止SQL注入
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.PreparedStatement;
/*
* 演示预编译的SQL执行计划
*
*/
public class Demo04 {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
//创建带参数的SQL语句
String sql = "insert into robin_demo_zqk "
+ "(id,name) values(?,?)";
//将sql发送到数据库,创建执行计划
//返回值ps就代表执行计划
PreparedStatement ps = conn.prepareStatement(sql);
//替换执行计划中的参数,2个参数
//按照序号发送参数
ps.setInt(1, 9);
ps.setString(2, "CAX");
//执行执行计划,返回值表示改变的行数
int n = ps.executeUpdate();
System.out.println(n);
//再次插入一条数据
ps.setInt(1, 100);
ps.setString(2, "wang");
n = ps.executeUpdate();
System.out.println(n);
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}
——————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.PreparedStatement;
/*
* 使用执行计划执行更新语句
*/
public class Demo05 {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
String sql = "update robin_demo_zqk "
+ "set name = ? "
+ "where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "zhu");
ps.setInt(2, 1);
ps.setString(1, "zhuqian");
ps.setInt(2, 2);
int n = ps.executeUpdate();
//修改成功修改的行数,修改失败返回0
System.out.println(n);
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}
——————————————————————————————————————————
package cn.tedu.jdbc.day02;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/*
* 使用执行计划执行查询语句
*/
public class Demo06 {
public static void main(String[] args) {
Connection conn = null;
try {
conn = DBUtils.getConnection();
String sql = "select id,name "
+ "from robin_demo_zqk "
+ "where name like ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "%C%");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
//getInt(列的序列号),利用序号获取值
int id = rs.getInt(1);
String name = rs.getString(2);
System.out.println(id+":"+name);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.close(conn);
}
}
}