Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ? 不替换为内部的值$$_Java_Postgresql_Jdbc_Prepared Statement - Fatal编程技术网

Java ? 不替换为内部的值$$

Java ? 不替换为内部的值$$,java,postgresql,jdbc,prepared-statement,Java,Postgresql,Jdbc,Prepared Statement,我有一个过程,在这个过程中,我想从jdbc中传递精确的值,这些值是从user-after-query格式传递的 但是,当我将preparedstatement与$$一起使用时,会出现一个错误,即: org.postgresql.util.PSQLException: The column index is out of range: 3, number of columns: 2. 但是,如果没有$$,它工作得非常好。请帮助我如何使用$$和preparestatement传递参数 conn =

我有一个过程,在这个过程中,我想从jdbc中传递精确的值,这些值是从user-after-query格式传递的

但是,当我将preparedstatement与$$一起使用时,会出现一个错误,即:

org.postgresql.util.PSQLException: The column index is out of range: 3, number of columns: 2.
但是,如果没有$$,它工作得非常好。请帮助我如何使用$$和preparestatement传递参数

conn = DriverManager.getConnection(jdbcUrl, username, password);
String prepareselectSQL="SELECT get_sum(?,?,$$?$$)";
stmt=conn.prepareStatement(prepareselectSQL);
stmt.setInt(1,10);
stmt.setInt(2,200);
stmt.setString(3,"");
rs = stmt.executeQuery();
while (rs.next()) {
      System.out.println(rs.getString(1));
}
下面是我的查询示例:

select  * from getdashboarddata_010('application','(upload + download)',?,'2018-02-05 00:00:00','2018-02-05 00:00:00','0','5-1','','hits','desc','','true');
以下是需要替换为?的值:

(select * ,  ''::text as srczonename, ''::text as srczonetype, ''::text as firewall_cat_type, ''::text as destzonename, ''::text as destzonetype ,  null::int as appresolver from fwapp_applicationutfv5_12hr ) fwapp_applicationutfv5_12hr where "5mintime" >='2018-05-04 00:00:00' and "5mintime" < '2018-05-04 23:59:59'

因此,您可以看到我的值已经包含单引号,因此我需要在prepare语句中使用美元引号传递它。

我认为您正在尝试使用美元引号字符串文字,并将参数替换为字符串。你不能这么做吗?在SQL字符串文本中。在SQL字符串文字中,美元字符不能识别为参数占位符。这只是一个普通的文字美元字符。。。在字符串中

如果您需要执行一些需要组装字符串值的操作,那么应该使用Java进行组装。大概是这样的:

String sql = "SELECT get_sum(?, ?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, 10);
stmt.setInt(2, 200);
stmt.setString(3, "'" + someString + "'");

上面将向SQL get_sum存储过程传递一个以“字符”开头和结尾的字符串值

我认为您正在尝试使用一个带美元引号的字符串文字,并在字符串中替换一个参数。你不能这么做吗?在SQL字符串文本中。在SQL字符串文字中,美元字符不能识别为参数占位符。这只是一个普通的文字美元字符。。。在字符串中

如果您需要执行一些需要组装字符串值的操作,那么应该使用Java进行组装。大概是这样的:

String sql = "SELECT get_sum(?, ?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, 10);
stmt.setInt(2, 200);
stmt.setString(3, "'" + someString + "'");

上面将向SQL get_sum存储过程传递一个以“字符”开头和结尾的字符串值

$$是什么意思?@YCF\L实际上我的查询包含$$,正如$$在postgres中所表示的那样,应该以单引号的方式传递。请尝试使用“?”$$作为P/SQL分隔符并删除setString。这应该行得通。否则离开?和do stmt.setString3,?占位符不应被引用。无论是单引号,还是美元报价,出于这个原因,我需要通过美元报价传递这个-不,你不需要这样做。准备好的报表将为您完成这项工作。只需删除这些引号,一切都会正常运行$$意味着什么?@YCF\L实际上我的查询包含$$,正如$$在postgres中所表示的,与单引号一样的确切方式应该通过。请尝试使用“?”$$作为P/SQL分隔符并删除setString。这应该行得通。否则离开?和do stmt.setString3,?占位符不应被引用。无论是单引号,还是美元报价,出于这个原因,我需要通过美元报价传递这个-不,你不需要这样做。准备好的报表将为您完成这项工作。只需删除这些引号,一切都会正常工作,因为某个值已经包含单引号,并使用messageformat格式化。因此,单引号的一次出现会消失。在剩下的内容之后,我需要按原样传递。因此,我需要$$代替单引号。我认为这不正确。请用MCVE修改您的问题,以证明您的行为。如果Postgres从一个通过a传递的字符串中剥离引号,我会非常非常惊讶?和setString.@AshaKoshti:不,你不需要这个-这正是PreparedStatement的作用:你不必担心转义值中嵌入的单引号。您只需选择get_sum?然后设置字符串3,someString-不管someString是什么contains@StephenC我已经更新了问题。你可以看到你的更新对我来说没有意义。很抱歉你似乎在尝试使用?将SQL插入到SQL中。你不能这样做。因为somevalue已经包含单引号,并且它是用messageformat格式化的。所以单引号的一次出现会消失。在剩下的内容之后,我需要按原样传递。所以我需要$$来代替单引号。我认为这不正确。请用MCVE修改您的问题,以证明您的行为。如果Postgres从一个通过a传递的字符串中剥离引号,我会非常非常惊讶?和setString.@AshaKoshti:不,你不需要这个-这正是PreparedStatement的作用:你不必担心转义值中嵌入的单引号。您只需选择get_sum?然后设置字符串3,someString-不管someString是什么contains@StephenC我已经更新了问题。你可以看到你的更新对我来说没有意义。很抱歉你似乎在尝试使用?将SQL插入到SQL中。你不能那样做。