2016-07-26 166 views
1

我的Java項目不使用MySQL xampp服務器,而是決定使用Microsoft Access作爲我的數據庫,但在使用此語法的查詢中出現錯誤。這是我的Java代碼CREATE TABLE IF NOT EXISTS在UCanAccess中拋出錯誤

public static void main(String[] args) throws SQLException { 
     // TODO code application logic here 
     try { 
      conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Database.accdb;jackcessOpener=myproject.CryptCodecOpener","root", ""); 
      System.out.println("successfuly connected"); 
      Statement s = conn.createStatement(); 
      PreparedStatement state = conn.prepareStatement("CREATE TABLE IF NOT EXISTS test(name varchar(400))"); 
      state.executeUpdate(); 

} catch (SQLException e) { 
e.printStackTrace(); 
} 
    finally { 

     } 

以下是錯誤:

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 user lacks privilege or object not found: IF 
    at net.ucanaccess.jdbc.UcanaccessPreparedStatement.executeUpdate(UcanaccessPreparedStatement.java:256) 
    at myproject.MyProject.main(MyProject.java:31) 

使用IF NOT EXISTS在MySQL工作正常,但在UCanAccess我得到的錯誤,如果我刪除IF NOT EXISTS它工作正常。

+0

你是否有足夠的權限在數據庫中創建表? – Pirate

+0

爲什麼不直接使用HSQLDB? –

+0

是的。如果我像這樣刪除了IF NOT EXISTS ** CREATE TABLE TEST(「name varchar(250)」)**,它工作正常。 –

回答

2

UCanAccess在DDL語句中根本不支持IF NOT EXISTS。你應該可以這樣做:

try (Statement s = conn.createStatement()) { 
    s.execute("CREATE TABLE test (name TEXT(50))"); 
} catch (UcanaccessSQLException ex) { 
    if (ex.getMessage().indexOf("object name already exists:") > 0) { 
     System.out.println("INFO: Table already exists."); 
    } else { 
     throw ex; 
    } 
}