1

この sql ステートメントの実行に問題があります。mysql で実行すると問題なく動作しますが、Java では次のエラーが発生します。

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 '' at line 1

データベースには、自動生成された id(pk)、varchar、int、varchar があります。

誰かが私を助けることができますか?

int i = statement.executeUpdate("INSERT INTO sala values('','"+ nume.getText() + "', "+ Integer.parseInt(capacitate.getText())+ ", '" + sunet.getText()+"'");
4

2 に答える 2

5

adarshr の回答に従って SQL を微調整して、このコードを修正しようとしないでください。ここには根本的なセキュリティ上の問題があり、今すぐ修正する必要があります。SQLにユーザー データを直接含めるため、 SQL インジェクション攻撃を受けやすくなります。

SQL でプレースホルダーとして宣言されたパラメーターを使用してPreparedStatement、値を個別に指定する必要があります。正確な方法は JDBC プロバイダーによって異なりますが、次のようになります

// TODO: Fix the column names, and close the statement in a try/finally block
PreparedStatement pst = conn.prepareStatement(
    "INSERT INTO sala (nume, capacitate, sunet) VALUES (?, ?, ?)");
pst.setString(1, nume.getText());
pst.setInt(2, Integer.parseInt(capacitate.getText()));
pst.setString(3, sunet.getText());
pst.executeUpdate();

capacite整数の解析を必要としない方法で取得できる場合は、それが良いことに注意してください。NumberFormatそれ以外の場合は、よりロケールに適した方を使用することを検討してください。また、スキーマの変更に直面してもこれをより堅牢にするために、列名を SQL に追加したことにも注意してください。

于 2012-05-18T16:19:11.257 に答える
5

クエリを閉じていません。

int i = statement.executeUpdate("INSERT INTO sala values('','"+ nume.getText() + "', "+ Integer.parseInt(capacitate.getText())+ ", '" + sunet.getText()+"')");
                                                                                                                                                          ^

しかし、これ以上に、Jon が以下で提案するように使用する必要がPreparedStatementあります

于 2012-05-18T16:19:19.380 に答える