1.什么是prepareStatement
- prepareStatement是表示预编译的 SQL 语句的对象。
2.为什么使用prepareStatement
1.以前的statement的执行,是先拼接sql语句然后在一起执行。在这种情况下,如果sql语句中的变量带有了数据库的关键字,那么一并认为是是关键字,而不是普通的字符串。
2.使用prepareStatement时,预先处理给定的SQL语句并且对其进行语法检查,在SQL语句中使用?作为占位符来替代后续传进来的变量,后面进来的变量将会被看成是字符串而不会产生任何的关键字。
3.基本语法
- 使用statement
public void login(String username,int password) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
PreparedStatement ps = null;
try{
conn = JDBCUtil.getConn();
st = conn.createStatement();
String sql = "select * from student where name='"+username+"' and age = '"+password+"'";
rs = st.executeQuery(sql);
if(rs.next()){
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("name = "+username+" age = "+password);
System.out.println("登录成功");
}else{
System.out.println("登陆失败");
}
}catch (Exception e){
System.out.println("异常,登陆失败");
e.printStackTrace();
}
- 使用 prepareStatement
public void login(String username,int password) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
PreparedStatement ps = null;
try{
conn = JDBCUtil.getConn();
String sql = "select * from student where name = ? and age = ?";
ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setInt(2,password);
rs = ps.executeQuery();
if(rs.next()){
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("name = "+username+" age = "+password);
System.out.println("登录成功");
}else{
System.out.println("登陆失败");
}
}catch (Exception e){
System.out.println("异常,登陆失败");
e.printStackTrace();
}
- 这是一个传入两个参数的login方法,使用此方法当“username”和“password”两个参数和数据库中的值一样时则输出“登录成功”否则为“登录失败”。不同之处在于对传入参数的处理,使用statement时直接把参数写进SQL语句中然后处理。而preparestatement处理时用?作为占位符,然后再对传入的数据进行处理。