请问通过ResultSet得到PreparedStatement对像,然后关闭PreparedStatement可行吗?

山城忙碌人 2012-07-22 06:28:15
代码如下:
void test(ResultSet rs){
if (rs != null) {
PreparedStatement ps = null;
try {
ps = (PreparedStatement) rs.getStatement();
rs.close();
} catch (Throwable e) {
rs = null;
e.printStackTrace();
}finally{
if (ps != null) {
try {
ps.close();
} catch (Throwable e) {
ps = null;
e.printStackTrace();
}
}
}
}

请问通过这种方式关闭PreparedStatement 对像有问题吗?我在本地开了50个线程,每三秒操作一次测试表(表里数据目前只有两条),还没遇到任何问题。欢迎大家讨论,共同进步!
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightyq 2012-07-22
  • 打赏
  • 举报
回复
干啥哪?散分哪?
山城忙碌人 2012-07-22
  • 打赏
  • 举报
回复
ldh911

我一直使用的是PreparedStatement正常情况不会转换失败。Connection是直接关闭的。
MiceRice 2012-07-22
  • 打赏
  • 举报
回复
我X,这么多重复发帖。。。刚好我补充点信息:

没啥问题,有一种风险就是之前用的不是PreparedStatement打开的ResutSet,那么会类型转换失败。

建议不要强转为PreparedStatement,直接用Statement!

不过最关键的仍然是关闭Connection。
山城忙碌人 2012-07-22
  • 打赏
  • 举报
回复
忘记补充,数据库是sqlserver2005
package user; import java.sql.*; import java.util.*; import java.util.Date; import java.sql.PreparedStatement; import com.ConnDB; import java.sql.*; import java.util.*; import com.ConnDB; public class UserDB extends ConnDB{ private ArrayList user; public UserDB () throws Exception { } public boolean userExist(String username){ boolean occupied=true; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "select userid from Buser where username=?"); preparedStatement.setString (1, username); ResultSet resultSet = preparedStatement.executeQuery (); if(!resultSet.next()) occupied=false; preparedStatement.close (); ConnDB.terminate(); } catch(SQLException e){ e.printStackTrace(); ConnDB.terminate(); } return occupied; } public boolean isValidUser (String username, String password) { boolean isValid=false; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT username, password FROM Buser WHERE username=? and password=?"); preparedStatement.setString (1, username); preparedStatement.setString (2, password); ResultSet resultSet = preparedStatement.executeQuery (); if (resultSet.next ()) { isValid=true; preparedStatement.close (); ConnDB.terminate(); } else { preparedStatement.close (); ConnDB.terminate(); //return isValid; } } catch (SQLException e) { ConnDB.terminate(); //return isValid; } return isValid; } public boolean find(String key) { boolean gotIt=false; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT username, password FROM Buser WHERE username = ?"); preparedStatement.setString (1, key); ResultSet resultSet = preparedStatement.executeQuery (); if (resultSet.next ()) { gotIt=true; preparedStatement.close (); ConnDB.terminate(); } else { preparedStatement.close (); ConnDB.terminate(); //return isValid; } } catch (SQLException e) { ConnDB.terminate(); //return gotIt; } return gotIt; } public User getUser (int id) { try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT userid, username, rname, password, email, address, postdate, tel " + "FROM Buser WHERE userId = ?"); preparedStatement.setInt (1, id); ResultSet resultSet = preparedStatement.executeQuery (); if (resultSet.next ()) { User users = new User ( resultSet.getInt (1), resultSet.getString (2), resultSet.getString (3), resultSet.getString (4), resultSet.getString (5), resultSet.getString (6), resultSet.getString (7), resultSet.getString (8) ); preparedStatement.close (); ConnDB.terminate(); return users; } else { preparedStatement.close (); ConnDB.terminate(); return null; } } catch (SQLException e) { ConnDB.terminate(); return null; } } public User getUser (String username) { try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT userid, username, rname, password, email, address, postdate, tel " + "FROM Buser WHERE username = ?"); preparedStatement.setString (1, username); ResultSet resultSet = preparedStatement.executeQuery (); if (resultSet.next ()) { User users = new User ( resultSet.getInt (1), resultSet.getString (2), resultSet.getString (3), resultSet.getString (4), resultSet.getString (5), resultSet.getString (6), resultSet.getString (7), resultSet.getString (8) ); preparedStatement.close (); ConnDB.terminate(); return users; } else { preparedStatement.close (); ConnDB.terminate(); return null; } } catch (SQLException e) { ConnDB.terminate(); return null; } } public int addUsers (User users) { System.out.println("**"); int rowsAffected = 0; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "INSERT INTO Buser (username, rname, password, email, address, postdate, tel) " + "VALUES (?, ?, ?, ?, ?, ?, ?)"); preparedStatement.setString (1, users.getUsername ()); preparedStatement.setString (2, users.getRname ()); preparedStatement.setString (3, users.getPassword()); preparedStatement.setString (4, users.getEmail()); preparedStatement.setString (5, users.getAddress()); preparedStatement.setString (6, users.getPostdate()); preparedStatement.setString (7, users.getTel()); //判断是否重复添加 if(find(users.getUsername ())){ rowsAffected =2; System.out.println("exist username"); } else{ rowsAffected = preparedStatement.executeUpdate (); System.out.println(rowsAffected + "add"); } preparedStatement.close (); ConnDB.terminate(); } catch (SQLException e) { ConnDB.terminate(); return 0; } return rowsAffected; } public int deleteUser (int id) { int rowsAffected = 0; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ("DELETE FROM Buser WHERE userid = ?"); preparedStatement.setInt (1, id); rowsAffected = preparedStatement.executeUpdate (); preparedStatement.close (); ConnDB.terminate(); } catch (SQLException e) { ConnDB.terminate(); return 0; } return rowsAffected; } public int modifyUser (User users) { int rowsAffected = 0; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "UPDATE Buser SET username=?, rname=?, password=?, email=?, address=?, postdate=?, tel=? " + "WHERE userid =?"); preparedStatement.setString (1, users.getUsername ()); preparedStatement.setString (2, users.getRname ()); preparedStatement.setString (3, users.getPassword()); preparedStatement.setString (4, users.getEmail()); preparedStatement.setString (5, users.getAddress()); preparedStatement.setString (6, users.getPostdate()); preparedStatement.setString (7, users.getTel()); preparedStatement.setInt (8, users.getId ()); rowsAffected = preparedStatement.executeUpdate (); preparedStatement.close (); ConnDB.terminate(); } catch (SQLException e) { ConnDB.terminate(); return 0; } return rowsAffected; } public Collection getUser () { user = new ArrayList (); try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT userid, username, rname, password, email, address, postdate, tel " + "FROM Buser"); ResultSet resultSet = preparedStatement.executeQuery (); while (resultSet.next ()) { User users = new User ( resultSet.getInt (1), resultSet.getString (2), resultSet.getString (3), resultSet.getString (4), resultSet.getString (5), resultSet.getString (6), resultSet.getString (7), resultSet.getString (8) ); user.add(users); } preparedStatement.close (); } catch (SQLException e) { return null; } ConnDB.terminate(); //Collections.sort(user); return user; } public boolean isModify(String key,int id) { boolean modifyIt=false; try { ConnDB.initialize(); // create database connection PreparedStatement preparedStatement = conn.prepareStatement ( "SELECT userid FROM Buser WHERE username = ? and userd <> ?"); preparedStatement.setString (1, key); preparedStatement.setInt (2, id); ResultSet resultSet = preparedStatement.executeQuery (); if (resultSet.next ()) { modifyIt=true; preparedStatement.close (); ConnDB.terminate(); } else { preparedStatement.close (); ConnDB.terminate(); //return isValid; } } catch (SQLException e) { ConnDB.terminate(); //return gotIt; } return modifyIt; } }
货架仓库管理package real.action.dao; import java.io.PrintStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.ComboBoxModel; import real.action.data.SupplierData; import real.action.sql.ConnectionFactory; public class SupplierDao { private Connection conn; private Statement statement; private PreparedStatement preparedStatement;//SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 private ResultSet resultSet;//结果集 public boolean addSupplier(SupplierData s)//添加供应商 { String sql = "insert into suppliers values(?,?,?,?,?,?,?,?)"; try { this.conn = ConnectionFactory.getConnection(); this.preparedStatement = this.conn.prepareStatement(sql); this.preparedStatement.setInt(1, s.getSupplierId()); this.preparedStatement.setString(2, s.getSupplierName()); this.preparedStatement.setString(3, s.getSupplierAddress()); this.preparedStatement.setString(4, s.getPostCode()); this.preparedStatement.setString(5, s.getSupplierTelephone()); this.preparedStatement.setString(6, s.getSupplierFax()); this.preparedStatement.setString(7, s.getSupplierRelationer()); this.preparedStatement.setString(8, s.getSupplierEmail()); int flag = this.preparedStatement.executeUpdate(); if (flag > 0) { return true; } } catch (Exception e) { e.printStackTrace(); } return false; } public boolean isExistSupplierData() { boolean flag = true; int row = 0; String sql = "select count(sup_id) as count from suppliers"; try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(sql); if (this.resultSet.next()) { row = this.resultSet.getInt("count"); } if (row == 0) { return false; } } catch (Exception e) { e.printStackTrace(); } return flag; } public boolean isExistSupplierById(int number)//ID已存在 { boolean flag = false; String sql = "select sup_id from suppliers"; try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(sql); while (this.resultSet.next()) { SupplierData supplierData = new SupplierData(); supplierData.setSupplierId(this.resultSet.getInt(1));//设置ID if (supplierData.getSupplierId() == number) {//比较ID flag = true; break; } } } catch (Exception e) { e.printStackTrace(); } return flag; } public List<Object> getFindAllSupplierId()//获取所有供应商id { List listsupplierId = new ArrayList();//滚动列表 String sql = "select sup_id from suppliers "; try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(sql); while (this.resultSet.next()) listsupplierId.add(Integer.valueOf(this.resultSet.getInt(1))); } catch (Exception e) { e.printStackTrace(); } return listsupplierId; } public SupplierData getSupplierbySupplierName(String name) { SupplierData supplierData = null; String sql = "select * from suppliers where sup_name = ?"; try { this.conn = ConnectionFactory.getConnection(); this.preparedStatement = this.conn.prepareStatement(sql); this.preparedStatement.setString(1, name); this.resultSet = this.preparedStatement.executeQuery(); if (this.resultSet.next()) { supplierData = new SupplierData(); supplierData.setSupplierId(this.resultSet.getInt(1)); supplierData.setSupplierName(this.resultSet.getString(2)); supplierData.setSupplierAddress(this.resultSet.getString(3)); supplierData.setPostCode(this.resultSet.getString(4)); supplierData.setSupplierTelephone(this.resultSet.getString(5)); supplierData.setSupplierFax(this.resultSet.getString(6)); supplierData.setSupplierRelationer(this.resultSet.getString(7)); supplierData.setSupplierEmail(this.resultSet.getString(8)); } } catch (Exception e) { e.printStackTrace(); } return supplierData; } public Map getAllSupplier() { Map supplierData = new HashMap();//基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作 String sql = "select sup_id,sup_name,sup_address,postcode,sup_telephone,sup_fax,sup_relationer,sup_email from suppliers"; try { conn = ConnectionFactory.getConnection(); preparedStatement = conn.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); while (resultSet.next())// 在此映射中关联指定值与指定键。使供应商ID与名称关联 supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public SupplierData getSupplierbySupplierId(String number) { SupplierData supplierData = null; String sql = "select sup_id,sup_name,sup_address,postcode,sup_telephone,sup_fax,sup_relationer,sup_email from suppliers where sup_id = ?"; try { this.conn = ConnectionFactory.getConnection(); this.preparedStatement = this.conn.prepareStatement(sql); this.preparedStatement.setString(1, number); this.resultSet = this.preparedStatement.executeQuery(); if (this.resultSet.next()) { supplierData = new SupplierData(); supplierData.setSupplierId(this.resultSet.getInt(1)); supplierData.setSupplierName(this.resultSet.getString(2)); supplierData.setSupplierAddress(this.resultSet.getString(3)); supplierData.setPostCode(this.resultSet.getString(4)); supplierData.setSupplierTelephone(this.resultSet.getString(5)); supplierData.setSupplierFax(this.resultSet.getString(6)); supplierData.setSupplierRelationer(this.resultSet.getString(7)); supplierData.setSupplierEmail(this.resultSet.getString(8)); } } catch (Exception e) { e.printStackTrace(); } return supplierData; } public List<Object> getFindSupplier() { List lstSupplierData = new ArrayList(); String sql = "select sup_id,sup_name,sup_address,postcode,sup_telephone,sup_fax,sup_relationer,sup_email from suppliers"; try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(sql); while (this.resultSet.next()) { lstSupplierData.add(Integer.valueOf(this.resultSet.getInt(1))); lstSupplierData.add(this.resultSet.getString(2)); lstSupplierData.add(this.resultSet.getString(3)); lstSupplierData.add(this.resultSet.getString(4)); lstSupplierData.add(this.resultSet.getString(5)); lstSupplierData.add(this.resultSet.getString(6)); lstSupplierData.add(this.resultSet.getString(7)); lstSupplierData.add(this.resultSet.getString(8)); } } catch (Exception e) { e.printStackTrace(); } return lstSupplierData; } public boolean updateSupplierById(SupplierData s)//按ID更新供应商 { boolean flag = false; String sql = "update suppliers set sup_name = ?,sup_address = ? ,postcode = ? ,sup_telephone = ? ,sup_fax = ? , sup_relationer = ? , sup_email = ? where sup_id = ?"; try { this.conn = ConnectionFactory.getConnection(); this.preparedStatement = this.conn.prepareStatement(sql); this.preparedStatement.setInt(8, s.getSupplierId()); this.preparedStatement.setString(1, s.getSupplierName()); this.preparedStatement.setString(2, s.getSupplierAddress()); this.preparedStatement.setString(3, s.getPostCode()); this.preparedStatement.setString(4, s.getSupplierTelephone()); this.preparedStatement.setString(5, s.getSupplierFax()); this.preparedStatement.setString(6, s.getSupplierRelationer()); this.preparedStatement.setString(7, s.getSupplierEmail()); int insertReow = this.preparedStatement.executeUpdate(); if (insertReow > 0) flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } public boolean deleteSupplierById(int number) { boolean flag = false; String sql = "delete from suppliers where sup_id=?"; try { this.conn = ConnectionFactory.getConnection(); this.preparedStatement = this.conn.prepareStatement(sql); this.preparedStatement.setInt(1, number); int insertReow = this.preparedStatement.executeUpdate(); if (insertReow > 0) { flag = true; } } catch (Exception e) { e.printStackTrace(); } return flag; } public List<Object> getSupplier()//获取所有供应商 { List lstSuppplierData = new ArrayList(); String sql = "select sup_id,sup_name,sup_address,postcode,sup_telephone,sup_fax,sup_relationer,sup_email from suppliers"; try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(sql); while (this.resultSet.next()) { lstSuppplierData.add(Integer.valueOf(this.resultSet.getInt(1))); lstSuppplierData.add(this.resultSet.getString(2)); lstSuppplierData.add(this.resultSet.getString(3)); lstSuppplierData.add(this.resultSet.getString(4)); lstSuppplierData.add(this.resultSet.getString(5)); lstSuppplierData.add(this.resultSet.getString(6)); lstSuppplierData.add(this.resultSet.getString(7)); lstSuppplierData.add(this.resultSet.getString(8)); } } catch (Exception e) { e.printStackTrace(); } return lstSuppplierData; } public List<Object> getFoundSuppliers(String string)//获取指定ID供应商 { List lstSupplierData = new ArrayList(); try { this.conn = ConnectionFactory.getConnection(); this.statement = this.conn.createStatement(); this.resultSet = this.statement.executeQuery(string); while (this.resultSet.next()) { lstSupplierData.add(Integer.valueOf(this.resultSet.getInt(1))); lstSupplierData.add(this.resultSet.getString(2)); lstSupplierData.add(this.resultSet.getString(3)); lstSupplierData.add(this.resultSet.getString(4)); lstSupplierData.add(this.resultSet.getString(5)); lstSupplierData.add(this.resultSet.getString(6)); lstSupplierData.add(this.resultSet.getString(7)); lstSupplierData.add(this.resultSet.getString(8)); } } catch (Exception e) { e.printStackTrace(); } return lstSupplierData; } public ComboBoxModel getProductId() { // TODO Auto-generated method stub return null; } }

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧