データベース接続を別のクラスとして保存してから、メインコードからデータベースオブジェクトを呼び出すことはできますか?すなわち、データベース接続を別に保存するクラス - Java
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");
を呼び出すときに「Connectionオブジェクトがクローズされた」エラーを得続けます。
私が尋ねる理由は、私がマスターデータベースにダンプしているものとほぼ同じである複数のデータベースがあることです。私は、それぞれのfrom
データベースを通過し、同じクラスを使用して各to
データベースに挿入するためのループをセットアップするのが良いと思った。これは不可能ですか? Database
には、これよりも多くのメソッドも含まれます。私はかなりJavaに新しいので、これはうまくいけば、これは意味をなさない...
また、私のコードは、おそらく構文エラーで謎めいているので、それに集中しようとしないでください。
あなたのコードが実際にやっていることを知らず、それは言うことは不可能です。接続をどこで/どのように開いているか、 'sql'とは何か、接続とのやりとりなどの手掛かりはありません。 –
' String.format'を使用してパラメータを渡すことをお勧めします。これはあなたが脆弱である可能性が高い方法ですSQLインジェクション。 'PreparedStatement'を使い、代わりにセッターを介してパラメータを設定してください。 – Bruno
Dave、 'Database to = new Database(...) 'でデータベースを初期化すると接続が行われます。(') 'sql'はデータベース' connection.createStatement'です。 –