首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用单个JDBC语句对象执行多个查询

使用单个JDBC语句对象执行多个查询
EN

Stack Overflow用户
提问于 2014-01-24 15:38:13
回答 2查看 87.6K关注 0票数 28

在JDBC中,可以使用单个Statement对象多次调用executeQuery("")吗?安全吗?或者,我应该在每次查询后关闭statement对象,然后创建新对象来执行另一个查询。

例如:

代码语言:javascript
复制
Connection con;
Statement s;
ResultSet rs;
ResultSet rs2;
try
{
    con = getConnection();
    s = con.prepareStatement();

    try
    {
        rs = s.executeQuery(".......................");

        // process the result set rs
    }
    finally
    {
        close(rs);
    }

    // I know what to do to rs here
    // But I am asking, should I close the Statement s here? Or can I use it again for the next query?

    try
    {
        rs2 = s.executeQuery(".......................");

        // process the result set rs2
    }
    finally
    {
        close(rs2);
    }
}
finally
{
    close(s);
    close(con);
}
EN

回答 2

Stack Overflow用户

发布于 2014-01-24 15:46:02

是的,您可以重用Statement(特别是PreparedStatement),通常应该使用JDBC这样做。如果不重用语句并立即创建另一个相同的Statement对象,这将是低效和糟糕的风格。就关闭它而言,在finally块中关闭它将是合适的,就像您在此代码片段中一样。

有关您所问问题的示例,请查看此链接:jOOq Docs

票数 27
EN

Stack Overflow用户

发布于 2014-01-24 16:08:46

首先,我对你的代码感到困惑。

代码语言:javascript
复制
s = con.prepareStatement();

它工作正常吗?我在JAVA API中找不到这样的函数,至少有一个参数是needed.Maybe您想要调用这个函数

代码语言:javascript
复制
s = con.createStatement();

我只用一个语句实例运行了两次访问DB2的代码,没有在两个操作之间关闭它,这很好用,我想你也可以自己尝试一下。

代码语言:javascript
复制
    String sql = "";
    String sql2 = "";
    String driver = "com.ibm.db2.jcc.DB2Driver";
    String url = "jdbc:db2://ip:port/DBNAME";
    String user = "user";
    String password = "password";
    Class.forName(driver).newInstance();
    Connection conn = DriverManager.getConnection(url, user, password);
    Statement statement = conn.createStatement();
    ResultSet resultSet = statement.executeQuery(sql);
    int count = 0;
    while (resultSet.next()) {
        count++;
    }
    System.out.println("Result row count of query number one is: " + count);
    count = 0;
    resultSet = statement.executeQuery(sql2);
    while (resultSet.next()) {
        count++;
    }
    System.out.println("Result row count of query number two is: " + count);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21327012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档