UCAExc ::: 3.0.7意外令牌:logDate

时间:2016-12-23 07:00:20

标签: java ms-access ucanaccess

美好的一天,所有。我正在开发一个需要与ms访问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]是&#34; logDate&#34;这是表中的第一个字段,data [i]是格式为2016-12-23的LocalDate对象。我知道我没有关闭上面的while循环,也没有给出catch子句,但我的程序没有超过pstmnt赋值。我一直得到异常&#34; net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.7意外令牌:logDate&#34;。

我会非常感谢任何帮助,因为我已经在网上浏览了这个论坛,但找不到解决问题的方法。

1 个答案:

答案 0 :(得分:2)

您使用引号包围列名称,这是不允许的。您可以使用方括号(尽管不是必需的,除非您在字段名称中有空格,Access允许)。

query = "INSERT into QueryData (["+colName[i]+"]) VALUES ('"+data[i]+"')";

可能还需要使用#代替'来分隔日期值。曾经使用#访问日期分隔符,我不确定更新版本是否接受'

query = "INSERT into QueryData (["+colName[i]+"]) VALUES (#"+data[i]+"#)";