执行select语句
不带查询条件
String sql="select * from book";
PreparedStatement ps=conn.prepareStatement(sql);//预编译sql
ResultSet rs=ps.executeQuery();//执行查询
List list=new ArrayList();
while(rs.next()){
Object[] array=new Object[columnNum];
for(int i=0;i<columnNum;i++){
array[i]=rs.getObject(i+1);
}
list.add(array);
}
rs.close();
ps.close();
PreparedStatement 与 Statement 执行过程基本相同,只有2处不一样
防止SQL注入
当有查询条件时,使用 ? 作为占位符,可以防止 SQL注入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class PreparedStatement防止SQL注入 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String url = "jdbc:mysql://127.0.0.1:3308/scott?useSSL=false";
// 正常的用户名、密码
String username = "lilei";
String password = "123456";
// sql注入
// String username = "' or 1=1 #";
// String password = "";
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, "root", "");
String sql = "SELECT * FROM USER WHERE username=? and password=? ";
System.out.println(sql);
PreparedStatement ps=conn.prepareStatement(sql);//创建PreparedStatement接口对象时,需要传入sql,预编译sql
ps.setObject(1,username);
ps.setObject(2,password);
ResultSet rs=ps.executeQuery();
if (rs.next()) {
String id = rs.getString(1);
Object name = rs.getObject(2);
Object passowrd = rs.getObject(3);
System.out.println("登录成功!");
System.out.println(id + "," + name + "," + passowrd);
} else {// 没有查询到此用户、密码,说明登录失败
System.out.println("输入用户名或密码错误,请重新输入!");
}
conn.close();
}
}