Выбор элемента из базы данных в Java

1

Я хочу вставить данные в базу данных из jtextfield, но с некоторым условием

поэтому я пробовал этот код

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String m = "IMCDietitian";
        String unicode= "?useUnicode=yes&characterEncoding=UTF-8";
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/"+m+""+unicode+"","root","");
        System.out.println("connected");
        String dept = jComboBox1.getSelectedItem().toString();
        if (jTextField6.getText() != null)
        {
            String pname = jTextField6.getText();
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM '"+dept+"' WHERE pname = '"+pname+"' ");
            while (rs.next())
            {
                if (!rs.getString(8).equals("-") && rs.getString(1).equals(pname) )
                {
                    if (jCheckBox1.isSelected() == true)
                    {
                        st.executeQuery("INSERT INTO '"+dept+"' VALUES ('"+jTextField6.getText()+"', '"+jTextField5.getText()+"', '"+jTextField4.getText()+"', 'يوجد', '"+jTextField3.getText()+"', '"+jTextField2.getText()+"', '"+jTextField1.getText()+"', '-'");
                    }
                    if (jCheckBox1.isSelected() == false)
                    {
                        st.executeQuery("INSERT INTO '"+dept+"' VALUES ('"+jTextField6.getText()+"', '"+jTextField5.getText()+"', '"+jTextField4.getText()+"', 'لا يوجد', '-', '"+jTextField2.getText()+"', '"+jTextField1.getText()+"', '-'");
                    }
                }
                if (!rs.getString(1).equals(pname))
                {
                    if (jCheckBox1.isSelected() == true)
                    {
                        st.executeQuery("INSERT INTO '"+dept+"' VALUES ('"+jTextField6.getText()+"', '"+jTextField5.getText()+"', '"+jTextField4.getText()+"', 'يوجد', '"+jTextField3.getText()+"', '"+jTextField2.getText()+"', '"+jTextField1.getText()+"', '-'");
                    }
                    if (jCheckBox1.isSelected() == false)
                    {
                        st.executeQuery("INSERT INTO '"+dept+"' VALUES ('"+jTextField6.getText()+"', '"+jTextField5.getText()+"', '"+jTextField4.getText()+"', 'لا يوجد', '-', '"+jTextField2.getText()+"', '"+jTextField1.getText()+"', '-'");
                    }
                }
            }   
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

}                                        

но эта ошибка

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''gc' WHERE pname = 'محمد'' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
        at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
        at dietition.EDietListJFrame.jButton1ActionPerformed(EDietListJFrame.java:2351)
        at dietition.EDietListJFrame.access$900(EDietListJFrame.java:29)
        at dietition.EDietListJFrame$10.actionPerformed(EDietListJFrame.java:963)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

++++Whats что? wkey 0x42 (66)

любой может помочь?

  • 0
    Это похоже на проблему кодирования, я вижу, вы используете некоторые арабские символы
  • 2
    никогда не используйте пользовательский ввод напрямую для SQL-запроса, это потенциальный риск для безопасности. w3schools.com/sql/sql_injection.asp Вместо этого используйте подготовленные выражения docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html.
Показать ещё 6 комментариев
Теги:

3 ответа

0

Как кажется синтаксическая ошибка из-за единственной запятой ['], вам может потребоваться пропустить ее, используя обратную косую черту [] перед одной запятой ['], и для этой цели вы можете использовать нижеприведенный синтаксис:

обновить пользовательский набор firstName = 'Ù... Ø'... د\'' где userid = 'test';

0

Прежде всего, структура вашего кода полностью не та, которую хотелось бы видеть в коде производственного класса. Доступ к базе данных непосредственно из компонентов пользовательского интерфейса, скорее всего, станет проблемой в определенный момент времени.

Тем не менее Исключение, которое вы получаете, совершенно очевидно. Драйвер JDBC не может интерпретировать ваш оператор SQL. Причиной этого является то, что он не способен понять арабские символы в ваших вставках.

Вы должны следовать подсказке пользователя wastl в комментариях и использовать подготовленные заявления. Это не только поможет избежать потенциального риска безопасности в виде инъекций SQL, но также поможет в кодировании символов без ASCII.

После того, как вы поняли и освоили подготовленные заявления, вы, возможно, захотите перейти к более сложной модели данных, чем объект для реляционного сопоставления, доступный в javax.persistence и его знаменитой реализации Hibernate.

0

Попробуйте добавить N перед арабским текстом:

SELECT * FROM table WHERE column=N'arabic text'
  • 0
    это не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню