2012-01-04 134 views
2

使用Derby作为我的数据库驱动程序和捆绑通过Java执行SQL查询, 有,这是遇到一个错误,试图执行这个查询Java和数据库查询?

stmt.executeQuery("insert into " + "TEST " + "values (" + dataTimeRev + ", " 
            + dataType + "," + obj + ")"); 

这里dataTimeRev,数据类型,且OBJ时与变数数据。

是指出错误是这样

java.sql.SQLSyntaxErrorException: VALUES clause must contain at least one element. Empty elements are not allowed. 
+0

我们没有看到错误:( – paulsm4 2012-01-04 04:51:38

+0

是不是因为你没有列出要插入值的列的名称? '插入测试(colA,colB)值(1,2)' – dasblinkenlight 2012-01-04 04:53:06

+0

您的TEST是否只有三个字段?那些字符串?如果是这样,它应该用单引号。 – kosa 2012-01-04 04:53:22

回答

4

如果列数据类型为VARCHAR,你将不得不通过在qoutes值一样'value'的,你应该做如下

String query = "insert into TEST values('"+dataTimeRev+"', '"+dataType+"','"+obj+"')"; 
stmt.executeQuery(query); 
0
  1. 验证dataTimeRev,数据类型,且OBJ不为空,而不是空白。
  2. 我不确定Derby是否遵循SQL语法。但是如果这些值的类型是varchar,那么它应该用单引号(')括起来。例如:

stmt.executeQuery( “插入到” + “TEST” + “的值('” + dataTimeRev +“ ' ' ” +的dataType +“',' ”+ OBJ +“ ')“);

0

试试这个:

stmt.executeQuery("insert into TEST values ('" + dataTimeRev + "', "'+ dataType + "',"' + obj + "')"); 
0

之一这个错误的原因是试图插入一个不是字符串的类型(Date,Double,Integer等,被单引号包围'' 例如我的表是dec LARED这样的:

String createTableStatement = "CREATE TABLE PRODUCT"+ "(product_id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)," + 
       "product_name CHAR(80), "+ 
       "price DOUBLE," + 
       "supplier CHAR(50))"; 

所以我在做:的

statement.executeUpdate("INSERT INTO PRODUCT (PRODUCT_NAME, PRICE, DATE_SUPPLIED, QUANTITY, SUPPLIER) VALUES " + 
     "('" + productName + "', " + "'" + price + "', " + "'" + supplier +"')"); 

代替:

statement.executeUpdate("INSERT INTO PRODUCT (PRODUCT_NAME, PRICE, DATE_SUPPLIED, QUANTITY, SUPPLIER) VALUES " + 
     "('" + productName + "', " + price + ", " + "'" + supplier +"')");