2017-08-24 125 views
1

我試圖從Java程序中創建一個新的MS Access表。 SQL查詢如下。我得到一個錯誤說:SQL異常:意外的標記 - UCanAccess

net.UcanacessSQLException:UCAExc ::: 4.0.1異常標記:REQ-MTI

PreparedStatement prepStmt; 

String createStmt = "CREATE TABLE [" + tableName + "] ([Test_Case_ID] CHAR (20) PRIMARY KEY, [Test_Name] CHAR (120)," 
    + " [Test_Description] CHAR (100), [Req-MTI] CHAR (15), [Req-Card_ID] CHAR (50), [Req-H19] CHAR (20));"; 

prepStmt = conn.prepareStatement(createStmt); 
prepStmt.executeUpdate(); 

我不能使用下劃線代替連字符。我試過把所有的表名放在方括號,引號等內,但似乎沒有任何工作。我已將生成的字符串粘貼到MS Access查詢中,並在那裏創建表格。

任何幫助,將不勝感激。謝謝!

+0

您可以向我們展示完整的代碼嗎? –

+0

更新了問題。 –

+0

可以請您使用,而不是''Req_MTI' REQ-MTI' –

回答

1

我能排序的UCanAccess 4.0.2下重現您的問題。它似乎被關於CHAR關鍵字的空格弄糊塗了。如果我將這些字段指定爲例如CHAR(20)而不是CHAR (20),則可以運行代碼。

編輯回覆:問題的更新

我能夠重現UCanAccess 4.0.1下的問題。解決方法是使用Statement而不是PreparedStatement來執行DDL。 (它甚至不是必要把空格去掉如上所述,至少在4.0.1。)

+0

我試過了,仍然收到相同的錯誤。我覺得這是UCanAccess方面的一個問題。 –

+0

@theKD - 請注意,我說「重新排序」。你問題中的repro代碼顯然不是你實際使用的代碼,因爲它甚至不能編譯:你的'createStmt'聲明格式不正確。請修正您的問題中的代碼。 (提示:複製粘貼是你的朋友。) –

+0

這是我使用的代碼,'createStmt'格式錯誤,因爲StackOverflow強制換行符。唯一的換行符應該在'+'之前。 –

1

如果列名稱包含除字母,數字和下劃線的任意字符,名稱必須由反引號(')

所以試着改變你的列名括起來定界:

`Req-MTI` 
+0

我會給它一個鏡頭,讓它知道它是否有效。 –

+0

嗨,我已經改變回引號,但我仍然得到相同的錯誤。 –