我尝试做的事情似乎很简单,但我收到此错误SQLITE_ERROR] SQL error or missing database (no such column: user1)
public String getIdUser(String name) {
try {
this.stat = conn.createStatement();
String sql = "SELECT id_user FROM User WHERE name = " + name;
ResultSet user = stat.executeQuery(sql);
return user.toString();
} catch (SQLException e) {
return null;
}
}
答案 0 :(得分:2)
替换
String sql = "SELECT FROM User WHERE name = " + name;
带
String sql = "SELECT * FROM User WHERE name = " + name; // you can also specify a column/columns instead of *
答案 1 :(得分:2)
在不引用name
字符串的情况下,它被解释为列名,因此您看到错误。你可以使用单引号将其包围起来,但这仍然是一种不好的做法,并且会使代码容易受到SQL注入攻击。
此外,您缺少选择列表(特别是id_user
列),并且缺少从结果集中获取它。
最后,你忘了关闭语句和结果集。
如果你把所有这些修正放在一起,你应该使用这样的东西:
public String getIdUser(String name) {
try (PreparedStatmet ps =
conn.prepareStatement("SELECT id_user FROM User WHERE name = ?")) {
ps.setString(1, name);
try (ResultSet rs = stat.executeQuery()) {
if (rs.next()) {
return rs.getString(1);
}
}
} catch (SQLException ignore) {
}
return null;
}
答案 2 :(得分:2)
我在您的代码中发现了许多问题:
您的查询应返回应该是的内容:
SELECT col_name1, col_name2, ... FROM User ...
或者如果你想选择所有东西:
SELECT * FROM User ...
String或Varchar应该在两个引号之间,例如,您的查询应该如下所示:
SELECT col_name1 FROM User WHERE name = 'name'
我不建议使用查询的串联而不是使用Prepared Statement它更安全,更有帮助(我将提供一个示例)
要获得结果,您必须移动光标,您必须调用result.next()
变量名称应该很重要,例如ResultSet
应该是ResultSet rs
而不是ResultSet user
您的最终代码可以是:
PrepareStatement prst = conn.prepareStatement("SELECT colName FROM User WHERE name = ?");
prst.setString(1, name);
ResultSet rs = prst.executeQuery();
if(rs.next()){
reuturn rs.getString("colName");
}