2016-10-12 9 views
1

SYBASEデータベースからデータを取得し、取得したデータをMySQLのテーブルにコピーしようとしています。 SYBASEのjTDSドライバとMySQLのJdbc_driverを使用して、両方のデータベースを別々に接続することができます。MySQLとSybaseデータベースへの同時JDBC接続

これで、両方のデータベースを1つのプログラムで同時に接続したいと考えています。しかし、私はClass.forName()に書かれているべきものを混乱させました。

私はClass.forName(JDBC_DRIVER);をMySQLに、Class.forName("net.sourceforge.jtds.jdbc.Driver");をSYBASEに使用しました。

のSybase:

public static void main(String[] args) { 

    String a; 
    String b; 
    String c; 

    try { 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     Connection con = DriverManager.getConnection( 
       "jdbc:jtds:sybase://10.159.252.29:4100/fmdb","sa","Changeme_123"); 

     Statement stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery("selecttbl_alm_log_2000000000.Csn," 
       + "tbl_alm_log_2000000000.IsCleared," 
       + "tbl_alm_log_2000000000.Id" 
       + "From fmdb.dbo.tbl_alm_log_2000000000" 
       + "Where IsCleared = 0"); 

     while(rs.next()) { 
      a = rs.getString(1); 
      b = rs.getString(2); 
      c = rs.getString(3); 

      System.out.println(a+" "+b+" "+c); 
     } 

     con.close(); 
    } catch(Exception e) { 
     System.out.println(e); 
    } 
} 

のMySQL:

try { 
    Class.forName(JDBC_DRIVER); 
    System.out.println("connecting to database"); 

    conn = DriverManager.getConnection(DB_URL, USER, PASS); 
    System.out.println("connected to database successfully"); 

    System.out.println("creating table in given database"); 

    // stmt = conn.createStatement(); 
    String sql = "CREATE TABLE newtable " 
      + "(id INTEGER not NULL, " 
      + "first VARCHAR(255), " 
      + "PRIMARY KEY (id))"; 

    stmt = conn.prepareStatement(sql); 
    stmt.executeUpdate(sql); 

    System.out.println("created table in database"); 
} 

これらはただのスニペットです。私は上記のコードをマージしようとしています。 これが可能かどうかを教えて、これにいくつかの洞察を共有してください。

1))のResultSet

2としてリターンと方法readDBを(INT startReading、INT endReading)を作成する方法writeDBを作成する:

+0

'Class.forNameの(...)'だけので2回だけ、それを使用し、JDBCドライバクラスのロードを強制するために使用されました。それとも、Java 6のようなほとんどのJDBCドライバでは廃止されているので、そのまま残しておきます。 –

+0

Class.forName()を使わずにmysqlプログラムを試しましたが、適切なドライバが見つかりませんでした。これは、古いバージョンのJavaがインストールされていることを意味しますか? –

+0

@prateekkまたは非常に古いバージョンのドライバを使用しています。 –

答えて

2

複数の接続は、同じように作成することができ、この

public static void main(String[] args) { 

    try{ 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     Connection con1 = DriverManager.getConnection("jdbc:jtds:sybase://10.159.252.29:4100/fmdb","sa","Changeme_123"); 

     Class.forName(JDBC_DRIVER); 
     Connection con2 = DriverManager.getConnection(DB_URL, USER, PASS); 

     ///After getting both connections, write your code 

     String a; 
     String b; 
     String c; 

     Statement stmt= con1.createStatement(); 
     ResultSet rs=stmt.executeQuery("select tbl_alm_log_2000000000.Csn, tbl_alm_log_2000000000.IsCleared, tbl_alm_log_2000000000.Id From fmdb.dbo.tbl_alm_log_2000000000 Where IsCleared = 0"); 
     while(rs.next()) ///If your query result is single row, use if instead of while 
      { 
      a = rs.getString(1); 
      b = rs.getString(2); 
      c = rs.getString(3); 

      System.out.println(a+" "+b+" "+c); 
      } 

     String sql = "CREATE TABLE newtable " + "(id INTEGER not NULL, " + "first VARCHAR(255), " + "PRIMARY KEY (id))"; 
     stmt = con2.prepareStatement(sql); 
     stmt.executeUpdate(sql); 

     con1.close(); 
     con2.close(); 
     }catch(Exception e){ System.out.println(e);} 
    }  

} 
+0

私はあなたにお返ししようとします。 ty –

+0

ありがとう、完璧に働いた –

0

提案は、より小さく、より単純なタスクに複雑なタスクを分割することです(ResultSetの結果)

3)(方法createTableDBを作成)

PS readDBはあなたの最初の例に近く、dbの読み込みを返さなければなりません。writeDBはdb some tutorialの中に書き込むだけで、次にcreateTableDBは2番目の例のようにdbをテーブルに作成する必要があります。メインで

擬似最終的なコードは、:

createTableDB(); 
    // it's good to make a loop for next part: 
    ResultSet read1=readDB(0,200); 
    writeDB(read1); 
    ResultSet read2=readDB(200,400); 
    writeDB(read2); 
    ResultSet read3=readDB(400,....); //to the end of db 
    writeDB(read3); 

これは完璧ではないし、必要に応じて変更することができ、本当にシンプルなソリューションです。単一のプログラムで

関連する問題