2016-05-29 10 views
-1

私は、MySQLサーバーからこのエラーを取得しています:MySQLのエラー更新ステートメントを使用した:「あなたはあなたのSQL構文でエラーが発生している...」

あなたのSQL構文でエラーが発生しています。 '0' = 0、 '1' = 0、 '2' = 0、 '3' = 0、 '4' = 0、 '5の近くで使用する正しい構文については、MySQLサーバのバージョンに対応するマニュアルを参照してください。 '= 0、 '6'= 0、 '7'= 0、 '8'= 0、' ライン1

でそしてここ更新ステートメントに関するコードである:

PreparedStatement getLocations = con.prepareStatement(sql); 

ResultSet adjacentSpots = getLocations.executeQuery(); 

if (adjacentSpots.next()){ 
    int freqAti; 
    int total_freq = adjacentSpots.getInt("total_freq"); 
    newfreqs[0] += total_freq; 
    for (int i = 0; i < freqs.length-1; i++) { 
     freqAti = adjacentSpots.getInt(""+i); 
     newfreqs[i+1] += freqAti; 
    } 

    sql = "update _frequent_routes set total_freq = " + newfreqs[0]; 

    for (int i = 1; i < freqs.length; i++) { 
     int iAdjusted = i-1; 
     sql += ", '" + iAdjusted + "' = " + newfreqs[i]; 
    } 

    sql += " where device_id= '" + deviceID + "' and intersection1= '" + 
    intersectionName1 + "' and intersection2='" + intersectionName2 + "'"; 

    PreparedStatement updateSpots = con.prepareStatement(sql); 

    updateSpots.executeUpdate(); 
} 

アン例は次のようになります

アップデートセットtotal_freq = 2、= 0、= 0 1、= 0 2、= 0〜3、= 0~4、= 0〜5、= 0 6、= 0 7,8 _frequent_routes = 0,9 = 0,10 = 0,11 = 0,12 = 0,13 = 0,14 = 0,15 = device_id = 'some string'、intersection1 = 'some string'、intersection2 = 2、16 = 0,17 = 0,18 = 0,19 = 0,20 = 0,21 = 'some string'

データテーブルの列の名前と種類を一致させるエラーはないと確信しています。誰も私の更新ステートメントで構文エラーを見つけることができますか?

+0

*誰かが私の更新ステートメントで文法エラーを見つけることはできますか?いいえ、あなたのコードをゆっくりとゆっくりと減らすことによって、あなたのタイプミスを見つけるまでです。つまり、[mcve]を作ってください。 – Tunaki

+0

実行前にsqlクエリを表示 – Squirrel

+0

最も重要な情報、つまりクエリ自体を忘れてしまった。 –

答えて

0

実際に列名が例に表示されているような数字の場合は、それが問題の原因になる可能性があります。 Mysqlの列名は、バッククォート( `)を使用して引用符を付ける場合を除き、数字だけで構成することはできません。 the docsから

:(同様hereを参照してください。)

識別子が数字で始まるかもしれませんが、引用されていない限り、単に数字で構成しない場合があります。だから、

あなたが行くために良いことがありsql += ", '" + iAdjusted + "' = " + newfreqs[i];あなたはこのラインでバッククォートにあなたの単一引用符を切り替えると...

+0

引用されていても許可されていないようです。私は前にこれを試して、それは私に同じエラーを与えた。私は実際にそれらの列の名前をcharで始めるように変更することにしました。今それは問題を解決する! –

0

前の回答は言う:the docsから

:(参照[ここに] [1]同様に)

識別子は数字で始まることがありますが、引用符で囲まれていない場合は数字だけで構成されることはできません。

実際、MYSQLではクエリで数字のみの識別子を使用できないようです。クォートされているかどうかに関わらず、クエリでこれらの識別子を指定する限り、構文エラーが発生します。しかし、たとえばINSERT文のように列名を指定しなかった場合、「_frequent_routes値(一部の値、一部の値、「一部の文字列」など)に挿入して、エラーを発生させることなくデータベースに格納します。

単純な解決策の1つは、数字だけのフィールドの名前を数字以外の数字に変更することです。この場合、私が行うことができ:

更新_frequent_routes設定total_freq = 94、スロット0 = 4、SLOT1 = 2、SLOT2 = 6、SLOT3 = 2、SLOT4 = 6、SLOT5 = 4、slot6 = 6、slot7スロット10 = 0、スロット11 = 2、スロット12 = 0、スロット13 = 8、スロット14 = 0、スロット15 = 4、スロット16 = 4、スロット17 = 4、スロット18 = 2、スロット19 = 0 、slot20 = 4、slot21 = 4、slot22 = 6、slot23 = 10ここでDEVICE_ID = '一部の文字列' とintersection1を= '一部の文字列' とintersection2が= '一部の文字列'

とフィールドの名前を変更しますそれに対応して。

関連する問題