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 注入攻击。

您应该使用PreparedStatement, 将参数声明为 SQL 中的占位符,但随后分别给出值。具体如何操作将取决于您的 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()+"')");
                                                                                                                                                          ^

但更重要的是,您必须PreparedStatement按照Jon下面的建议使用。

于 2012-05-18T16:19:19.380 回答