我有一个典型的带有静态参数的交叉表查询。它与createStatement配合良好。我想使用preparestatement来查询。
String query = "SELECT * FROM crosstab(
'SELECT rowid, a_name, value
FROM test WHERE a_name = ''att2''
OR a_name = ''att3''
ORDER BY 1,2'
) AS ct(row_name text, category_1 text, category_2 text, category_3 text);";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.getResultSet();
stat.executeQuery(query);
rs = stat.getResultSet();
while (rs.next()) {
//TODO
}
但这似乎不起作用。
我得到一个PSQLException-无法使用在PreparedStatement上采用查询字符串的查询方法。
有什么想法我想念的吗?
您已经陷入了令人困惑的类型层次结构PreparedStatement extends Statement
:
PreparedStatement
具有与相同的execute*(String)
方法Statement
,但不应该使用它们,仅使用-– 的无
参数
execute*()
方法,PreparedStatement
您已经使用给出了要执行的实际查询字符串conn.prepareStatement()
。
问题内容: 我最近在Java PreparedStatements中遇到了此问题。我有以下代码: 方法在哪里 但是,它总是抛出此错误: 当我以幼稚的方式执行“ …”时,不会发生此问题,但我希望以此方式进行。 任何帮助深表感谢。 更新 我尝试了社区的各种建议,例如 仍然出现错误信息。 问题答案: 解决问题的方法实际上非常简单,当您要调用PreparedStatement.executeQuery()
问题内容: 当运行这个查询 在这样的 它将抛出一个异常,即语法不好,很明显,因为我可以在sql-developer中运行相同的查询。 这是错误吗?我可以同时使用准备好的语句和间隔吗? 问题答案: 整个表达式都是文字,您不能简单地用变量(参数)替换它的一部分。请改用该函数。
问题内容: 我正在使用s批查询我的数据库。我现在已经做了一些研究,我想重写我的应用程序以代替使用,但是我很难弄清楚如何向批处理中添加查询。 这就是我现在正在做的: type的类成员在哪里? 我想做的是使用的方法设置一些动态数据,然后将其添加到批处理中。 不幸的是,我不完全了解它的工作原理,以及如何在批处理中使用特定的sql,或者为我拥有的每个sql 创建一个新的sql,然后将它们全部加入一个批处理
问题内容: 我正在尝试使用该功能。代码如下。执行后,它返回一堆字符串而不是值。 代码完成后,该语句将变为: 但是,它必须是: 没有引号。谁能告诉我这是什么问题? 问题答案: 您不能将参数标记用于列名,表名,数据类型名或基本上不是数据的任何内容。
问题内容: 我无法在数据库(mySQL)中创建表,使用并尝试使用以下命令输入未来表的名称: 然后,在用户输入表名称之后,我尝试构造并调用该语句: 如果我尝试不输入名称就执行它(如常量字符串:“ CREATE TABLE newtable(…)”,但我需要输入名称),它将很好地工作。 问题答案: 阅读表名后,您将必须格式化字符串,例如: 然后创建像:
问题内容: 我正在为我的应用程序创建搜索表单。 用户在其中选择应该用于过滤数据的字段。 数字字段是可变的,所以我不知道SQL查询的where子句中应该有多少个。 如何在where子句中使用可变数量的条件? 谢谢 问题答案: PrepardStatements不支持可变数量的条件。一些框架所做的是将每个PreparedStatement缓存在Map中,键是查询。 因此,每次您要运行查询时,都需要构建