gpt4 book ai didi

java - 将数据库连接存储为单独的类 - Java

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:14 25 4
gpt4 key购买 nike

是否可以将数据库连接存储为单独的类,然后从主代码中调用数据库对象?即;

public class main{
public static void main{
try{
Class.forName("com.jdbc.driver");
Database to = new Database(1,"SERVER1","DATABASE");
Database from = new Database(2,"SERVER2","DATABASE");

String QueryStr = String.format("SELECT * FROM TABLE WHERE Id = %i", to.id)
to.results = sql.executeQuery(QueryStr);

while (to.results.next()) {
String QueryStr = String.format("INSERT INTO Table (A,B) VALUES (%s,%s)",to.results.getString(1),to.results.getString(2));
from.sql.executeQuery("QueryStr");
}
to.connection.close()
from.connection.close()

} catch (Exception ex) {
ex.printStackTrace();
{ finally {
if (to.connection != null)
try {
to.connection.close();
} catch (SQLException x) {
}
if (from.connection != null)
try {
from.connection.close();
} catch (SQLException x) {
}

}
}

public static class Database {
public int id;
public String server;
public String database;
public Connection connection;
public ResultSet results;
public Statement sql;

public Database(int _id, String _server, String _database) {
id = _id;
server = _server;
database = _database;
String connectStr = String.format("jdbc:driver://SERVER=%s;port=6322;DATABASE=%s",server,database);
connection = DriverManager.getConnection(connectStr);
sql = connection.createStatement;
}
}
}

当我调用 to.results = sql.executeQuery("SELECT * FROM TABLE"); 时,我不断收到“连接对象已关闭”错误就像数据库初始化完成后连接就会关闭一样。

我问的原因是我有多个数据库,它们与我转储到主数据库中的数据库大致相同。我认为设置一个循环来遍历每个 from 会很好。数据库并插入到每个 to数据库使用相同的类。这不可能吗? Database还将包含比所示更多的方法。我对 java 还很陌生,所以希望这是有意义的......

此外,我的代码可能充满了语法错误,所以尽量不要关注这一点。

最佳答案

连接对象已关闭并不意味着连接已关闭,而是表示与连接相关的对象已关闭(可以是 StatementResultSet)。

从您的示例中很难看出,因为它已被修剪/重新排列,但看起来您可能在重新使用其相应的 Statement 之后尝试使用 ResultSet。请参阅documentation :

By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.

关于java - 将数据库连接存储为单独的类 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7853446/

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