2016-12-23 2 views
0

おはようございます。私はmsアクセス2016 dbと対話する必要がある個人的なプロジェクトに取り組んでいます。私のJavaアプリケーションはユーザーからデータを取得し、この情報はObject []に格納されます。私は私のdbのテーブルに私のobj配列の要素を挿入しようとしています。 whileループは、colNameに[i]が[I] LOCALDATEオブジェクトは2016-としてフォーマットされているテーブルデータの最初のフィールドである「LOGDATE」であるthrought最初のパスでUCAExc ::: 3.0.7予期しないトークン:logDate

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.. 

:これは私のコードであります12-23。私は上記のwhileループを閉じなかったし、catch節を与えなかったが、私のプログラムはpstmnt割り当てを過ぎて実行されないことを知っている。私は例外 "net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.7予期しないトークン:logDate"を取得し続けます。

私はこのフォーラムでウェブを精査したが、私の問題の解決策を見つけることができなかったので、助力をいただければ幸いです。

答えて

2

カラム名を引用符で囲んでいますが、これは許可されていません。代わりに大括弧を使用することができます(ただし、アクセスで許可されているフィールド名にスペースがない場合は、実際は必要ありません)。

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

あなたは、日付の値を区切るために#の代わり'を使用する必要があります。アクセスは、日付の区切り文字の#を使用するために使用され、より多くの最近のバージョンは'を受け入れるかどうかはわからない:

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

感謝フィリップ。これは私の問題を解決しました。私はプログラミングとデータベースの両方に対して非常に新しいです。 – user3452354

関連する問題