Не удалось создать поле первичного ключа автоинкремента в ms-access с помощью 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);
        }

}
}  

Ошибка при создании таблицы --> net.ucanaccess.jdbc.UcanaccessSQLException: тип не найден или у пользователя отсутствуют привилегии: AUTOINCREMENT

Убедитесь, что вы используете последнюю версию UCanAccess, доступную здесь. .


person Dhinakar    schedule 04.11.2014    source источник


Ответы (1)


Я только что попробовал следующее с UCanAccess 2.0.9.1, и у меня это сработало.

Редактировать комментарий

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

UCanAccess 2.0.9.1 (и более поздние версии) также поддерживает значения ПО УМОЛЧАНИЮ для столбцов. Я только что проверил это, и это сработало:

Точно так же, когда я добавляю значение по умолчанию в столбец как s.executeUpdate(CREATE TABLE D_Centre (slNo AUTOINCREMENT PRIMARY KEY, Center VARCHAR(100) DEFAULT 'Chennai'));. Он не создает таблицу, а выдает ту же ошибку, что и выше.

s.executeUpdate(
        "CREATE TABLE D_Centre (" +
                "slNo AUTOINCREMENT PRIMARY KEY, " +
                "Centre VARCHAR(100) DEFAULT 'foo' " +
            ")");
person Gord Thompson    schedule 04.11.2014
comment
@Dhinakar Не знаю, у меня это работает (см. мой обновленный ответ). У вас есть последняя версия UCanAccess (на данный момент 2.0.9.2), верно? - person Dhinakar; 04.11.2014
comment
Ошибка: 04 ноября 2014 г. 15:39:28 org.DataEntryApplication.view.CreateTableAccess CreateAccessTable СЕРЬЕЗНОЕ: null net.ucanaccess.jdbc.UcanaccessSQLException: тип не найден или у пользователя отсутствуют привилегии: AUTOINCREMENT в сети. 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.mouseReleased(BasicButtonListener.java:252) в java.awt.Component.processMouseEvent(Component .java:6505) в javax.swing.JComponent.processMouseEvent(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.retargetMouseEvent(Container.java:4832) в java.awt.LightweightDispatcher.processMouseEvent(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.pumpEventsForFilter(EventDispatchThread.java:161) в java.awt.EventDispatchThread.pumpEventsForHierarchy(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.Abstr actExecute.executeBase(AbstractExecute.java:127) в net.ucanaccess.jdbc.ExecuteUpdate.execute(ExecuteUpdate.java:56) в net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:162) ... еще 41 - person Gord Thompson; 04.11.2014