-
关于preparestatement的详解5
- /**
- * 将用户信息插入数据库
- * @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的部分,有点看不懂
2012年8月30日 16:11
2个答案按时间排序按投票排序
-
采纳的答案
http://demojava.iteye.com/blog/720308
JDBC操作对象使用PreparedStatement代替Statement2012年8月30日 16:16
-
Statement与PreparedStatement区别
1、PreparedStatement能防止SQL注入问题,而Statement是动态拼出SQL,因此不能解决;
2、PreparedStatement对SQL进行预编译,因此如果我们采用绑定变量的SQL(语句类似,数据不同)数据库只需解析一次(生成执行计划),因此效率要高;
3、Statement由于没有采用绑定变量,因此可能每次都需要编译(生成执行计划),因此对于那种语句类似但数据不同的SQL每次都需要编译,效率低;
4、PreparedStatement开销要比Statement高, 因此如果SQL只执行一次,应该使用Statement。
5、在大多数情况下都应该使用PreparedStatement。
2012年8月30日 16:22-
jinnianshilongnian
- PreparedStatement 是一种预编译Statement;即我们知道我们SQL格式不变 但是数据每次是不一样的,因此呢,我们用? 代替 数据,,但这样的话 我们必须通过类似pst.setInt(5, uv.getCityId()); 设置?的值 第一个?的索引是1 第二个是2 依次类推 2012-08-30 16:23
-
dafa_chang
-
1.pst=con.prepareStatement(sql); 什么意思?
2.若是用statement的话 st.executeUpdate(sql);用preparestatement的为啥是 pst.executeUpdate(); 括号内的sql呢
2012-08-30 17:04
-
jinnianshilongnian
-
pst=con.prepareStatement(sql) 表示预编译SQL,
2、 st.executeUpdate(sql); 这种方式表示 编译 并执行 参数需要在sql上拼 可能有sql注入的风险 2012-08-30 17:09
-
dafa_chang
-
rs = pst.getGeneratedKeys();//获取自增长的列的新值
23. while(rs.next()){
24. userId=rs.getInt(1);
25. }
这几句我看不懂。。。嘿嘿
2012-08-30 17:12
-
jinnianshilongnian
-
pst.getGeneratedKeys() 这句是获取 数据库中的自增主键
rs.next() 表示判断是否有下一条记录并将指针移动到那一行;
接下来可以通过rs.getInt()获取 类似于Iterator 2012-08-30 17:18
-
dafa_chang
-
为什么是getint(1)呢?获取1是什么意思?而且为什么返回userId?有什么用?
不好意思我问题有点多了 2012-08-30 17:33
-
jinnianshilongnian
- get(1) 是第一列的值 以此类推 2012-08-30 17:33