Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java准备的语句不适用于我的循环_Java_Sql_Prepared Statement - Fatal编程技术网

Java准备的语句不适用于我的循环

Java准备的语句不适用于我的循环,java,sql,prepared-statement,Java,Sql,Prepared Statement,我不熟悉这一点,并尝试使用准备好的语句将一些日期添加到Oracle数据库中。这是我的代码: CODE REMOVED, code updated. 这将产生以下结果: INSERT into TEST_RESULTS12233 (DB_ID, DATED1, DATED2, DATED3, DATED4) values (t1_seq.nextval, to_date(?, 'dd/mm/yyyy hh24.mi'), to_date(?, 'dd/mm/yyyy hh24.mi'), to_

我不熟悉这一点,并尝试使用准备好的语句将一些日期添加到Oracle数据库中。这是我的代码:

CODE REMOVED, code updated.
这将产生以下结果:

INSERT into TEST_RESULTS12233 (DB_ID, DATED1, DATED2, DATED3, DATED4) values (t1_seq.nextval, to_date(?, 'dd/mm/yyyy hh24.mi'), to_date(?, 'dd/mm/yyyy hh24.mi'), to_date(?, 'dd/mm/yyyy hh24.mi'), to_date(?, 'dd/mm/yyyy hh24.mi'))
Event1
Event2
Event3
Event4
Exception in thread "main" java.sql.BatchUpdateException: ORA-01858: a non-numeric character was found where a numeric was expected

at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10500)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
at sandpit.testsand.main(testsand.java:85)
如果我将setString中的pstatement替换为Event1,则批处理将执行。 有人知道我怎样才能让它工作吗?? 谢谢

以下是要求的完整代码:

     //MORE CODE AS REQUESTED 


     String inserttotable = "INSERT into TEST_RESULTS12233 (DB_ID";
     String stateclose = ")";
     String insertvalues =(" values (t1_seq.nextval");
     StringBuilder insertBuilder = new StringBuilder();
     StringBuilder valueBuilder = new StringBuilder();
     int timestoloop = 4;

     for (i=1; i<=timestoloop; i++)

     {           
         insertBuilder.append(", DATED"+i);
         valueBuilder.append(", to_date(?, 'dd/mm/yyyy hh24.mi')");

     }

     String finalinsert = inserttotable + insertBuilder.toString()+ stateclose;
     String finalvalues = insertvalues + valueBuilder.toString() + stateclose;
     String insertsql = finalinsert + finalvalues;
     System.out.println(insertsql);
     String insertresults = insertsql;

        PreparedStatement prepState = conn.prepareStatement(insertresults);


    String Event1 = "22122014 13.26";
    String Event2 = "22122014 13.27";
    String Event3 = "22122014 13.28";
    String Event4 = "22122014 13.29"; 


     for (i=1; i<=timestoloop; i++)

     {           
        String pstatement = "Event"+i;
        System.out.println(pstatement);
        prepState.setString(i, pstatement);


     }

     prepState.addBatch();
     prepState.executeBatch();
//需要更多的代码
String inserttotable=“插入测试结果12233(DB\U ID”;
字符串stateclose=“)”;
字符串insertvalues=(“值(t1_seq.nextval”);
StringBuilder insertBuilder=新建StringBuilder();
StringBuilder valueBuilder=新的StringBuilder();
int timestoloop=4;

对于(i=1;i,通过动态创建变量名,将计数器作为
String
文本(
Event1
)追加,并将它们作为
String
输入设置到准备好的语句中,这是在制造混乱。实际上,您是在设置
字符串
文本,比如(
Event1
)而不是值(
221220014 13.26
)。这不是您应该做的。您可能需要像下面这样直接设置值

 prepState.setString(1, Event1);
 prepState.setString(2, Event2);
 prepState.setString(3, Event3);
 prepState.setString(4, Event4);
我建议您查看一个包含所有事件值的字符串文本列表。迭代它们,在准备好的语句中设置它们,然后执行查询

List<String> eventValues = new ArrayList<String>();
List eventValues=new ArrayList();

通过动态创建变量名,将计数器追加为
字符串
文本(
Event1
),并将其作为
字符串
输入设置到准备好的语句中,这是在制造混乱。实际上,您是在设置
字符串
文本,例如(
Event1
)而不是值(
221220014 13.26
)。这不是您应该做的。您可能需要像下面这样直接设置值

 prepState.setString(1, Event1);
 prepState.setString(2, Event2);
 prepState.setString(3, Event3);
 prepState.setString(4, Event4);
我建议您查看一个包含所有事件值的字符串文本列表。迭代它们,在准备好的语句中设置它们,然后执行查询

List<String> eventValues = new ArrayList<String>();
List eventValues=new ArrayList();

通过动态创建变量名,将计数器追加为
字符串
文本(
Event1
),并将其作为
字符串
输入设置到准备好的语句中,这是在制造混乱。实际上,您是在设置
字符串
文本,例如(
Event1
)而不是值(
221220014 13.26
)。这不是您应该做的。您可能需要像下面这样直接设置值

 prepState.setString(1, Event1);
 prepState.setString(2, Event2);
 prepState.setString(3, Event3);
 prepState.setString(4, Event4);
我建议您查看一个包含所有事件值的字符串文本列表。迭代它们,在准备好的语句中设置它们,然后执行查询

List<String> eventValues = new ArrayList<String>();
List eventValues=new ArrayList();

通过动态创建变量名,将计数器追加为
字符串
文本(
Event1
),并将其作为
字符串
输入设置到准备好的语句中,这是在制造混乱。实际上,您是在设置
字符串
文本,例如(
Event1
)而不是值(
221220014 13.26
)。这不是您应该做的。您可能需要像下面这样直接设置值

 prepState.setString(1, Event1);
 prepState.setString(2, Event2);
 prepState.setString(3, Event3);
 prepState.setString(4, Event4);
我建议您查看一个包含所有事件值的字符串文本列表。迭代它们,在准备好的语句中设置它们,然后执行查询

List<String> eventValues = new ArrayList<String>();
List eventValues=new ArrayList();

我相信您提到您已经尝试了arraylist,但它应该是这样的:

List<String> events=new ArrayList<String>();
    events.add("22122014 13.26");
    events.add("22122014 13.27");
    events.add("22122014 13.28");
    events.add("22122014 13.29");


     for (i=1; i<=timestoloop; i++)

     {           
        String pstatement = "Event"+i;
        System.out.println(pstatement);
        prepState.setString(i, events.get(i));
        prepState.addBatch();
     }
List events=new ArrayList();
事件。添加(“22122014 13.26”);
事件。添加(“22122014 13.27”);
事件。添加(“22122014 13.28”);
事件。添加(“22122014 13.29”);

对于(i=1;i我相信您提到您已经尝试了arraylist,但它应该是这样的:

List<String> events=new ArrayList<String>();
    events.add("22122014 13.26");
    events.add("22122014 13.27");
    events.add("22122014 13.28");
    events.add("22122014 13.29");


     for (i=1; i<=timestoloop; i++)

     {           
        String pstatement = "Event"+i;
        System.out.println(pstatement);
        prepState.setString(i, events.get(i));
        prepState.addBatch();
     }
List events=new ArrayList();
事件。添加(“22122014 13.26”);
事件。添加(“22122014 13.27”);
事件。添加(“22122014 13.28”);
事件。添加(“22122014 13.29”);

对于(i=1;i我相信您提到您已经尝试了arraylist,但它应该是这样的:

List<String> events=new ArrayList<String>();
    events.add("22122014 13.26");
    events.add("22122014 13.27");
    events.add("22122014 13.28");
    events.add("22122014 13.29");


     for (i=1; i<=timestoloop; i++)

     {           
        String pstatement = "Event"+i;
        System.out.println(pstatement);
        prepState.setString(i, events.get(i));
        prepState.addBatch();
     }
List events=new ArrayList();
事件。添加(“22122014 13.26”);
事件。添加(“22122014 13.27”);
事件。添加(“22122014 13.28”);
事件。添加(“22122014 13.29”);

对于(i=1;i我相信您提到您已经尝试了arraylist,但它应该是这样的:

List<String> events=new ArrayList<String>();
    events.add("22122014 13.26");
    events.add("22122014 13.27");
    events.add("22122014 13.28");
    events.add("22122014 13.29");


     for (i=1; i<=timestoloop; i++)

     {           
        String pstatement = "Event"+i;
        System.out.println(pstatement);
        prepState.setString(i, events.get(i));
        prepState.addBatch();
     }
List events=new ArrayList();
事件。添加(“22122014 13.26”);
事件。添加(“22122014 13.27”);
事件。添加(“22122014 13.28”);
事件。添加(“22122014 13.29”);

对于(i=1;i请共享更多关于表结构和准备语句及查询的代码。如果要在数据库中设置日期,则应创建时间戳并使用setTimestamp(),而不是setString()。setString()用于设置…字符串。使用
setString(1,“Event1”)
setString(1,Event1)不同
…那么我如何使用Event1而不是将Event1硬编码到代码中呢?请分享更多关于表结构和准备好的语句和查询的代码。如果要在数据库中设置日期,则应创建时间戳并使用setTimestamp(),而不是setString()。setString()用于设置…字符串。使用
setString(1,“Event1”)
setString(1,Event1)
不同,因此我如何使用Event1而不是将Event1硬编码到我的代码中?请共享更多关于表结构和准备语句及查询的代码。如果要在数据库中设置日期,则应创建时间戳并使用setTimestamp(),而不是setString().setString()用于设置…字符串。使用
setString(1,“Event1”)
setString(1,Event1)不同
…那么我如何使用Event1而不是将Event1硬编码到我的代码中呢?请分享更多关于表结构、准备好的语句和查询的代码。如果要在数据库中设置日期,则应创建时间戳并使用setTimestamp(),而不是setString()。setString()用于设置…字符串。使用
setString(1,“Event1“
不是