Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用java在ms access中创建自动增量主键字段_Java_Ms Access 2007_Ucanaccess - Fatal编程技术网

无法使用java在ms access中创建自动增量主键字段

无法使用java在ms access中创建自动增量主键字段,java,ms-access-2007,ucanaccess,Java,Ms Access 2007,Ucanaccess,我需要创建一个带有autoincrement主键列的表>,我尝试了以下代码,但它抛出了错误 我的代码: CreateTableAccess.CreateAccessTable("CREATE TABLE D_Centre\n" + "(\n" + " SlNo AUTOINCREMENT,\n" + " CentreID VARCHAR,\n" + " CentreName

我需要创建一个带有autoincrement主键列的表>,我尝试了以下代码,但它抛出了错误

我的代码:

     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 严重:空 net.ucanaccess.jdbc.UcanaccessSQLException:找不到类型或用户缺少权限:自动增量 位于net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:164) 位于org.DataEntryApplication.view.CreateTableAccess.CreateAccessTable(CreateTableAccess.java:53) 在org.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) 在javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:2018) 位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402) 在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259) 在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252) 位于java.awt.Component.ProcessMouseeEvent(Component.java:6505) 位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3320) 位于java.awt.Component.processEvent(Component.java:6270) 位于java.awt.Container.processEvent(Container.java:2229) 位于java.awt.Component.dispatchEventImpl(Component.java:4861) 位于java.awt.Container.dispatchEventImpl(Container.java:2287) 位于java.awt.Component.dispatchEvent(Component.java:4687) 位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4832) 位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4492) 位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 位于java.awt.Container.dispatchEventImpl(Container.java:2273) 位于java.awt.Window.dispatchEventImpl(Window.java:2719) 位于java.awt.Component.dispatchEvent(Component.java:4687) 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 在java.awt.EventQueue.access$200(EventQueue.java:103) 位于java.awt.EventQueue$3.run(EventQueue.java:694) 在java.awt.EventQueue$3.run(EventQueue.java:692) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在java.awt.EventQueue$4.run(EventQueue.java:708) 在java.awt.EventQueue$4.run(EventQueue.java:706) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 原因:java.sql.SQLException:找不到类型或用户缺少权限:AUTOINCREMENT 位于net.ucanaccess.jdbc.AbstractExecute.addDDLCommand(AbstractExecute.java:105) 位于net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:127) 在net.ucanaccess.jdbc.ExecuteUpdate.execute(ExecuteUpdate.java:56) 位于net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:162) ... 41多


创建表时出错-->net.ucanaccess.jdbc.UcanaccessSQLException:找不到类型或用户缺乏权限:AUTOINCREMENT

确保您使用的是可用的最新版本的ucanaccess

我刚刚用UCanAccess 2.0.9.1尝试了以下内容,效果很好

s.executeUpdate(
“创建表格D_中心(”+
slNo自动递增主键+
“中心ID VARCHAR(100)”+
")");
编辑回复:评论

UCanAccess 2.0.9.1(及更高版本)也支持列的默认值。我刚刚测试了这个,它成功了:

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

类似地,当我向列添加默认值作为s.executeUpdate(“创建表D_center(slNo自动递增主键,center VARCHAR(100)默认'Chennai')”)时;。它不是在创建表,而是抛出与above@Dhinakar我不知道,它对我有效(见我更新的答案)。您有最新版本的UCanAccess(目前为2.0.9.2),对吗?