大家好我正在一个个人项目,该项目需要与ms access 2016 db进行交互。我的Java应用程序从用户那里获取数据,并且此信息存储在Object []中。我试图将我的obj数组的元素插入到数据库中的表中。这是我的代码:
Connection conn = null;
PreparedStatement pstmnt = null;
String sql = null;
ResultSetMetaData md = null;
Statement stm = null;
ResultSet rs = null;
int i = 0;
String q = "SELECT * from QueryData";
try{
conn = DriverManager.getConnection("jdbc:ucanaccess://filePath");
stm = conn.createStatement();
rs = stm.executeQuery(q);
md = rs.getMetaData();
int count = md.getColumnCount();
String[] colName = new String[count];
for (int n = 1; n <= count; n++)
colName[n-1] = md.getColumnLabel(n);
while ( i <= data.length) {//data being the object array containing the data to be inserted in db
query = "INSERT into QueryData ('"+colName[i]+"') VALUES ('"+data[i]+"')";
//The following code is where I get the exception
pstmnt = conn.prepareStatement(query);
//some more code follows..
在while循环的第一遍中,colName [i]是“ logDate”,它是表中的第一个字段,而data [i]是格式为2016-12-23的LocalDate对象。我知道我没有关闭上面的while循环,也没有给出catch子句,但是我的程序没有通过pstmnt分配。我不断收到异常“ net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.7意外令牌:logDate”。
非常感谢您的协助,因为我已经在网上搜索了此论坛,但找不到适合我问题的解决方案。
最佳答案
您将列名用引号引起来,这是不允许的。您可以改用方括号(尽管不是真正必要的,除非在字段名称中有空格(Access允许),除非您有空格)。
query = "INSERT into QueryData (["+colName[i]+"]) VALUES ('"+data[i]+"')";
您可能还需要使用
#
而不是'
来分隔日期值。用于将#
用作日期分隔符的访问权限,我不确定是否有较新的版本接受'
:query = "INSERT into QueryData (["+colName[i]+"]) VALUES (#"+data[i]+"#)";