Проблема с SQLExceptions в инструкции Update

#java #sql #jdbc #jdbc-odbc

#java #sql #jdbc #jdbc-odbc

Вопрос:

При обновлении любых данных любого поля это выдает ошибку типа:

Создается инструкция, загруженная драйвером

java.sql.SQLException: общая ошибка
в sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6986)
в sun.jdbc.odbc.JdbcOdbc.StandardError(JdbcOdbc.java:7114)
в sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java: 3110)
на солнце.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338) в sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288) в sanskarwani.updateREGISTRATION1(sanskarwani.java:2792) в sanskarwani.access за 700 долларов ( sanskarwani.java:29) на sanskarwani $ 8.Выполнено действие (sanskarwani.java:1255) на javax.swing.Выполнен AbstractButton.fireActionPerformed(AbstractButton.java:1995) в javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) в javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) в javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) в java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) в java.awt.Component. processMouseEvent(компонент.java:6038) в javax.swing.JComponent.processMouseEvent(JComponent.java:3260) в java.awt.Component.processEvent(Component.java:5803) в java.awt.Container.processEvent(Container.java:2058) в java.awt.Component.dispatchEventImpl(Component.java:4410) в java.awt.Container.dispatchEventImpl(Container.java:2116) в java.awt.Component.dispatchEvent(Component.java:4240) в java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) в java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) в java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) в java.awt.Container.dispatchEventImpl(Container.java:2102) в java.awt.Window.dispatchEventImpl(Window.java:2429) в java.awt.Component.dispatchEvent(Component.java:4240) в java.awt. Очередь событий.dispatchEvent(EventQueue.java: 599) в java.awt.EventDispatchThread.pumpponeeventforfilters(EventDispatchThread.java:273) в java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) в java.awt.EventDispatchThread.pumpEventsForHierarchy( EventDispatchThread.java:173) на java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) в java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) в java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Мой код:

 String nmreg = cbnm.getSelectedItem().toString();

if(nmreg.equals(""))   //{
    JOptionPane.showMessageDialog(null," ENTER THE NAME ");

try
{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    System.out.println("n Driver loaded");

    Connection con = DriverManager.getConnection("jdbc:odbc:wanisamajDB");
    Statement stmt = con.createStatement();

    System.out.println("statement is created");

    String qry = " UPDATE Registration1 set RegistrationNo = '" cbregn.getSelectedItem() "',SeniorPerson = '" cbnm.getSelectedItem() "', NativePlace = '" tfplace.getText() "',Kul = '" tfkul.getText() "', Gotra = '" tfgotra.getText() "' ,KulSwami = '" tfswami.getText() "', ResidensialAddress = '" taraddr.getText() "' , PinCode = '" tfpcd.getText() "', STDcode = '" tfstdcode.getText() "',TelephoneNo = '" tftele.getText() "', MobileNo = '" tfmno.getText() "', Email = '" tfemail.getText() "',Website ='" tfweb.getText() "',Education ='" tfedu.getText() "',Branch ='" tfbrch.getText() "',BloodGroup ='" cbbldgrp.getSelectedItem() "' where SeniorPerson='"  cbnm.getSelectedItem().toString() "'" ;
             // String qry= " UPDATE Registration1 set SeniorPerson = '" cbnm.getSelectedItem().toString() "',NativePlace = '" tfplace.getText() "', Kul = '" tfkul.getText() "',Gotra = '" tfgotra.getText() "' , KulSwami = '" tfswami.getText() "', ResidensialAddress = '" taraddr.getText() "' , PinCode = '" Integer.parseInt(tfpcd.getText()) "', STDcode = '" Integer.parseInt(tfstdcode.getText()) "',TelephoneNo = '" Integer.parseInt(tftele.getText()) "',MobileNo = '" Integer.parseInt(tfmno.getText()) "',Email = '" tfemail.getText() "',Website ='" tfweb.getText() "',Education ='" tfedu.getText() "',Branch ='" tfbrch.getText() "',BloodGroup ='" cbbldgrp.getSelectedItem().toString() "' where RegistrationNo='"  Integer.parseInt(cbregn.getSelectedItem().toString()) "'" ;
              stmt.executeUpdate(qry);
              JOptionPane.showMessageDialog(null,"RECORD IS UPDATED SUCCESSFULLY ");
              System.out.println("QUERY");       

             // cbregn.setEditable(false);
              cbnm.setEditable(false);
              tfplace.setEditable(false);
              tfkul.setEditable(false);
              tfgotra.setEditable(false);
              tfswami.setEditable(false);
              taraddr.setEditable(false);
              tfpcd.setEditable(false);
              tfstdcode.setEditable(false);
              tftele.setEditable(false);
              tfmno.setEditable(false);
              tfemail.setEditable(false);
              tfweb.setEditable(false);
              tfedu.setEditable(false);
              tfbrch.setEditable(false);
              cbbldgrp.setEditable(false);
              con.close();
              stmt.close();
            }
//            catch(SQLException eM)
//            {
//            JOptionPane.showMessageDialog(null,"RECORD IS NOT FOUND ");
//            }
            catch(Exception et)
            {
                 et.printStackTrace();
              //  System.out.println("error:" et.getMessage());
            }
  

помогите мне, пожалуйста

Комментарии:

1. Попробуйте использовать PreparedStatement для выполнения запроса на обновление.

2. не то чтобы это проблема, но вам не нужно предложение where для этой инструкции update? вы будете обновлять все строки.

3. Это первый раз, когда вы столкнулись с указанной ошибкой при обновлении? Попробуйте обновить только одно поле, затем проверьте, появится ли такая же ошибка, или попробуйте выполнить жестко запрограммированный запрос. Также я предпочитаю PreparedStatement, как упоминал Shashank_Itmaster, попробуйте.

4. Можете ли вы распечатать выполняемый запрос и обновить его здесь.

Ответ №1:

Это опечатка: «Residensial»?

 ... ResidensialAddress = '" taraddr.getText() "' ...
  

Ответ №2:

чтобы избежать ошибок sql-инъекции с использованием метода PrepardStatment, его проще использовать и в конце получить те же результаты.