1

SQL INSERT QUERY に問題があります。以下のコードで INSERT QUERY を実行すると、クエリは列名として入力される値を理解します。私のコードは次のとおりです。

try
{
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost/db","root","123456");
    Statement s = con.createStatement();
    int start = 8, end = 10;
    char buf[] = new char[end-start];   // for extracting day alone.

    dvalue = new String();
    ddvalue = new String(); // for adding the extracted day to the table.
    dvalue = cb3.getSelectedItem().toString();
    dvalue.getChars(start, end, buf, 0);System.out.println(buf);
    ddvalue = String.copyValueOf(buf);


    s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values (hello,"+cb3.getSelectedItem()+")");
}
catch(SQLException s)
{
    System.out.println("SQL statemnet is not executed!");
    System.out.println(s);
}

クエリの実行後に表示されるエラーは次のとおりです:-

SQL ステートメントが実行されません! com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:「フィールド リスト」の不明な列「hello」

-- 編集 -- 実際、私のコードは次のとおりです。

s.executeUpdate("insert into "+nameoftab+" (sname,"+""+ddvalue+""+") values ("+cb5.getSelectedItem()+","+cb3.getSelectedItem()+")"); 

誰もが言ったように引用符を挿入すると、「cb5.getSelectedItem()」という用語がテーブルに入力されます。「+cb3.getSelectedItem()+」の場合は、ガベージ値を入力するだけです。

4

6 に答える 6

2

クエリで文字列を引用する必要がありhelloます。

s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
于 2013-02-19T04:51:34.263 に答える
0

hello を一重引用符で囲んでみてください - 例: 'hello'

于 2013-02-19T04:53:47.543 に答える
0

これを試して

  s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")");
于 2013-02-19T04:55:35.407 に答える
0

これは、文字列に引用符を追加する必要があるためです。これを試してください:

>     s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values
> ('hello','"+cb3.getSelectedItem()+"')");

'挿入しようとしている文字列の最初と最後にchar を追加したことに注意してください。

SQL が文字列を列と見なすのはなぜですか? SQL に送信する文字列が次のようになると想像してください。

"insert into OneTable (Field1, Field2) values (Hello, George)"
Instead of (the correct one):

「OneTable (Field1、Field2) 値 ('Hello'、'George') に挿入」

于 2013-02-19T04:57:09.520 に答える
0

の周りに引用符を挿入する必要があります。これにより、値が整数 またはhello文字列であることを mysql が認識するようになりました。
' '

 s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values ('hello',"+cb3.getSelectedItem()+")"); 

または\" \"両方が機能する

 s.executeUpdate("insert into "+nameoftab+" (sname,"+"_"+ddvalue+"_"+") values (\"hello\","+cb3.getSelectedItem()+")");
于 2013-02-19T04:57:41.883 に答える
0

PreparedStatementこのような引用の問題に対処する必要がないように、代わりに使用することを検討することをお勧めします。追加の利点として、SQL インジェクション攻撃から保護されます。

于 2013-02-19T04:57:53.840 に答える