Java UCanAccess更新语句异常:";意外页面类型1“;

Java UCanAccess更新语句异常:";意外页面类型1“;,java,jdbc,ucanaccess,jackcess,Java,Jdbc,Ucanaccess,Jackcess,将Java与MS Access数据库结合使用, 添加和选择数据工作正常,但由于某些原因,我无法更新, 它不断抛出异常 net.ucanaccess.jdbc.UcanaccessSQLException:ucaex:::3.0.2意外页面类型1 我以前从未见过这种例外,谷歌搜索也没有什么帮助 首先是守则: public class DatabaseHandler { private static Connection conn = null; static PreparedStatement

将Java与MS Access数据库结合使用, 添加和选择数据工作正常,但由于某些原因,我无法更新, 它不断抛出异常

net.ucanaccess.jdbc.UcanaccessSQLException:ucaex:::3.0.2意外页面类型1

我以前从未见过这种例外,谷歌搜索也没有什么帮助

首先是守则:

public class DatabaseHandler {

private static Connection conn = null;
static PreparedStatement sqlState;
static ResultSet rs;

public static Connection connect() {

    try {
        //creating a connection
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        conn = (Connection) DriverManager.getConnection("jdbc:ucanaccess://src/salah_al_deen.accdb");
        System.out.println("Connected to the database");

    } catch (ClassNotFoundException | SQLException e) {
        System.out.println("Error: " + e.getMessage());
    }

    return conn;
}

static void prepareStatement(String query) {
    try {
        //create a statement using the connection created
        if (conn == null) {
            connect();
        }

        sqlState = conn.prepareStatement(query);
    } catch (SQLException ex) {
        System.out.println("Error: " + ex.getMessage());
    }
}

public static void close() {
    try {
        //close the connection and the statement
        sqlState.close();
        conn.close();
        System.out.println("Done");
        conn = null;
    } catch (SQLException ex) {
        System.out.println("Error:" + ex.getMessage());
    }

}}

例外情况:

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.2 Unexpected page type 1 (Db=salah_al_deen.accdb;Table=karate_clients;Index=class_id)
at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:95)
at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:315)
at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
at net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:161)
at net.ucanaccess.jdbc.Execute.execute(Execute.java:46)
at net.ucanaccess.jdbc.UcanaccessPreparedStatement.execute(UcanaccessPreparedStatement.java:228)
at client.general.database.UpdateDatabase.updateClient(UpdateDatabase.java:35)
at clients.view.main.ClientsMainController.activateAction(ClientsMainController.java:293)

Caused by: java.io.IOException: Unexpected page type 1 (Db=salah_al_deen.accdb;Table=karate_clients;Index=class_id)
at com.healthmarketscience.jackcess.impl.IndexData.isLeafPage(IndexData.java:1185)
at com.healthmarketscience.jackcess.impl.IndexData.readDataPage(IndexData.java:1067)
at com.healthmarketscience.jackcess.impl.IndexPageCache.readDataPage(IndexPageCache.java:267)
at com.healthmarketscience.jackcess.impl.IndexPageCache.getDataPage(IndexPageCache.java:224)
at com.healthmarketscience.jackcess.impl.IndexPageCache.access$600(IndexPageCache.java:38)
at com.healthmarketscience.jackcess.impl.IndexPageCache$DataPageMain.getChildPage(IndexPageCache.java:1250)
at com.healthmarketscience.jackcess.impl.IndexPageCache$DataPageMain.getChildPage(IndexPageCache.java:1234)
at com.healthmarketscience.jackcess.impl.IndexPageCache.findCacheDataPage(IndexPageCache.java:921)
at com.healthmarketscience.jackcess.impl.IndexData.findDataPage(IndexData.java:1256)
at com.healthmarketscience.jackcess.impl.IndexData.removeEntry(IndexData.java:740)
at com.healthmarketscience.jackcess.impl.IndexData.deleteRowImpl(IndexData.java:701)
at com.healthmarketscience.jackcess.impl.IndexData.prepareUpdateRow(IndexData.java:662)
at com.healthmarketscience.jackcess.impl.TableImpl.updateRow(TableImpl.java:1833)
at com.healthmarketscience.jackcess.impl.CursorImpl.updateCurrentRow(CursorImpl.java:268)
at net.ucanaccess.commands.UpdateCommand.persist(UpdateCommand.java:193)
at net.ucanaccess.commands.UpdateCommand.persistCurrentRow(UpdateCommand.java:122)
at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:86)
... 69 more

正如您从stacktrace中看到的,这是一个jackAccess错误,正在返回给UCanAccess。这本身不是UCanAccess问题

尝试在Access中打开数据库并执行“压缩并修复数据库”操作。如果这并不能解决这个问题,那么请考虑将这个问题重新标记为.

最常见的“意外页面类型”错误的修复是在Access中打开数据库并进行一个紧凑的和修复的数据库操作。
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.2 Unexpected page type 1 (Db=salah_al_deen.accdb;Table=karate_clients;Index=class_id)
at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:95)
at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:315)
at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
at net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:161)
at net.ucanaccess.jdbc.Execute.execute(Execute.java:46)
at net.ucanaccess.jdbc.UcanaccessPreparedStatement.execute(UcanaccessPreparedStatement.java:228)
at client.general.database.UpdateDatabase.updateClient(UpdateDatabase.java:35)
at clients.view.main.ClientsMainController.activateAction(ClientsMainController.java:293)

Caused by: java.io.IOException: Unexpected page type 1 (Db=salah_al_deen.accdb;Table=karate_clients;Index=class_id)
at com.healthmarketscience.jackcess.impl.IndexData.isLeafPage(IndexData.java:1185)
at com.healthmarketscience.jackcess.impl.IndexData.readDataPage(IndexData.java:1067)
at com.healthmarketscience.jackcess.impl.IndexPageCache.readDataPage(IndexPageCache.java:267)
at com.healthmarketscience.jackcess.impl.IndexPageCache.getDataPage(IndexPageCache.java:224)
at com.healthmarketscience.jackcess.impl.IndexPageCache.access$600(IndexPageCache.java:38)
at com.healthmarketscience.jackcess.impl.IndexPageCache$DataPageMain.getChildPage(IndexPageCache.java:1250)
at com.healthmarketscience.jackcess.impl.IndexPageCache$DataPageMain.getChildPage(IndexPageCache.java:1234)
at com.healthmarketscience.jackcess.impl.IndexPageCache.findCacheDataPage(IndexPageCache.java:921)
at com.healthmarketscience.jackcess.impl.IndexData.findDataPage(IndexData.java:1256)
at com.healthmarketscience.jackcess.impl.IndexData.removeEntry(IndexData.java:740)
at com.healthmarketscience.jackcess.impl.IndexData.deleteRowImpl(IndexData.java:701)
at com.healthmarketscience.jackcess.impl.IndexData.prepareUpdateRow(IndexData.java:662)
at com.healthmarketscience.jackcess.impl.TableImpl.updateRow(TableImpl.java:1833)
at com.healthmarketscience.jackcess.impl.CursorImpl.updateCurrentRow(CursorImpl.java:268)
at net.ucanaccess.commands.UpdateCommand.persist(UpdateCommand.java:193)
at net.ucanaccess.commands.UpdateCommand.persistCurrentRow(UpdateCommand.java:122)
at net.ucanaccess.commands.CompositeCommand.persist(CompositeCommand.java:86)
... 69 more