关于preparestatement的详解


0

关于preparestatement的详解5

Java代码   收藏代码
  1. /** 
  2.  * 将用户信息插入数据库 
  3.  * @param uv 
  4.  * @return 
  5.  */  
  6. public int insertUser(UserVo uv){  
  7.     int userId = 0;  
  8.     initDb(); **初始化连接数据库的方法  
  9.     PreparedStatement pst=null;  
  10.     ResultSet rs=null;  
  11.       
  12.     try {  
  13.         String sql="INSERT INTO usertable (user_name,user_password,user_sex,province_id,city_id,user_describe) VALUES (?,?,?,?,?,?)";  
  14.         pst=con.prepareStatement(sql);  
  15.         pst.setString(1, uv.getUserName());  
  16.         pst.setString(2, uv.getUserPassword());  
  17.         pst.setString(3, uv.getUserSex());  
  18.         pst.setInt(4, uv.getProvinceId());  
  19.         pst.setInt(5, uv.getCityId());  
  20.         pst.setString(6, uv.getUserDescribe());  
  21.         pst.executeUpdate();  
  22.         rs = pst.getGeneratedKeys();//获取自增长的列的新值          
  23.         while(rs.next()){  
  24.             userId=rs.getInt(1);  
  25.         }  
  26.     } catch (SQLException e) {  
  27.         try {  
  28.             con.rollback();  
  29.         } catch (SQLException e1) {  
  30.             // TODO Auto-generated catch block  
  31.             e1.printStackTrace();  
  32.         }  
  33.         // TODO Auto-generated catch block  
  34.         e.printStackTrace();  
  35.     }  
  36.     finally{  
  37.         try {  
  38.             pst.close();  
  39.             con.close();  
  40.         } catch (SQLException e) {  
  41.             // TODO Auto-generated catch block  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45.     return userId;  
  46. }  

 着重讲解一下preparestatement的部分,有点看不懂

2012年8月30日 16:11

2个答案按时间排序按投票排序

0 0

采纳的答案

http://demojava.iteye.com/blog/720308 
JDBC操作对象使用PreparedStatement代替Statement

2012年8月30日 16:16
0 0

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值