使用JDBC驱动程序,我如何使用来自不同查询的多个结果集,而不不断地打开和关闭连接,因为我正在提取所需的w.e并将其传递给另一个方法。每次打开新的conn、语句和结果集时
public static void OppQuery() {
Connection conn = null;
Statement stmt = null;
ResultSet result_set = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL);
stmt = conn.createStatement();
String emailInfoQuery = "FROM WHERE";
}
public static void addQuery(String latestRenewalId) {
Connection conn = null;
Statement stmt = null;
ResultSet result_set = null;
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL);
stmt = conn.createStatement();
String new_AddressLine1, new_AddressLine2;
new_AddressLine1=new_AddressLine2="";
int new_ChannelOption= 0;
}
我试图在一个方法中使用多个结果集,但它一直抛出异常,称结果集已关闭。我没有太多的SqlServver经验,所以任何指导都会有所帮助:-)
根据Mark的回答,由于Microsoft SQL Server JDBC驱动程序在默认情况下似乎会创建“可保留”的ResultSet对象,因此启用自动提交时,以下测试代码确实有效:
import java.sql.*;
public class SqlServerTest {
public static void main(String[] args) {
try {
String connectionUrl =
"jdbc:sqlserver://localhost:52865;" +
"databaseName=myDb;" +
"integratedSecurity=true";
Connection con = DriverManager.getConnection(connectionUrl);
System.out.println(String.format("con.getAutoCommit returned %s", con.getAutoCommit()));
Statement st1 = con.createStatement();
ResultSet rs1 = st1.executeQuery("SELECT id FROM odds");
rs1.next();
System.out.println(String.format("value from rs1: %d", rs1.getInt(1)));
Statement st2 = con.createStatement();
ResultSet rs2 = st2.executeQuery("SELECT id FROM evens");
rs2.next();
System.out.println(String.format("value from rs2: %d", rs2.getInt(1)));
rs1.next();
System.out.println(String.format("value from rs1: %d", rs1.getInt(1)));
rs2.next();
System.out.println(String.format("value from rs2: %d", rs2.getInt(1)));
rs2.close();
rs1.close();
con.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
对于名为[赔率]的表中的测试数据。。。
id description
-- -----------
1 one
3 three
5 five
...和[偶数]...
id description
-- -----------
2 two
4 four
6 six
...控制台输出为:
con.getAutoCommit returned true
value from rs1: 1
value from rs2: 2
value from rs1: 3
value from rs2: 4
在JDBC中,当连接处于自动提交模式(默认情况下)时,语句的任何执行都将提交前一个事务,并关闭同一连接上的任何打开的结果集(假设可保持性为ResultSet)。CLOSE_CURSORS_AT_COMMIT
,这实际上不是SQLServer)的默认值。当需要打开多个结果集时,需要禁用自动提交(或使用ResultSet)。HOLD_CURSORS_OVER_COMMIT
),需要使用多个语句
对象。JDBC要求在相同的语句
对象上执行新操作,关闭来自该语句的任何其他打开的结果集。
所以
Connection.setAutoCommit(false)
)问题内容: 我正在尝试调整SQL查询以检查服务器上每个数据库中存在的特定字段中存在的值。 有100个单独的数据库,我想检查每个数据库的特定记录。 答案可能是使用下面的命令,但是我很难适应它。 我在下面的链接上获得了更大的成功; https://stackoverflow.com/a/18462734/3461845 我需要能够执行以下查询: 并且还为返回的每一行拉回数据库的名称; 任何帮助是极大的
我们在Google表单响应电子表格中有员工训练数据,范围从A1到JQ1000。当Goggle表单完成时,这个电子表格会自动填充,但是很难查看,所以我想整理一下。 表单响应电子表格填充了培训活动、活动日期和参加该活动的员工。为了整理它,我认为最好使用转置(Transpose)(查询),但员工的姓名可能会在不同的列和行中出现多次。我不想写等等到JQ列。有人能帮我一个更简单的公式吗?
问题内容: 我们在项目中使用MYSQL和Hibernate。 JPA用于将对象持久存储在DB中。 我们有多个具有相似代码的类 现在我们也想对oracle提供支持。我们应该怎么做?oracle不支持strategy = GenerationType.AUTO。 一个解决方案是我们可以在每个POJO中定义我们不想做的序列吗? 请提供一些建议,以便我们继续前进。 问题答案: AUTO策略也应适用于Ora
问题内容: 我有一台服务器(SQL Server 2005),具有多个存档数据库(每季度1个,可追溯到8年),这些数据库在结构上都相同。 我经常需要在跨越n个数据库的特定日期范围内进行查询,通常n小于1-3,但是有可能我需要查询整个数据库。 从代码清洁度和性能角度来看,有什么想法是最有效的方法吗? 当前的解决方案是临时的,有一个视图集合跨越所有或仅是最新的数据库,其他解决方案是生成动态SQL,该S
问题内容: SQL2008。 我有一个测试表: 我用10k测试行填充它。 我运行以下两个查询: 我不知道为什么这两个查询有不同的执行计划。 查询1确实针对UQ_Sale_RowVersion索引进行索引搜索。 查询2对PK_Sale进行索引扫描。 我想查询2做索引查找。 我将不胜感激。 谢谢你。 [编辑] 尝试使用datetime2而不是rowversion。同样的问题。 我也尝试强制使用索引(查
问题内容: 您将如何在不同的环境中处理跨数据库查询。例如,db1-development和db2-development,db1-production和db2-production。 如果要在从db2到db1的开发中进行跨数据库查询,则可以使用完全限定的名称,即[db1-development]。[schema]。[table]。但是,如何在不同环境之间维护查询和存储过程?[db1-develop