2012-10-25 112 views
-1

我的代碼可以執行select語句就好了,但出於某種原因,我無法使插入和刪除段工作。我相信他們應該是一樣的權利?我只是不知道我的代碼在這裏有什麼問題。使用Java GUI刪除數據庫或插入數據庫

else if (e.getSource() == executeButton) { 
     //Create a statement 
     if (enterSQLText.getText().toLowerCase().contains("select")){ 
      try{ 
       String commandString = enterSQLText.getText(); 
       Statement statement = conn.createStatement(); 
       //Execute a statement 
       ResultSet resultSet = statement.executeQuery(commandString); 
       //Process query results 
       ResultSetMetaData metaData = resultSet.getMetaData(); 
       int numberOfColumns = metaData.getColumnCount(); 

       for(int i = 1; i<= numberOfColumns; i++){ 
        executionResultText.append(metaData.getColumnName(i) + "\t"); 
        System.out.printf("%20s\t", metaData.getColumnName(i)); 
       } 
       executionResultText.append("\n"); 
       System.out.println(); 

       while (resultSet.next()){ 
        for (int i = 1; i <= numberOfColumns; i++){ 
         executionResultText.append(resultSet.getObject(i).toString() + "\t"); 
         System.out.printf("%20s\t", resultSet.getObject(i)); 
        } 
        executionResultText.append("\n"); 
        System.out.println(); 
       } 
       System.out.println("Execute Button Works!"); 
       } 
       catch (Exception h){ 
       h.printStackTrace(); 
       } 
     } 
     else if (enterSQLText.getText().toLowerCase().contains("delete") || enterSQLText.getText().toLowerCase().contains("insert")) { 
      try { 
       String commandString = enterSQLText.getText(); 
       Statement statement = conn.prepareStatement(commandString); 
       ResultSet resultSet = statement.executeUpdate(commandString); 
      } 
      catch (Exception l){ 
       l.printStackTrace(); 
      } 
     } 
     else { 
      executionResultText.setText("Sorry, that is not a valid command"); 
      System.out.println("Not a vilid command."); 
     } 
    } 

在else if語句中,我遇到了問題。如果我嘗試運行插入或刪除語句,它通常只會引發堆棧跟蹤錯誤。有人可以幫忙嗎?

編輯:

爲了讓代碼來執行,我不得不改變否則,如果細分到以下幾點:

else if (enterSQLText.getText().toLowerCase().contains("delete") || enterSQLText.getText().toLowerCase().contains("insert")) { 
       try { 
        String commandString = enterSQLText.getText(); 
        Statement statement = conn.prepareStatement(commandString); 
        @SuppressWarnings("unused") 
        int resultSet = statement.executeUpdate(commandString); 
       } 
       catch (Exception l){ 
        l.printStackTrace(); 
       } 
      } 

當我嘗試執行插入或刪除命令,我得到一個無論我做什麼

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Mark Renshaw' for key 'PRIMARY' 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725) 
    at ConnectToDB.actionPerformed(ConnectToDB.java:203) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

到段,它或者阻止我能夠連接到數據庫,或將引發一個錯誤:堆棧跟蹤贊一個。

+1

什麼是堆棧跟蹤 – smk

+0

您可以請分享相關堆棧跟蹤嗎? –

+0

考慮添加你的堆棧跟蹤。 –

回答

2

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重複條目 '馬克·倫肖' 關鍵 '主要'

還是比較明顯的。您正嘗試爲主鍵插入重複條目。主鍵是唯一的,您不能使用同一個鍵兩次。

您可能不希望自己的名稱列成爲主鍵。爲此使用自動生成的ID列。

否則刪除包含「Mark Renshaw」的列並再次運行您的代碼。但是,只有在運行兩次具有相同名稱的衝突時,它纔會起作用。

+0

最後我想到了。以下是DELETE和INSERT的工作段。 否則,如果(enterSQLText.getText()。toLowerCase()。包含( 「刪除」)|| enterSQLText.getText()。toLowerCase()。包含( 「插入」)){ \t \t \t \t嘗試{ \t \t \t \t \t String commandString = enterSQLText.getText(); \t \t \t \t \t conn.prepareStatement(commandString).executeUpdate(commandString); \t \t \t \t} \t \t \t \t趕上(例外升){ \t \t \t \t \t升。的printStackTrace(); \t \t \t \t} \t \t \t} 感謝您的幫助! – PeerPressure