preparedstatement.getstring()方法不适用于嵌套的sql查询

oewdyzsn  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(868)

我正在尝试使用下面的方法查询我的hbase,sql查询有一个嵌套查询,问题是在使用setstring()方法添加内联参数时,它不替换?在查询中。
我有个例外
参数值未绑定。索引1处的参数未绑定
我正在使用phoenix queryserver和avatica jdbc驱动程序连接到我的hbase
下面是我的功能。

  1. public ResultSet getTopRiskEntitiesCount(String tenantId, String entityType){
  2. ResultSet resultSet = null;
  3. try{String query = "SELECT TID,ENTITYTYPE, ENTITYID AS USER,SCORE*100 AS RISK,TIMESTAMP FROM ANALYTICS_SCORES WHERE TID = ? AND ENTITYTYPE = ? AND TIMESTAMP >= (SELECT MAX(TIMESTAMP) FROM ANALYTICS_SCORES) ORDER BY RISK DESC LIMIT 100";
  4. PreparedStatement preparedStatement = getConnection().prepareStatement(query);
  5. preparedStatement.setString(1, tenantId);
  6. preparedStatement.setString(2, entityType);
  7. resultSet = preparedStatement.executeQuery();
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. closeConnection();
  12. return resultSet;
  13. }

以下是例外。

  1. org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : while preparing SQL: SELECT TID,ENTITYTYPE, ENTITYID AS USER,SCORE*100 AS RISK,TIMESTAMP FROM ANALYTICS_SCORES WHERE TID = ? AND ENTITYTYPE = ? AND TIMESTAMP >= (SELECT MAX(TIMESTAMP) FROM ANALYTICS_SCORES) ORDER BY RISK DESC LIMIT 100
  2. at org.apache.calcite.avatica.Helper.createException(Helper.java:53)
  3. at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
  4. at org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:327)
  5. at org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:163)
  6. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  7. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  8. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  9. at java.lang.reflect.Method.invoke(Method.java:498)
  10. at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
  11. at org.testng.internal.Invoker.invokeMethod(Invoker.java:580)
  12. at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
  13. at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
  14. at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
  15. at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
  16. at org.testng.TestRunner.privateRun(TestRunner.java:648)
  17. at org.testng.TestRunner.run(TestRunner.java:505)
  18. at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
  19. at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
  20. at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
  21. at org.testng.SuiteRunner.run(SuiteRunner.java:364)
  22. at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
  23. at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
  24. at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
  25. at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
  26. at org.testng.TestNG.runSuites(TestNG.java:1049)
  27. at org.testng.TestNG.run(TestNG.java:1017)
  28. at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
  29. at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
  30. at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
  31. java.lang.RuntimeException: java.sql.SQLException: ERROR 2004 (INT05): Parameter value unbound. Parameter at index 1 is unbound
  32. at org.apache.calcite.avatica.jdbc.JdbcMeta.propagate(JdbcMeta.java:683)
  33. at org.apache.calcite.avatica.jdbc.JdbcMeta.prepare(JdbcMeta.java:709)
  34. at org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:209)
  35. at org.apache.calcite.avatica.remote.Service$PrepareRequest.accept(Service.java:1199)
  36. at org.apache.calcite.avatica.remote.Service$PrepareRequest.accept(Service.java:1170)
  37. at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94)
  38. at org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:46)
  39. at org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:127)
  40. at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
  41. at org.apache.phoenix.shaded.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
  42. at org.apache.phoenix.shaded.org.eclipse.jetty.server.Server.handle(Server.java:499)
  43. at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
  44. at org.apache.phoenix.shaded.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
  45. at org.apache.phoenix.shaded.org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
  46. at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
  47. at org.apache.phoenix.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
  48. at java.lang.Thread.run(Thread.java:748)
pzfprimi

pzfprimi1#

尝试在代码中使用此块。 for (int i = 1; i <= pmetadata.getParameterCount(); i++) { System.out.println("Type: " + pmetadata.getParameterType(i)); }

相关问题