【问题标题】:JDBC built in functions and prepared statementsJDBC 内置函数和预处理语句
【发布时间】:2010-09-23 00:18:19
【问题描述】:

有没有办法使用 PreparedStatement 执行查询(包含内置的 DB 函数)?

示例: 插入 foo (location) 值 (pointfromtext('12.56666 13.67777',4130)) 这里的 pointfromtext 是一个内置函数。

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    据我所见,pointfromtext 函数的第一个参数是一个字符串,第二个参数是一个数字。因此,请尝试以下操作:

    PreparedStatement preparedStatement = getConnection().prepareStatement("insert into map_address (location) values(pointfromtext('POINT(' || ? || ' ' || ? || ')',4130))");
    preparedStatement.setString(1, "12.56565665");
    preparedStatement.setString(2, "12.57565757");
    preparedStatement.executeUpdate();
    

    【讨论】:

    • 字符串连接是唯一的出路吗?我没有办法告诉 JDBC 转义引号并让它知道吗?是用参数代替吗?
    • 您也可以将单个字符串“POINT(12.56,12.57)”绑定到其中。也许还有一个 pointfromtext 的替代方法,比如 pointfrom_xy 可以直接取两个数字。
    【解决方案2】:

    也许您发现了 Postgresql JDBC 驱动程序的问题,而不是 JDBC 本身的问题。通常,您想要实现的目标与 JDBC 一起使用。

    【讨论】:

      【解决方案3】:

      问号没有被正确评估,因为它们位于单引号之间。删除它们,它应该可以工作,

      【讨论】:

        【解决方案4】:

        您是否尝试不在preparedStatement 中设置双精度数?只是为了测试,你应该尝试直接在字符串中插入这个参数,比如:

        String sql = "insert into map_address (location) values(pointfromtext('POINT(" +  "12.56565665" + " " + "12.57565757" + ")',4130))"
        
        PreparedStatement preparedStatement = getConnection().prepareStatement(sql);
        

        然后尝试执行更新。

        【讨论】:

          【解决方案5】:

          您是否在此代码之后添加了 connection.commit()

          代码应该是:

           PreparedStatement bar = connection.prepareStatement("insert into foo (location) values (pointfromtext('? ?',4130)))");
           bar.setDouble(1, 13.67777);
           bar.setDouble(2, 13.67777); 
           bar.executeUpdate();
           connection.commit(); 
          

          【讨论】:

            【解决方案6】:

            PreparedStatement 对象的范围恰好是执行查询。如果查询包含内置的 DB 函数是可以的,如果相同的查询在 PreparedStatement 之外工作,一切都应该工作。

            正如 Thilo 所说,通过 SQL 命令行或您通常使用的 SQL 图形工具测试您的查询。

            【讨论】:

              【解决方案7】:

              当然,应该可以。

              如果不是,您的数据库系统是什么,您可以从 SQL 命令行运行完全相同的命令吗?

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-07-31
                • 1970-01-01
                • 2014-04-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-01-07
                • 2010-11-15
                相关资源
                最近更新 更多