问题
sql注入: 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
解决办法
为了解决这个问题,我们使用preparedStatement来执行sql命令,它的使用跟之前的Statement不太一样,它不能使用字符串拼接,未知的参数用“?”(占位符)代替,后面可以进行赋值,并且它在执行executeQuery和executeUpdate方法时不用传递参数。
步骤:
步骤:
创建集合或者实体类对象(可选-查询)
加载驱动
获取连接对象
设置手动数据提交(可选--增删改)
创建sql命令
获取sql命令对象
给占位符赋值
执行sql语句
遍历执行结果(可选--查询)
提交数据(可选--增删改)
回滚数据(可选-增删改)
关闭资源
返回结果
public User getUSerInfo(String uname, String upwd) throws ClassNotFoundException, SQLException {
User u=null;
Connection conn=JdbcUtil.getConnection();
String sql="select * from t_user where uname=? and upwd=?";
PreparedStatement ps= JdbcUtil.getPreparedStatement(conn,sql);
ps.setString(1,uname);
ps.setString(2,upwd);
ResultSet rs=ps.executeQuery();
while(rs.next()){
u=new User();
u.setUnum(rs.getInt("unum"));
u.setUname(rs.getString("uname"));
u.setUpwd(rs.getString("upwd"));
return u;
}
JdbcUtil.closeAll(rs,ps,conn);
return u;
}
//新增--preparedStatement
public int insUser2() throws ClassNotFoundException, SQLException{
//创建连接对象
Connection conn=JdbcUtil.getConnection();
//创建sql命令
String sql="insert into t_user values(?,?,?)";
//创建sql命令对象
PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql);
//给占位符赋值
ps.setInt(1, 7);
ps.setString(2,"赵六");
ps.setString(3,"666");
//执行sql命令
int i=ps.executeUpdate();
//关闭资源
JdbcUtil.closeAll(null,ps,conn);
//返回结果
return i;
}
//更新
public int upUser(String uname,int unum) throws ClassNotFoundException, SQLException {
//创建连接
Connection conn=JdbcUtil.getConnection();
//创建sql命令
String sql="update t_user set uname=? where unum=?";
//创建sql命令对象
PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql);
ps.setString(1,uname);
ps.setInt(2,unum);
int i=ps.executeUpdate();
JdbcUtil.closeAll(null,ps,conn);
return i;
}
//删除
public int delUser(int unum) throws ClassNotFoundException, SQLException {
Connection conn=JdbcUtil.getConnection();
//创建sql命令
String sql="delete from t_user where unum=?";
//创建sql命令对象
PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql);
ps.setInt(1,unum);
int i=ps.executeUpdate();
JdbcUtil.closeAll(null,ps,conn);
return i;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
UserDaoImpl2 ud=new UserDaoImpl2();
User u=ud.getUSerInfo("李四","456");
System.out.println(u);
}