即使db中有实体,SQL语句也会失败

max*_*mus 1 java sql eclipse hsqldb

我有一个名为Produkt的表,在这个表中有几个名为test的产品.

当我想做那个代码时:

public Produkt findByName(String name) throws SQLException{
    log.error("Enter findByName with parameters: " + name);
    PreparedStatement ps;
    ResultSet rs = null;
    String query = "SELECT * FROM Produkt WHERE name=" + name;
    ps=hsqlmanager.getConnection().prepareStatement(query);
    rs = ps.executeQuery();
    ps.close();
    if(rs.next()) return(new Produkt(rs));
    else return(null);
}
Run Code Online (Sandbox Code Playgroud)

它总是给我一个SQL错误:

Exception in thread "main" java.sql.SQLSyntaxErrorException: user
lacks privilege or object not found: TEST   at
org.hsqldb.jdbc.Util.sqlException(Unknown Source)   at
org.hsqldb.jdbc.Util.sqlException(Unknown Source)   at
org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)    at
org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)     at
dao.DAOProdukt.findByName(DAOProdukt.java:157)  at
dao.test_produkt_dao.main(test_produkt_dao.java:23)
Run Code Online (Sandbox Code Playgroud)

为什么?我谴责你的答案!

更新:

为什么PS使用不当?请告诉我,以便我可以从中学到什么?

Mar*_*c B 5

您生成的SQL语句无效,name参数周围没有引号

String query = "SELECT * FROM Produkt WHERE name='" + name + "'";
                                                 ^--      ^^^^^^
Run Code Online (Sandbox Code Playgroud)

  • 这应该被`"SELECT*FROM Produkt WHERE name =?"取代.并调用`setString()`. (3认同)