1

このエラーが発生し続けており、何が原因なのか理解できません。

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 '= '111-11-1111'' at line 1

これらのステートメントによってスローされています:

ps = conn.prepareStatement(
         "SELECT * FROM courses WHERE NOT EXISTS"
         + "(SELECT * FROM courses"
         + "NATURAL JOIN register"
         + "WHERE ssn = ?)")
ps.setString(1,ssn);

rs = ps.executeQuery();

この正確なコマンドを文字ごとに (? を「111-11-1111」に置き換えたことを除いて) MySQl コマンド ライン クライアントに入力したところ、問題なく実行されました。しかし、Java で実行しようとすると、上記の構文エラーで失敗します。私は答えが非常に明白であり、私の顔を見つめているのではないかと沈んでいる疑いがありますが、疲れすぎてそれを見ることができません. 何かご意見は?

編集 だから私は当面の問題を解決しましたが、それは単により多くの質問をもたらします. クエリを複数行ではなく単一行の文字列として構成すると、次のようになります。

ps = conn.prepareStatement(
                "SELECT * FROM courses WHERE NOT EXISTS (SELECT * FROM courses NATURAL JOIN register WHERE ssn = ?)");

それはうまく実行されます。(水平スクロール バーについては申し訳ありませんが、この場合は選択の余地がありません。) そこで、私の質問を言い換えます。違いがある場合は、Java 7、Netbeans 7.2、および MySQL 5.5 を使用しています。

4

3 に答える 3

4

連結を使用して文字列を作成しています - その文字列を印刷してみると問題が発生します...各部分文字列の先頭または末尾にスペースがないため、連結された文字列は次のようになります。

"SELECT * FROM courses WHERE NOT EXISTS(SELECT * FROM coursesNATURAL JOIN registerWHERE ssn = ?)"

したがってcoursesNATURAL、 andregisterWHEREは悪い構文になります。

于 2012-10-06T04:26:35.917 に答える
2

JAVA で複数行にまたがる文字列を作成するときはいつでも、最初の行の後または 2 行目の前にスペースが残っていることを確認してください。

+ "(SELECT * FROM courses"
     + "NATURAL JOIN register"

これは単に解決されます

SELECT * FROM coursesNATURAL JOIN register"
于 2012-10-06T04:33:01.767 に答える
2

どちらも単一行です(最初のクエリにも \n /改行はありません)

問題は、各行の区切りの間、つまりFROM coursesスペースが必要になった後にスペースが不足していることです。

したがって、最初のクエリは実際には間違っています。に変換されるため:

 FROM **coursesNATURAL**
于 2012-10-06T04:25:58.963 に答える