2012-10-25 3 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 : 키 'PRIMARY'

에 대한 중복 항목을 '마크 렌쇼는'매우 분명하다. 기본 키에 대해 중복 항목을 삽입하려고합니다. 기본 키는 고유하며 동일한 키를 두 번 사용할 수 없습니다.

아마도 이름 열이 기본 키가되기를 원하지 않을 것입니다. 이를 위해 자동 생성 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 캐치 (예외 l) { \t \t \t \t \t리터.printStackTrace(); \t \t \t \t} 도움을 \t \t \t} 감사합니다! – PeerPressure

관련 문제