2013-08-12 5 views
0
import java.sql.*; 

public class jdbc_test { 
public static void main(String[] args) 
    { 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      System.out.println("Driver loaded sql server"); 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      System.out.println("Driver loaded mysql"); 

     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      System.out.println("not loaded"); 
     } 

      String connectionUrl = "jdbc:sqlserver://172.*.*.*:1433;" +"databaseName=Interface;user=user;password=pwd"; 
      String connectionUrl2="jdbc:odbc:Occupancy_Mysql"; 
      Connection con=null; 
      Connection con2=null; 
      Statement stmt = null; 
      ResultSet rs = null; 
      PreparedStatement pstmt = null; 


      try { 
       con = DriverManager.getConnection(connectionUrl); 
       System.out.println("CONNECTED sql server");   
       con2 = DriverManager.getConnection(connectionUrl2); 
       System.out.println("CONNECTED2 mysql"); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


      try { 
      stmt = con.createStatement(); 
      rs=stmt.executeQuery("select * FROM [Interface].[dbo].[VwZoneCount]"); 
       System.out.print("Select executed"); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 



      try { 
       while (rs.next()) { 
        String zoneName = rs.getString("Zone Name"); 
        int zonecount = rs.getInt("Zone Count"); 
        String phasename = rs.getString("Phase Name"); 



        String insertSql = "insert into occupancy.occupancy_phase_2(ZoneName,ZoneCount,PhaseName,time_stamp)values('"+zoneName+"',"+zonecount+",'"+phasename+"',now())";     
        pstmt = con2.prepareStatement(insertSql); 
        pstmt.executeUpdate(); 
             } 
        while(rs.next()) 
        { 

         System.out.print(rs.getString("Zone Name")+"\t"); 
         System.out.print(rs.getInt("Zone Count")+"\t"); 
         System.out.println(rs.getString("Phase Name")); 




        } 

      } catch (SQLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

      System.out.println("out insert done"); 

      } 
} 

Я пытаюсь вставить данные с удаленного сервера sql в локальный mysql. Сначала вставка вступила, но теперь ее не происходит, можете ли вы сказать мне, где именно код неправильный.Вставка с удаленного сервера sql на локальный сервер mysql

в то время как блок, где я печатаю на самой консоли, не выполняется.

+0

Если в то время как блок не выполняется, это означает, что resultset ничего не возвращает. Вы проверили это? –

+0

Какой 'while'block? Возвращаются ли запросы при запуске вручную в клиентском инструменте Squirrel/TOAD/SQLServer? –

+0

попытайтесь сохранить данные первого запроса в массиве, а затем прочесть эти данные в другой вставке, я нахожу аналогичную проблему, делаю что-то похожее на вас, моя база данных разбилась, потому что я не закрываю, и я собираюсь открыть много времени opperations in toher database, для которого я думаю, лучше сохранить все данные в базе данных, закрыть эту базу данных, а затем выполнить операции второй базы данных. – Deckard27

ответ

1

Поскольку ваш код стоит сейчас, только одна строка будет вставлена ​​в mysql. Второй цикл while зацикливается на наборе результатов запроса select. Поэтому, когда он туда доберется, он просто исчерпает результат, выводящий второй, третий и т. Д. Результаты.

Если этот блок не выполняется, вы можете иметь только одну строку, которая соответствует оператору select.

+0

Но ни одна из строк не вставлена. Можете ли вы предоставить исправленный код в соответствии с вашим предложением – user1896796

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