SQLException:JZ0S4:无法执行空的(零长度)查询。准备好的声明
继承自一个在Connection上执行PreparedStatements的类。SQLException:JZ0S4:无法执行空的(零长度)查询。准备好的声明
public class doSomething {
private PreparedStatement ps;
public setPS (Connection conn) throws SQLException {
String sql = "select * from table where id = ?";
ps = conn.prepareStatement(sql);
}
public void runSomething(String var){
ps.setString(1,var);
ResultSet rs = ps.executeQuery();
...
}
}
我打电话
doSomethingInstance.setPS(conn);
doSomethingInstance.runSomething(var);
从另一个类,这会引发和异常的
ResultSet rs = ps.executeQuery();
唯一的例外是的SQLException:JZ0S4:无法执行空(零长度)查询。在准备好的声明上。我不明白为什么。有没有人看到Iam在这里做错了什么?
谢谢!
此问题已被修复的人。数据库权限有问题。捕捉并打印堆栈跟踪
ResultSet rs = ps.executeQuery();
表示未找到查询访问的表。我仍然需要弄清为什么SQLException:JZ0S4:无法执行空的(零长度)查询。
感谢您的时间和考虑。 Rohan
可以在执行查询之前打印sql的内容吗?我怀疑它正在丢失它的内容
@rohangter:我不知道这个API,但是你运行了一个不同的查询吗? – 2009-07-17 16:53:16
回去直接从源文件复制代码,然后编辑您的问题。你有一个潜在的歧义:你的第一个片段调用准备好的语句“preparedStatement”,然后你改变为“prepareStatement”(没有“d”)。仔细查看源代码将使问题更容易分离。你有两个变量还是你错误地输入了你的例子?
[稍后...] 感谢您更新您的代码。我没有看到明显的问题。你是否已经用调试器(例如,在Eclipse中)逐步完成它,以确保按预期调用这两种方法?
我很抱歉,我修复了这个对象的名字,它基本上和这两个方法使用的PreparedStatment句柄一样。 – 2009-07-17 17:11:55
是var非null?是变种的正确类型(int,而不是字符串,我会想?)
很奇怪......如果声明真的是空的,setString()不应该先工作。你确定这是正确的/完整的代码吗? (“public setPS(...”不应该编译:缺少返回类型)不知道你在用什么数据库,但是“table”不是一个很好的表名,它是一个保留关键字(MySQL至少) – 2009-07-17 19:49:35