gpt4 book ai didi

java - 这是一个很好的编码实践 - 传递连接吗?

转载 作者:行者123 更新时间:2023-12-01 13:40:45 25 4
gpt4 key购买 nike

这是我的故事。我有myCon=getUnusedConnection();从连接池获取连接的方法。我还有一个releaseConnection(myCon);使用完连接池后释放连接的方法。

好的,在编码时,我需要多次从数据库中选择数据,因为我想重用我的代码,所以我想为 1 个操作提供多种方法。例如,

public static List<String[]> getData(){
Connection myCon=null;
PreparedStatement preparedStmt=null;
try{
myCon=getUnusedConnection();
String sql="select ........";
preparedStmt=myCon.prepareStatement(sql);
ResultSet results=preparedStmt.executeQuery();
String str="";
if(results.next()){
str=results.getString(1);
}
if(!str.equals("")){
List<String[]> list=getData2(myCon, preparedStmt, str);
}
return list;
}
catch (SQLException ex) {
while (ex != null) {
System.out.println ("SQL Exception: " +
ex.getMessage ());
ex = ex.getNextException ();
}
}catch (java.lang.Exception e) {
System.out.println("***ERROR-->" + e.toString());
}
finally{
releaseConnection (myCon);
closeStatement (preparedStmt);
}
return null;
}

public static List<String[]> getData2(Connection myCon, PreparedStatement preparedStmt, String str){

try{
List<String[]> list=new ArrayList<String[]>();
String sql="c.......";
preparedStmt=myCon.prepareStatement(sql);
ResultSet results=preparedStmt.executeQuery();
while(results.next()){
list.add(results.getString(1));
}
return list;
}catch (SQLException ex) {
while (ex != null) {
System.out.println ("SQL Exception: " +
ex.getMessage ());
ex = ex.getNextException ();
}
}catch (java.lang.Exception e) {
System.out.println("***ERROR-->" + e.toString());
}
finally {

closeStatement(preparedStmt);
releaseConnection(myCon);
}
return null;
}

我需要包含 try - catch - finally在 getData2 中?因为我路过myCon & prepareStatement所以我不确定这是否是正确的编码方式。

这是我编码的标准方式吗?或者你能做更好的编码吗?

最佳答案

Do i need to include try - catch - finally in getData2?

答案取决于您调用 getData2 的其他位置:

  • 如果 getData 是唯一的位置,那么答案是“否”,try/finally 就足够了。
  • 如果还有其他地方都需要 SQLException 并以相同的方式处理它,那么答案也是“否”,出于同样的原因(没有 catch > 为必填项)。
  • 如果还有其他地方,其中一些不期望SQLException,那么您需要保留try - catch - 最后

但是,您对 getData2 的调用进行编码的方式存在问题:因为 getData2 有一个释放连接的 finally ,您的 getData 释放连接两次。您需要添加一个 useExistingConnection(conn) 并修改您的 releaseConnection 以计算对同一连接的引用,或者传递一个标志来指示该连接是否存在应该关闭。

通常,我更愿意构建代码以在同一方法中打开和关闭连接,将连接传递给其他方法,并使用 try/finally仅关闭在从属方法中打开的 PreparedStatements,例如 getData2

关于java - 这是一个很好的编码实践 - 传递连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com