jdbc INSERT到MS Access表,其主键是自动编号

时间:2013-10-07 21:19:41

标签: java ms-access jdbc

我正在尝试使用来自eclipse的jdbc:odbc连接将数据插入MS Access数据库。我收到一条错误消息:

java.lang.ArrayIndexOutOfBoundsException 4  

我很确定问题是我正在跳过基础表中的自动编号字段(第一个索引)。我想我应该跳过它因为Access会填充它。因此,如果基础表有5个字段,我创建以下带有四个?的preparedStatement,尝试引用字段2,3,4和5.

PreparedStatement ps = con.prepareStatement("INSERT INTO someTable VALUES (?, ?, ?, ?");  
//code then populates each field, starting with index 2
ps.setString(2,"Thunder");
//...

我的方法似乎是错误的。但是,添加额外的?似乎只会产生其他问题。当表有一个自动编号主键作为其第一个字段时,将INSERT语句写入MS Access数据库中的表的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

SQL字符串中?占位符的索引独立于表中的列声明

PreparedStatement ps = con.prepareStatement("INSERT INTO someTable VALUES (?, ?, ?, ?");  

你需要从1到4。

如果您希望它们与列匹配,则需要指定其名称

PreparedStatement ps = con.prepareStatement("INSERT INTO someTable (col1, col2, col3, col4) VALUES (?, ?, ?, ?");  

您再次需要使用1到4作为索引,但现在您可以指定实际使用的列。

如果您想跳过第一列,因为它是auto_increment,您可以这样做,但您仍然需要在1处开始索引,并达到您拥有的占位符数量。