Проблема с подготовленным заявлением - PullRequest
0 голосов
/ 26 марта 2011

У меня есть этот код:

 Date start = new Date(Integer.parseInt(jTextField4.getText()), Integer.parseInt(jTextField16.getText()), Integer.parseInt(jTextField17.getText()));  
        Date end = new Date(Integer.parseInt(jTextField5.getText()), Integer.parseInt(jTextField18.getText()), Integer.parseInt(jTextField19.getText()));
        statement = connection.createStatement();
        preparedStatement1 = connection.prepareStatement("insert into sportmangg(customer_code,"
             + "sportman_code, start, finish, salary,amount,box salary,private salary, food salary, "
             + "other salary, bime salary, number) "
             + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?");
      preparedStatement1.setString(1,jTextField15.getText());
     preparedStatement1.setString(2, jTextField1.getText());
     preparedStatement1.setDate(3, start);
     preparedStatement1.setDate(4, end);
     preparedStatement1.setInt(5, Integer.parseInt(jTextField6.getText()) );
     preparedStatement1.setInt(6,Integer.parseInt(jTextField14.getText()) );
     preparedStatement1.setInt(7, Integer.parseInt(jTextField7.getText()));
     preparedStatement1.setInt(8, Integer.parseInt(jTextField8.getText()));
     preparedStatement1.setInt(9, Integer.parseInt(jTextField9.getText()));
     preparedStatement1.setInt(10, Integer.parseInt(jTextField11.getText()));
     preparedStatement1.setInt(11, Integer.parseInt(jTextField10.getText()));
     preparedStatement1.setInt(12, Integer.parseInt(jTextField20.getText()));
     preparedStatement1.executeUpdate();

но есть эта ошибка:

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 'salary,private salary, food salary, other salary, bime salary, number) values ('' at line 1

В чем проблема?

Ответы [ 7 ]

11 голосов
/ 26 марта 2011

У вас действительно не должно быть пробелов в имени поля. Попробуйте окружить его ``

3 голосов
/ 26 марта 2011

Имена столбцов с пробелами в них являются очень плохой идеей.

Если они у вас должны быть, окружите их галочками:

`private salary`
1 голос
/ 23 июля 2015

Может быть, вы можете попробовать это:
https://github.com/stuparmihailo/util4j/releases/tag/v1.0
Это простой проект, в котором есть хороший способ создания операторов:
String query = "INSERT INTO table VALUES (?,?,?,?,?,?,?)"; PreparedStatement stmt = con.prepareStatement(query); StatementUtil.fill(stmt, 45, "text", 2, null, new Date(), false, 3.5);

1 голос
/ 04 апреля 2011

Вы пропустили ) в последней строке вашего SQL-запроса, поэтому оно должно быть:

+ "  values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?   )";
0 голосов
/ 05 апреля 2011

Мехди; Я думаю, что все, что вам нужно сделать, это все:

  1. изменить имена колонки с пробелами (личная зарплата, зарплата, другая зарплата, бим зарплата) либо путем замены пробелов подчеркиванием (рекомендуется соглашением об именах) или окружающие имена с серьезным акцентом:

    «ящик зарплаты», «частная зарплата», «зарплата на еду», «другая зарплата», «бим» salary`

  2. Исправить эту строку, добавив заключительные скобки

    + "значения (?,?,?,?,?,?,?,?,?,?,?,?");

    это должно сказать:

    + "значения (?,?,?,?,?,?,?,?,?,?,?,? ); ");

  3. Наконец, я бы порекомендовал передать аргумент prepareStatement в переменную String или StringBuffer, скажем, "sqlString" или что-то еще, чтобы вы могли управлять им более прозрачно. Примерно так:

String sqlString = "";
sqlString += " insert into sportmangg";
sqlString += " (customer_code, sportman_code, start, finish,";
sqlString += " salary, amount, box_salary, private_salary,";
sqlString += " food_salary, other_salary, bime_salary, number)";
sqlString += " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
preparedStatement1 = connection.prepareStatement(sqlString);

(или если вы используете StringBuffer , используйте append метод)

0 голосов
/ 05 апреля 2011

имена столбцов или таблиц не должны содержать пробелов. Присоединяйтесь к ним, подчеркнув. и сделайте их заглавными ... это не правила, а принятые способы работы с объектами БД. Если имена не могут быть изменены в БД, и вы застряли на чем-то вроде зарплаты, тогда some salary должно помочь.

0 голосов
/ 03 апреля 2011

Вам следует заменить частный оклад на private_salary и продолжать работать с приемлемыми соглашениями об именах столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...