Postgres-列超出PreparedStatement中的范围-java

Postgres-列超出PreparedStatement中的范围-java,java,postgresql,Java,Postgresql,在Windows 8.1上使用Java 1.7.0.67的preparedstatement出现问题 基本上,我得到如下错误(从测试中): 我看得出来它告诉我我没有钱?但是它们在beforesetString消息中为所有人所看到 有人能看出我做的有什么不对吗?我对准备好的声明还不熟悉,我认为这是对的 谢谢和问候 塞恩 您的查询应该是 String sql = "SELECT lineText FROM public.dbText_ABCDEF-001 WHERE Textid = ?"; 此外

在Windows 8.1上使用Java 1.7.0.67的preparedstatement出现问题

基本上,我得到如下错误(从测试中):

我看得出来它告诉我我没有钱?但是它们在beforesetString消息中为所有人所看到

有人能看出我做的有什么不对吗?我对准备好的声明还不熟悉,我认为这是对的

谢谢和问候 塞恩


您的查询应该是

String sql = "SELECT lineText FROM public.dbText_ABCDEF-001 WHERE Textid = ?";

此外,您不能为表名准备语句,因为它仅用于列值

参数不是字符串替换。准备好的语句是数据库将准备的语句。数据库必须能够计算查询的执行计划。如果不知道查询使用哪个表,数据库就不可能准备执行计划。此外,准备语句的全部要点是避免引用值,并以给定格式格式化日期。所以占位符不能在引号内。明白了-我的PreparedStatement参考资料没有明确说明这一点…正如我所说的-我对他们是新手,我正在研究字符串替换而不是值…非常感谢。
        String zLocale = "en_EN";
        PreparedStatement pst1 = null;

        logger.severe("Strt Testing");

        String sql1;
        sql1= "SELECT \"lineText\" FROM \"public\".\"dbText_?\" WHERE \"Textid\" = \'?\';";
        pst1 = con.prepareStatement(sql1);

        logger.severe("Before pstText: "+ pst1.toString());
        pst1.setString(1, "ABCDEF-001");
        pst1.setString(2, zLocale);
        logger.severe("After pstText: "+ pst1.toString());

        logger.severe("Done Testing");
String sql = "SELECT lineText FROM public.dbText_ABCDEF-001 WHERE Textid = ?";