/** * 将用户信息插入数据库 * @param uv * @return */ public int insertUser(UserVo uv){ int userId = 0; initDb(); **初始化连接数据库的方法 PreparedStatement pst=null; ResultSet rs=null; try { String sql="INSERT INTO usertable (user_name,user_password,user_sex,province_id,city_id,user_describe) VALUES (?,?,?,?,?,?)"; pst=con.prepareStatement(sql); pst.setString(1, uv.getUserName()); pst.setString(2, uv.getUserPassword()); pst.setString(3, uv.getUserSex()); pst.setInt(4, uv.getProvinceId()); pst.setInt(5, uv.getCityId()); pst.setString(6, uv.getUserDescribe()); pst.executeUpdate(); rs = pst.getGeneratedKeys();//获取自增长的列的新值 while(rs.next()){ userId=rs.getInt(1); } } catch (SQLException e) { try { con.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { pst.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return userId; }
着重讲解一下preparestatement的部分,有点看不懂
[url]http://demojava.iteye.com/blog/720308[/url]
JDBC操作对象使用PreparedStatement代替Statement
Statement与PreparedStatement区别
1、PreparedStatement能防止SQL注入问题,而Statement是动态拼出SQL,因此不能解决;
2、PreparedStatement对SQL进行预编译,因此如果我们采用绑定变量的SQL(语句类似,数据不同)数据库只需解析一次(生成执行计划),因此效率要高;
3、Statement由于没有采用绑定变量,因此可能每次都需要编译(生成执行计划),因此对于那种语句类似但数据不同的SQL每次都需要编译,效率低;
4、PreparedStatement开销要比Statement高, 因此如果SQL只执行一次,应该使用Statement。
5、在大多数情况下都应该使用PreparedStatement。