簡體   English   中英

無法使用java在ms-access中創建自動增量主鍵字段

[英]Not able to create Autoincrement primary key field in ms-access using java

我需要創建一個帶有自動增量主鍵列的表>我嘗試使用以下代碼,但它會拋出錯誤。

我的代碼:

     CreateTableAccess.CreateAccessTable("CREATE TABLE D_Centre\n"
            + "(\n"
            + "    SlNo AUTOINCREMENT,\n"
            + "    CentreID VARCHAR,\n"
            + "    CentreName VARCHAR,\n"
            + "    [Createddate] DateTime,  \n"
            + "    CreatedBy VARCHAR, \n"
            + "    [Updateddate] DateTime\n"
           + ")", "D_Centre");


    public static void CreateAccessTable(String sqlscript, String tablename )
{
    String dbFileSpec = DataEntryScreen.homedirectory+"/"+"Dataentry.accdb";
    Connection conn = null ;
    try {
        conn = DriverManager.getConnection("jdbc:ucanaccess://" + dbFileSpec);
    } catch (SQLException ex) {
        Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
    }
        DatabaseMetaData dmd = null;
    try {
        dmd = conn.getMetaData();
    } catch (SQLException ex) {
        Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
    }
            ResultSet rs = null;
    try {
        rs = dmd.getTables(null, null, tablename , new String[]{"TABLE"});
    } catch (SQLException ex) {
        Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
    }
        // }
        {
        try {
            if (rs.next()) {
                System.out.println("Table ["+tablename+"] already exists.");
            } else {
                System.out.println("Table ["+tablename+"] does not exist.");
                Statement s = conn.createStatement();
                  s.executeUpdate(sqlscript);
                System.out.println("Table ["+tablename+"] created.");
            }
        } catch (SQLException ex) {
            Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("Error in table creation  --> "+ex.toString());
        }
        try {
            conn.commit();
        } catch (SQLException ex) {
            Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
        }

}
}  

錯誤: 2014年11月4日下午3:39:28 org.DataEntryApplication.view.CreateTableAccess CreateAccessTable SEVERE:null net.ucanaccess.jdbc.UcanaccessSQLException:未找到類型或用戶缺少權限:net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate中的AUTOINCREMENT (UcanaccessStatement.java:164)org.DataEntryApplication.view.CreateTableAccess.CreateAccessTable(CreateTableAccess.java:53)atg.DataEntryApplication.view.AccessProcess.accessProcess(AccessProcess.java:40)org.DataEntryApplication.view.DataEntryScreen。 addComponentsToPane(DataEntryScreen.java:188)位於org.DataEntryApplication.view.DataEntryScreen.createAndShowGUI(DataEntryScreen.java:1092)org.DataEntryApplication.view.Login $ 7.actionPerformed(Login.java:277)at javax.swing.AbstractButton。 fireActionPerformed(AbstractButton.java:2018)javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2341)at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)at javax.swing.DefaultBut tonModel.setPressed(DefaultButtonModel.java:259)位於javax.swing.JComponent的java.awt.Component.processMouseEvent(Component.java:6505)的javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) .processMouseEvent(JComponent.java:3320)位於java.awt.Component的一個java.awt.Component上的java.awt.Component.processEvent(Component.java:6270)中的java.awt.Component。 java:4861)at java.awt.Container.dispatchEventImpl(Container.java:2287)at java.awt.Component.dispatchEvent(Component.java:4687)at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)at at java.awt.LindweightDispatcher.processMouseEvent(Container.java:4492),java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422),位於java.awt.Window的java.awt.Container.dispatchEventImpl(Container.java:2273)位於java.awt.EventQueue.dispatchEventImpl的java.awt.Component.dispatchEvent(Component.java:4687)中的.dispatchEventImpl(Window.java:2719)(EventQueue.ja va:735)java.awt.EventQueue.access $ 200(EventQueue.java:103)java.awt.EventQueue $ 3.run(EventQueue.java:694)at java.awt.EventQueue $ 3.run(EventQueue.java: 692)在java.security.ProtectionDomain上的java.security.AccessController.doPrivileged(Native Method)$ java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)java.awt上的java.security.Protevilege $ 1.doIntersectionPrivilege(ProtectionDomain.java:87) .EventQueue $ 4.run(EventQueue.java:708)java.awt.EventQueue $ 4.run(EventQueue.java:706)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ 1.doIntersectionPrivilege( ProtectionDomain.java:76)在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)的java.awt.EventQueue.dispatchEvent(EventQueue.java:705)java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) )java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)at java.awt.EventDispatchThread.pumpEvents(Ev) entDispatchThread.java:146)java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)引起:java.sql.SQLException:未找到類型或用戶缺少權限:net.ucanaccess.jdbc.AbstractExecute.addDDLCommand(AbstractExecute.java:105)上的net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:127)的net.ucanaccess.jdbc.ExecuteUpdate.execute(ExecuteUpdate)中的AUTOINCREMENT .java:56)at net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:162)... 41更多

表創建錯誤 - > net.ucanaccess.jdbc.UcanaccessSQLException:未找到類型或用戶缺少權限:AUTOINCREMENT

確保您使用的是最新版本的UCanAccess的,可在這里

我只是嘗試了以下UCanAccess 2.0.9.1,它對我來說很好。

s.executeUpdate(
        "CREATE TABLE D_Centre (" +
                "slNo AUTOINCREMENT PRIMARY KEY, " +
                "CentreID VARCHAR(100) " +
            ")");

編輯重新:評論

UCanAccess 2.0.9.1(及更高版本)也支持列的DEFAULT值。 我剛測試了這個並且它有效:

s.executeUpdate(
        "CREATE TABLE D_Centre (" +
                "slNo AUTOINCREMENT PRIMARY KEY, " +
                "Centre VARCHAR(100) DEFAULT 'foo' " +
            ")");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM