Java Hive 2 JDBC PreparedStatement抛出错误,无法识别表达式规范中“?”“”附近的输入
RAL是一个简单的配置单元表,具有字符串类型的列spd\U field\U label\U id和SUBJECT\U USER\U id 使用Hive2的简单PreparedStatement抛出下面的错误堆栈跟踪。有没有关于什么地方可能出错的建议?如果使用语句而不是PreparedStatement,并且不使用?用于参数绑定Java Hive 2 JDBC PreparedStatement抛出错误,无法识别表达式规范中“?”“”附近的输入,java,jdbc,hive,prepared-statement,Java,Jdbc,Hive,Prepared Statement,RAL是一个简单的配置单元表,具有字符串类型的列spd\U field\U label\U id和SUBJECT\U USER\U id 使用Hive2的简单PreparedStatement抛出下面的错误堆栈跟踪。有没有关于什么地方可能出错的建议?如果使用语句而不是PreparedStatement,并且不使用?用于参数绑定 try { Class.forName("org.apache.hive.jdbc.HiveDriver"); } catch (ClassNot
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(1);
}
String query = "SELECT spd_field_label_id FROM RAL WHERE SUBJECT_USER_ID = ?";
PreparedStatement stmt = null;
Connection con = null;
boolean testCasePassed = false;
try {
con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", "");
stmt = con.prepareStatement(query);
stmt.setString(1, "USR-44");
ResultSet resultSet = stmt.executeQuery(query);
Assert.assertNotNull(resultSet);
while (resultSet.next()) {
testCasePassed = true;
System.out.println("=======Test =========" + resultSet.getString("spd_field_label_id"));
}
} finally {
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
}
return testCasePassed;
你用错了方法。你已经准备好了陈述。它已准备好执行。应该是:
stmt.executeQuery(query);
发布真实代码。至少是真实的查询。Hi EJP该查询是真实的。它只是尝试根据字符串列的where子句获取字符串列,我已经粘贴了我尝试在Junit测试用例中运行的实际代码。在配置单元命令行上或通过语句执行时,查询可以正常工作?不,查询不是真实的。它显然是编造出来的,名字像是某物的名字。这就是为什么我要你改变它。否则你为什么要改变它?不要在这里胡说八道。请注意你的语言EJP,我不是来和你打架的!columnName是someColumnName或spd\u field\u label\u id或table name是RAL有什么关系?当我已经提到它是一个字符串列,并且我正在查询另一个字符串列时,它是否有任何区别,尤其是当它是我的特定表结构时;返回的是布尔值,但我需要该查询的结果集,如何才能执行?只需运行stmt.executeQuery?
stmt.executeQuery(query);
stmt.execute();