java
  • mysql
  • sql
  • 2013-11-06 4 views 0 likes 
    0

    Im застрял и разочарование по этим линиям кодов:Java MySQL Query не работает

    String updateSQL="UPDATE " + tableName + " set " + secondColumn + "='"+ value2 + "',"+ thirdColumn + "='"+ value3 +"'" + "," + fourthColumn +"='"+ value4 +"'" + "where " + firstColumn + " = "+ checkvalue ; 
    

    Im получать этот запрос работает отлично! Хотя у меня есть еще один запрос, который не бежит совершенным, но который находится в том же стиле:

    String updateSQL="UPDATE " + tableName + " set " + secondColumn + "='"+ value2 +"'" + ","+ thirdColumn + "='"+ value3 +"'" + "," + fourthColumn +"='"+ value4 +"'" + "," + fifthColumn +"='"+ value5 +"'" + "where " + firstColumn + " = "+ checkvalue ; 
    

    При выполнении этой строки кода при попытке обновления я получаю сообщение об ошибке «Неизвестный столбца в„PNO3“в Где положение «

    Хотя я знаю, что у меня PNO3 в первом столбце, и когда он делает то же самое с первым запросом, он находит его? любая помощь?

    Я использую этот оператор switch, чтобы убедиться, что столбцы указывают на правильные.

    switch (tableName) {    
          case "s": 
           firstColumn = "ID"; 
           secondColumn = "Namn"; 
           thirdColumn = "Efternamn"; 
           fourthColumn = "Adress"; 
           break; 
          case "p": 
            firstColumn = "PNO"; 
           secondColumn = "PNAME"; 
           thirdColumn = "COLOR"; 
           fourthColumn = "WEIGHT"; 
           fifthColumn = "CITY"; 
           break; 
          case "j": 
            firstColumn = "JNO"; 
           secondColumn = "JNAME"; 
           thirdColumn = "CITY";   
           break; 
          case "spj": 
            firstColumn = "SNO"; 
           secondColumn = "PNO"; 
           thirdColumn = "JNO"; 
           fourthColumn = "QTY"; 
           break; 
    
         } 
    
    +2

    Похоже, вы отправляете неправильные имена столбцов для своей таблицы PNO3. Запустите 'updateSQL' перед запуском и проверьте, можете ли вы запустить его из своей любимой библиотеки запросов MySQL. –

    +7

    Первое, что нужно сделать: прекратить включение значений непосредственно в ваш SQL. Вместо этого используйте параметризованный SQL. –

    +0

    Во-вторых, послушайте Jon Skeet –

    ответ

    1

    В вашем втором запросе отсутствуют одинарные кавычки вокруг checkvalue. В противном случае это будет рассматриваться как имя столбца, а не значение (предполагается, что firstColumn - это varchar). Должно быть:

    String updateSQL="UPDATE " + tableName + " set " + secondColumn + "='"+ value2 +"'" + ","+ thirdColumn + "='"+ value3 +"'" + "," + fourthColumn +"='"+ value4 +"'" + "," + fifthColumn +"='"+ value5 +"'" + "where " + firstColumn + " = '"+ checkvalue + "'"; 
    

    Примечание: вы должны использовать PreparedStatement вместо конкатенации строк. Это не только вопрос читаемости, но и проблема безопасности - ваш код уязвим для SQL-инъекции.

    +0

    Спасибо! Это сработало! – Looptech

    0

    Невозможно сказать точно проблему, но я думаю, * firstColumn является Varchar(), если да добавить одинарную кавычку к значению состояния. OR * Вы передаете неправильное имя столбца в таблицу.

    Было бы очень полезно, если бы вы отправили сообщение об ошибке.

    ПРЕДПОСЫЛКА: Используйте параметризованный синтаксис, так как они легко читаются, чем ваши.

    +0

    Я добавил свой оператор switch, чтобы показать вам, что он указывает правильно. – Looptech

    +0

    попробуйте добавить одну котировку в firstColumn; 'firstColumn = '" + value + "'' – sam

    Смежные вопросы