最近想著給公司的一些賬號密碼做一個管理,就想做一個內(nèi)部網(wǎng)站。在處理數(shù)據(jù)庫的時候,jdbc的PreparedStatement 給了我很多坑。在此記錄一下: 1,查詢:比較順利 String sql = "select * from pa_yc"; pstmt=conn.prepareStatement(sql); rSet=pstmt.executeQuery(); while (rSet.next()) { RemoteControlMsg remoteControlMsg=new RemoteControlMsg(); int id=rSet.getInt("id"); } 2,更新:坑 一堆堆 第一個坑: String sql="UPDATE pa_yc set (pc_name = ?,xrk_no=?,xiangrikui_pwd=?,todesk_no=?,todesk_pwd=?) WHERE id = ?;"; Object[] objects = new Object[] {remote.getId(),remote.getPc_name(),remote.getXiangrikui_no(),remote.getXiangrikui_pwd(),remote.getTodesk_no(),remote.getTodesk_pwd()}; pstmt = conn.prepareStatement(sql1); for(int i=0;i<objects.Length();i++){ pstmt.setObject(i+1,objects[i]); } 正常情況下,這種方式是可以的。但是我用的時候始終有錯,折磨了好久,最后發(fā)現(xiàn) sql語句是有限制的。字符串太長就會被截斷舍棄。 然后我想著分開更新信息: String sql1="update pa_yc set pc_name =? where id =?;"; String sql2="update pa_yc set xrk_no=? WHERE id =?"; String sql3="update pa_yc set xrk_pwd=? WHERE id =?"; String sql4="update pa_yc set td_pwd=? WHERE id =?"; String sql5="update pa_yc set td_no=? WHERE id =?"; Object[] objects = new Object[] {remote.getId(),remote.getPc_name(),remote.getXiangrikui_no(),remote.getXiangrikui_pwd(),remote.getTodesk_no(),remote.getTodesk_pwd()}; try { pstmt = conn.prepareStatement(sql1);pstmt.setObject(1, objects[1]);pstmt.setObject(2, objects[0]); pstmt.execute();pstmt.close();pstmt=null; pstmt = conn.prepareStatement(sql2);pstmt.setObject(1, objects[2]);pstmt.setObject(2, objects[0]); pstmt.executeUpdate();pstmt.close();pstmt=null; pstmt = conn.prepareStatement(sql3);pstmt.setObject(1, objects[3]);pstmt.setObject(2, objects[0]); pstmt.executeUpdate();pstmt.close();pstmt=null; pstmt = conn.prepareStatement(sql4);pstmt.setObject(1, objects[4]);pstmt.setObject(2, objects[0]); pstmt.executeUpdate();pstmt.close();pstmt=null; pstmt = conn.prepareStatement(sql5);pstmt.setObject(1, objects[5]);pstmt.setObject(2, objects[0]); pstmt.executeUpdate();pstmt.close();pstmt=null; } 坑的地方:1,sql 中,set xxx = ? 這個地方 不能有”()“ 2,在每一個pstmt.executeUpdate();后面,都需要pstmt.close();pstmt=null; 3,增加:比較順利,按照正常的方式 String sql = "insert INTO pa_yc(pc_name,xrk_no,xrk_pwd,td_no,td_pwd) values (?,?,?,?,?);"; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1, remoteControlMsg.getPc_name()); pstmt.setString(2, remoteControlMsg.getXiangrikui_no()); pstmt.setString(3, remoteControlMsg.getXiangrikui_pwd()); pstmt.setString(4, remoteControlMsg.getTodesk_no()); pstmt.setString(5, remoteControlMsg.getTodesk_pwd()); pstmt.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { Close(); } |
|
來自: 鴻蛟家平 > 《Java部署網(wǎng)站》