2016-10-12 2 views
1

Я пытаюсь получить данные из базы данных SYBASE и скопировать извлеченные данные в таблицу в MySQL. Я могу подключать обе базы данных отдельно (i.e) с помощью драйвера jTDS для SYBASE и Jdbc_driver для MySQL.Соединение JDBC с базой данных MySQL и Sybase в то же время

Теперь я хочу подключить обе базы данных одновременно в одной программе. Но я смутил то, что должно быть написано в 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"); 
} 

Это только отрывками. Я просто пытаюсь слиться над кодом. Помогите мне, если это возможно или нет, и расскажем об этом.

+0

'Class.forName (...)' просто использовали, чтобы заставить загрузку класса драйвера JDBC, так что просто использовать его в два раза. Или просто оставьте это alltogether, так как оно устарело для большинства драйверов JDBC по сравнению с Java 6., –

+0

Я пробовал mysql-программу без Class.forName(), она выдала ошибку, которую не нашел подходящий драйвер. Означает ли это, что у меня установлена ​​более старая версия 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

предложение заключается в разделении сложной задачи на более мелкие и более простые задачи:

1) создать метод readDB (интермедиат startReading, внутр endReading) с возвращением в ResultSet

2) создать метод writeDB (результат ResultSet)

3) создать метод createTableDB()

П.С. readDB близок к вашему первому примеру и должен возвращать чтение db, writeDB должен только писать внутри db some tutorial, а затем createTableDB должен сделать таблицу на 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); 

это действительно простое решение, он не совершенен и может быть изменен в соответствии с вашими потребностями.

Смежные вопросы