1

这是一个在连接上执行 PreparedStatements 的类。

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:无法执行空(零长度)查询。在准备好的声明上。我不明白为什么。有谁看到我在这里做错了什么?

谢谢!

4

4 回答 4

1

返回并直接从源文件中复制代码,然后编辑您的问题。您有一个潜在的歧义:您的第一个片段将准备好的语句称为“prepareStatement”,然后更改为“prepareStatement”(没有“d”)。清楚地查看您的源代码将更容易隔离问题。你有两个变量还是你打错了你的例子?

[稍后...] 感谢您更新您的代码。我没有看到它有明显的问题。您是否使用调试器(例如,在 Eclipse 中)单步执行它以确保按预期调用这两种方法?

于 2009-07-17T17:05:44.290 回答
1

这个问题已经解决了伙计们。数据库权限有问题。捕获并打印堆栈跟踪

 ResultSet rs = ps.executeQuery();

表示未找到该查询正在访问的表。我仍然需要弄清楚为什么会抛出 SQLException: JZ0S4: Cannot execute an empty (zero-length) query。

感谢您的时间和考虑。罗汉

于 2009-07-17T19:20:24.580 回答
0

你可以在执行查询之前打印sql的内容吗?我怀疑它正在丢失它的内容

于 2009-07-17T16:48:03.387 回答
0

var是非空的吗?var的类型是否正确(我认为是 int 而不是 String?)

于 2009-07-17T17:50:55.727 回答