我有配置单元表,我使用jdbc驱动程序通过编写准备好的语句查询填充数据,如下所示。
Connection con = HiveConnectionMgr.getConnection();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date yourDate= null;
try {
yourDate = sdf.parse("2018-09-02");
} catch (ParseException e1) {
e1.printStackTrace();
}
String sql ="select * from txns_fact where txndate=?";
PreparedStatement ps = con.prepareStatement(sql);
System.out.println(sql+new java.sql.Date(yourDate.getTime()));
java.sql.Date d = new java.sql.Date(yourDate.getTime());
ps.setDate(1, d); //here
ResultSet rs = ps.executeQuery(); //not working
while(rs.next()) {
System.out.println("cameinnnnnnn");
System.out.println(rs.getString(1)+"--"+rs.getTimestamp(2)+"--"+rs.getString(3));
}
sql = "insert into table txnaggr_fact partition(txninterval=?) values('a','b','c',4,'Test')";
ps = con.prepareStatement(sql);
ps.setDate(1, d); //here
System.out.println("sql="+sql);
ps.executeUpdate(); //throws exception
System.out.println("inserted");
} catch(Exception e) {
e.printStackTrace();
}
在插入过程中,我得到以下异常。
sql=insert into table txnaggr_fact partition(txninterval=?) values('a','b','c',4,'Test')
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:57 mismatched input '-' expecting ) near '2018' in insert clause
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:256)
at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:242)
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:254)
at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:406)
at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:119)
at com.cw.na.vos.DateTest.main(DateTest.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:57 mismatched input '-' expecting ) near '2018' in insert clause
at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:380)
at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:206)
at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:290)
at org.apache.hive.service.cli.operation.Operation.run(Operation.java:320)
at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:530)
at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:517)
at org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:310)
at org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:530)
at org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1437)
at org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1422)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.parse.ParseException:line 1:57 mismatched input '-' expecting ) near '2018' in insert clause
at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:211)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)
at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)
at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:468)
at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1317)
at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1295)
at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:204)
... 15 more
问题是Hive的日期类型实际上不是Java的日期类型,它实际上是字符串类型。如果查看Hive的DateObjectInspector,您不会看到Java的日期,而是org.apache.hadoop.hive.common.type.Date
。我建议您使用Hadoop的日期。
问题内容: 我在数据库中有一列具有数据类型。我想使用PreparedStatement将此列值设置为当前日期和时间。我怎么做? 问题答案: 使用其中传递通过构造的的用途。 另外,如果数据库支持,您也可以调用特定于数据库的函数以将其设置为当前时间戳。例如,MySQL为此提供支持。例如 或者,如果数据库支持,则将字段类型更改为自动设置插入/更新时间戳的字段类型,例如在MySQL中代替。
我正在用spring Boot做一个项目。:图书馆管理系统。为了得到要计算的罚款,我已经更改了系统日期。但是,在此之后,当我重新运行应用程序时,在控制台中会出现以下错误 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器配置错误。 验证连接器的配置,识别并停止正在侦听端口8080的任何进程,或者将此应用程序配置为侦听另一个端口。
问题内容: 我正在尝试使用准备好的语句来设置表名称以从中选择数据,但是在执行查询时,我总是收到错误消息。 错误和示例代码如下所示。 有什么想法可能会导致这种情况? 问题答案: 表名不能用作参数。它必须是硬编码的。因此,您可以执行以下操作:
问题内容: 我完全被mySQLi弄糊涂了。尽管多年来我一直在使用过程性mysql调用,但我希望习惯于为其提供的db security / mySQL注入保护编写准备好的语句。我正在尝试编写一个简单的select语句(是的,我知道为此进行程序调用可提高性能)。运行时,我会得到所有回声,直到击中组件为止。在我看来,这一切都相当简单,但是在阅读了数小时的mySQLi手册后,我感到茫然。任何想法为什么会失
我知道这不是一个应该在这里问的问题。请帮我解决这个问题。 我试图在下面查询中使用case语句,但是我找不到我在其中所做的错误。请你帮帮我.. 我得到的错误如下 SQL]选择tsc_accessory_details_for_repaired_and_qc_pass_phone_list.ccord(tsc_accessory_details_for_repaired_and_qc_pass_pho
问题内容: 我有一个名字列表,例如: 并声明: 如何执行以下操作: 有解决方法吗?有人可以解释为什么缺少这种方法吗? 使用:java,postgresql,jdbc3 问题答案: 没有干净的方法仅通过在我所知道的列表上设置列表来执行此操作。 编写代码,以适当数量的问号(与列表中的数字相同)构造SQL语句(或更好地替换单个?或类似的标记),然后遍历列表为每个参数设置参数。