SQLSyntaxErrorException: "[" в строке 7, столбец 52 - PullRequest
1 голос
/ 01 марта 2020

Получение этой синтаксической ошибки для строки 7, но у меня нет кода там. Вот как выглядит мой код. Пробел после recruitment.package - строка 7.

package recruitment.project;

import java.awt.HeadlessException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
try {
    Class.forName(driver);
    Connection con = DriverManager.getConnection(url, user, pass);
    String query2 = "INSERT INTO APP.Shortlist(ClientID, WorkerID)\n" +
                        "SELECT ClientID, WorkerID\n" +
                        "FROM APP.CLIENT_TABLE, APP.WORKER_TABLE\n" +
                        "WHERE APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_1 OR\n" + 
                        "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_2 OR\n" +
                        "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_3 AND\n" +
                        "APP.CLIENT_TABLE.CLIENTID =  " +
                        "" +jTextField1;

    PreparedStatement prepStat = con.prepareStatement(query2);



    prepStat.executeUpdate();
    DefaultTableModel model = (DefaultTableModel)Shortlist_Table.getModel();
    model.setRowCount(0);
    Show_ShortlistInput_In_JTable();
    JOptionPane.showMessageDialog(null, "Record saved.");

} catch (HeadlessException | ClassNotFoundException | SQLException e) {
    JOptionPane.showMessageDialog(null, e);
}

Любая помощь будет высоко ценится, все еще очень плохо знакомой с этим.

1 Ответ

0 голосов
/ 01 марта 2020

Ошибка на самом деле исходит от интерпретатора SQL и возникает из-за того, что вы не используете правильно подготовленные операторы. Вы должны подготовить заявление с заполнителем, а затем присвоить значение этому заполнителю. Для вашего случая:

String query2 = "INSERT INTO APP.Shortlist(ClientID, WorkerID)\n" +
                    "SELECT ClientID, WorkerID\n" +
                    "FROM APP.CLIENT_TABLE, APP.WORKER_TABLE\n" +
                    "WHERE APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_1 OR\n" + 
                    "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_2 OR\n" +
                    "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_3 AND\n" +
                    "APP.CLIENT_TABLE.CLIENTID =  ?";

PreparedStatement prepStat = con.prepareStatement(query2);
prepStat.setString(1, jTextField1);
prepStat.executeUpdate();

Обратите внимание, что у вас, вероятно, есть ошибка в вашей логике c, я подозреваю, что это должно быть

                    "WHERE (APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_1 OR\n" + 
                    "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_2 OR\n" +
                    "APP.CLIENT_TABLE.WORKER_NEEDED = APP.WORKER_TABLE.JOB_3) AND\n" +
                    "APP.CLIENT_TABLE.CLIENTID =  ?";

Обратите внимание на () вокруг OR запчасти.

...