我可以使用/调用在大括号之外的花括号内创建的结果集或预备语句对象吗?

时间:2017-03-12 14:29:02

标签: java jdbc

据说除非你关闭它,否则Resultset对象或preparedstatemt对象仍然存在。因此,可以在创建它的大括号之外调用它。

这样的东西
@angular/cli: 1.0.0-rc.1
node: 7.7.2
os: darwin x64
@angular/common: 2.4.8
@angular/compiler: 2.4.8
@angular/core: 2.4.8
@angular/forms: 2.4.8
@angular/http: 2.4.8
@angular/platform-browser: 2.4.8
@angular/platform-browser-dynamic: 2.4.8
@angular/router: 3.4.8
@angular/cli: 1.0.0-rc.1

如果没有,是否有办法做到这一点,首先我根据特定条件创建PST,然后通过一个通用语法使用它?

3 个答案:

答案 0 :(得分:1)

不是你不能使用:

  1. 将您的PreparedStatement声明在空白块旁边
  2. 使用(在if或else块中对您的PreparedStatement进行初始化)
  3. 您的代码应如下所示

    PreparedStatement pst = null;//declaration outside your if block
    
    if (output.equals("A")) {
       pst = connextion.prepareStatement("Query1");//initialization inside your if block 
    } else if (output.equals("B")) {
        pst = connextion.prepareStatement("Query2");//or initialization inside your else
    }
    
    pst.setString(1, qty1);
    pst.setInt(2, qty2);
    

答案 1 :(得分:0)

除YCF_Ls答案外,您只需在创建PreparedStatement之前选择查询字符串

String query = "DefaultQuery"; // you have no "final" else,
                               // therefore you could pass the if/else cascade
                               // without initializing the query reference.
                               // so we have to give a default value here.
if (output.equals("A")) {
 query=  "Query1";
} else if (output.equals("B")) {
 query=  "Query2";
}
PreparedStatement pst  = connextion.prepareStatement(query);
pst.setString(1, qty1);
pst.setInt(2, qty2);

答案 2 :(得分:0)

只需调整您的业务逻辑。以下是我的建议。

String SQL = null;
if (output.equals("A")) {
   SQL = "Query1";    
} else if (output.equals("B")) {
   SQL = "Query2";
}
PreparedStatement pst = connextion.prepareStatement(SQL);
pst.setString(1, qty1);
pst.setInt(2, qty2);