确保Oracle按顺序插入语句

时间:2014-02-11 07:34:26

标签: oracle insert

我有一个ArrayList,假设有4行定义的顺序。我想相应地将这4行插入到Oracle表中。但奇怪的是,它进入了表格,但订单错误。

for (int x = 0; x < myArray.size(); x++) {
   //Some validation
   //insert statement
   MyJB myJB = (MyJB) myArray.get(x);
   String query = "insert into table X values(myJB.getColumn1,myJB.getColumn2)";
   log.debug(query);
   stmt = conn.prepareStatement(query);
   stmt.executeUpdate();
   stmt.close();
}

日志将显示正确的顺序,即从x = 0到x = 3。 但是从表X中选择*将产生4行但具有不同的顺序

如何强制Oracle将按照ArrayList中的正确顺序插入?

由于

  • ArrayList = row0,row1,row2,row3
  • 从表X = row2,row3,row0,row1
  • 中选择*

1 个答案:

答案 0 :(得分:1)

除非您定义排序顺序,否则不能依赖于元素的顺序。最好的方法是从序列和顺序创建主键。

或者您可以尝试oracle特定的rownum伪柱: http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm 但恕我直言,这不是你想要的。

修改

CREATE SEQUENCE mySequence;

PreparedStatement statement = conn.prepareStatement("insert into table XY values (mySequence.nextval, ?, ?)");
statement.setObject(1, myJB.getColumn1);
statement.setObject(2, myJB.getColumn2);
statement.executeUpdate();

然后

select * from XY order by Z asc

其中Z是第一列的名称将执行您想要的操作