0
点赞
收藏
分享

微信扫一扫

【大数据系列之JDBC】(五):使用PrepareStatement防止SQL注入


  • 可以通过调用 Connection 对象的 preparedStatement(String sql) 方法获取 PreparedStatement 对象
  • PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句
  • PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

1.插入操作

public void testInsert() throws Exception {
// 1.获取数据库连接
Connection conn = JDBCUtils.getConnection();

// 2.预编译SQL语句
String sql = "insert into customers(name, email, birth) values(?, ?, ?)";

// 3.获取PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);

// 4.填充占位符
ps.setString(1, "哪吒");
ps.setString(2, "nezha@gmail.com");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2022-12-22");
ps.setDate(3, new java.sql.Date(date.getTime()));

// 5.执行SQL语句
ps.execute();

// 6.关闭资源
JDBCUtils.closeResource(conn, ps);
}

2.更新操作

public void testUpdate() {
Connection conn = null;
PreparedStatement ps = null;

try {
// 1.获取数据库连接
conn = JDBCUtils.getConnection();

// 2.预编译SQL语句
String sql = "update customers set name = ? where id = ?";

// 3.获取PreparedStatement对象
ps = conn.prepareStatement(sql);

// 4.填充占位符
ps.setObject(1, "莫扎特");
ps.setObject(2, 18);

// 5.执行SQL语句
ps.execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6.关闭资源
JDBCUtils.closeResource(conn, ps);
}
}


举报

相关推荐

0 条评论