2013-03-23 77 views
0

我正在编写一个程序,它将接收一个学生ID并验证该ID是否存在于一个mysql表中。如果它确实存在,我想将它存在的整个行并将该行复制到另一个表中。目前,该程序只是将表中的所有行复制到另一个表中。任何帮助赞赏。我在下面插入了一段代码。从一个mysql表插入信息到另一个

try { 
    String compareText = IDField.getText().trim(); 

    if(compareText.length() > 0){ 
     Class.forName("com.mysql.jdbc.Driver"); 
     conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/simlab","root","password"); 
     System.out.println("Connected to database"); 

     Statement stmt1  = conn.createStatement(); 
     ResultSet rs1  = stmt1.executeQuery("select * from students where LUID='"+IDField.getText()+"' "); 

     boolean isPresent = rs1.next(); 

     if (isPresent) 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/simlab","root","password"); 
      System.out.println("Connected to database"); 

      int rows = stmt1.executeUpdate("INSERT INTO skills(ID_Student,LUID_Student)SELECT ID, LUID FROM students"); 

      if (rows == 0) 
      { 
       System.out.println("Don't add any row!"); 
      } 
      else 
      { 
       System.out.println(rows + " row(s)affected."); 
       conn.close(); 
      } 

      //System.out.println("Already exists!!"); 
     } 
+0

一举两得表驻留在同一个数据库,或者是他们在不同的数据库,如标题所暗示? – Geier 2013-03-23 18:58:04

+0

这两个表都在同一个数据库中。感谢您指出了这一点。 – user2188777 2013-03-23 18:59:03

回答

1

你可以都做在单个SQL语句:

INSERT INTO <Dest-Table> 
(SELECT * FROM <Src-Table> WHERE ID=?); 

它只会复制存在的行。

+0

谢谢。我会研究这种方法。 – user2188777 2013-03-23 19:34:41

0

我怀疑这是由于该行:

int rows = stmt1.executeUpdate("INSERT INTO skills(ID_Student,LUID_Student)SELECT ID, LUID FROM students"); 

为,如果该行被解析,该SELECT语句没有WHERE条款,因此将获得每行,因此插入的一切。

+0

谢谢。我将研究WHERE子句。 – user2188777 2013-03-23 19:35:06

0

预处理语句

 String sql = "INSERT INTO abc" 
       + "(SELECT id1,id2 FROM pqr)"; 

     ps1 = con.prepareStatement(sql); 


     int rs = ps1.executeUpdate(); 

     if (rs > 0) { 

      update = true; 

     } else { 
      update = false; 
     } 

    } catch (Exception ex) { 

     ex.printStackTrace(); 
    } finally { 
     try { 
      if (ps1 != null) { 
       ps1.close(); 
       ps1 = null; 
      } 
      if (con != null) { 
       con.close(); 
       con = null; 
      } 
     } catch (Exception e) { 

     } 
    } 
    return update;