Java PreparedStatement使用问题

时间:2018-12-21 12:05:02

标签: java sql oracle prepared-statement

我遇到一个无法解决的问题,尝试过多次以尽最大努力。

我有一个具有以下结构的表X(由于“列”的拖放和创建):

A  String
B  Int
D  Int
C  Boolean
G  Boolean
E  Int
F  Boolean

我正在准备一个prepareStatement,尝试将数据插入上述列中

for (I=0 ; I < 5 ; I++) {
    pS = INSERT IN X (A, B, D, C, E ) Values (?,?,?,?,?);
    //Observer the query.

    pS.SetString (1,a);
    pS.SetString (2,100);
    pS.SetString (3,100);
    pS.SetString (4,0);
    pS.SetString (5,200);

    ps.AddBatch();
}
ps.executeBatch();

但是我遇到错误

  

java.sql.BatchUpdateException:ORA-12899:值对于列“ G”而言太大(实际:3,最大值:1)

即使我不想根据查询在G列中输入任何内容,为什么它也会尝试插入G列中。

2 个答案:

答案 0 :(得分:0)

您的代码中未插入

G; DDL中应具有默认值。 对于布尔值,请使用setBoolean或setInt。

// Column G  Boolean DEFAULT '0'

try (PreparedStatement pS = con.prepareStatement(
        "INSERT IN X (A, B, D, C, E) Values (?, ?, ?, ?, ?)")) {
    for (int I = 0; I < 5; I++) {
        pS.SetString(1, a);
        pS.SetInt(2, 100);
        pS.SetInt(3, 100);
        pS.SetBoolean(4, false);
        pS.SetInt(5, 200);

        pS.AddBatch();
    }
    pS.executeBatch();
}

答案 1 :(得分:0)

我认为您可以使用所有表键并只需设置所需的值

好像它有五个元素,现在您有七个,使用一组七个元素

for (I=0 ; I < 5 ; I++) {
    pS = INSERT IN X (A, B, C,D, E,F,G ) Values (?,?,?,?,?,?,?);
    //Observer the query.

    pS.SetString (1,a);
    pS.SetString (2,100);
    pS.SetString (3,100);
    pS.SetString (4,0);
    pS.SetString (5,200);
    pS.SetString (6,200);
    pS.SetString (7,200);

    ps.AddBatch();
}
ps.executeBatch();