我有一个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中的正确顺序插入?
由于
答案 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是第一列的名称将执行您想要的操作