All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sqlite.BusyHandler Maven / Gradle / Ivy

There is a newer version: 3.32.3.8
Show newest version
package org.sqlite;

import java.sql.Connection;
import java.sql.SQLException;

/**
 *
 * https://www.sqlite.org/c3ref/busy_handler.html
 */
public abstract class BusyHandler {
    
    /**
     * commit the busy handler for the connection.
     *
     * @param conn the SQLite connection
     * @param busyHandler the busyHandler
     * @throws SQLException
     */
    private static void commitHandler(Connection conn, BusyHandler busyHandler) throws SQLException {
        
        if (conn == null || !(conn instanceof SQLiteConnection)) {
            throw new SQLException("connection must be to an SQLite db");
        }
        
        if (conn.isClosed()) {
            throw new SQLException("connection closed");
        }
        
        SQLiteConnection sqliteConnection = (SQLiteConnection) conn;
        sqliteConnection.getDatabase().busy_handler(busyHandler);
    }
    
    /**
     * Sets a busy handler for the connection.
     *
     * @param conn the SQLite connection
     * @param busyHandler the busyHandler
     * @throws SQLException
     */
    public static final void setHandler(Connection conn, BusyHandler busyHandler) throws SQLException {
        commitHandler(conn, busyHandler);
    }

    /**
     * Clears any busy handler registered with the connection.
     *
     * @param conn the SQLite connection
     * @throws SQLException
     */
    public static final void clearHandler(Connection conn) throws SQLException {
        commitHandler(conn, null);
    }

    /**
     * https://www.sqlite.org/c3ref/busy_handler.html
     *
     * @param nbPrevInvok number of times that the busy handler has been invoked previously for the same locking event
     * @throws SQLException
     * @return If the busy callback returns 0, then no additional attempts are made to access the database and SQLITE_BUSY is returned to the application. If the callback returns non-zero, then another attempt is made to access the database and the cycle repeats.
     */
    protected abstract int callback(int nbPrevInvok) throws SQLException;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy