2013-08-12 3 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

블록이 실행되지 않는 경우 결과 집합이 아무 것도 반환하지 않는다는 의미입니다. 그걸 확인해 봤어? –

+0

어떤 '차단'입니까? Squirrel/TOAD/SQLServer 클라이언트 도구에서 수동으로 실행할 때 쿼리가 아무 것도 반환합니까? –

+0

첫 번째 문의 데이터를 배열에 저장하려고 시도한 다음 해당 데이터를 다른 인서트로 지나치게하면 비슷한 문제가 발생합니다. 데이터베이스가 닫히지 않고 mantein이 많은 시간을 열어서 데이터베이스가 손상됩니다. 그것을 toher 데이터베이스에서 opperations 내가 생각하는 데이터베이스 closign 그 데이터베이스에있는 모든 데이터를 저장하고 두 번째 데이터베이스의 작업을 수행하는 것이 좋습니다. – Deckard27

답변

1

코드가 이제 서서 MySQL에 삽입되는 행은 하나뿐입니다. 두 번째 while 루프는 select 문의 결과 집합을 루핑합니다. 그래서 그곳에 도착하면 두 번째 결과와 세 번째 결과를 출력하는 결과 세트를 다 써 버릴 것입니다.

블록이 실행되지 않는 동안 select 문과 일치하는 행이 하나만있을 수 있습니다.

+0

그러나 행이 삽입되지 않습니다. 제안에 따라 수정 된 코드를 제공 할 수 있습니까? – user1896796

관련 문제