Android中SQLiteOpenHelper简单使用,解决database is locked

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


/**
 * 数据库操作助手类
 */
public class RFIDSQLiteOpenHelper extends SQLiteOpenHelper {

    public static String RFID_DISTINGUISH = "RFIDDistinguish";
    // 数据库名称
    public static final String DBNAME = "RFIDDistinguishSQL.db";
    // 数据库版本
    public static final int VERSION = 1;
    // 建表语句,大小写不敏感
    private static final String CREATETABLE = "create table "
            + RFID_DISTINGUISH
            + "(recordid string,content string,times string)";

    public RFIDSQLiteOpenHelper(Context context) {
        super(context, DBNAME, null, VERSION);
    }

    // 创建表
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATETABLE);
    }
    // 更新表
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        this.deleteDB(db);
        this.onCreate(db);
    }

    // 删除表
    private void deleteDB(SQLiteDatabase db) {
        db.execSQL("drop table if exists " + RFID_DISTINGUISH);
    }
}
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.rfid.RFIDDistinguishBean;

import java.util.ArrayList;

/**
 * 数据库管理类
 */
public class DatabaseManager {

    private RFIDSQLiteOpenHelper dbHelper;

    public DatabaseManager(Context context) {
        if (dbHelper==null){
            dbHelper = new RFIDSQLiteOpenHelper(context);
        }
    }

    // 插入记录
    public synchronized int insert(RFIDDistinguishBean contentBean) {
        Log.e("SQLite", "----insert----");
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        if (db.isOpen()){
            return 0;
        }
        db.beginTransaction();
        try {
            db.execSQL("insert into " + dbHelper.RFID_DISTINGUISH
                    + "(recordid,content,times)  values(?,?,?)",
                    new Object[] {contentBean.getRecordId(),contentBean.getContent(),contentBean.getTimes()});
            db.setTransactionSuccessful();
        } catch (Exception e) {
            return 0;
        } finally {
            db.endTransaction();
        }
        db.close();
        return 1;
    }

    // 删除记录
    public synchronized int delete(RFIDDistinguishBean contentBean){
        Log.e("SQLite", "----delete----");
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.beginTransaction();
        try {
            db.execSQL("delete from " + dbHelper.RFID_DISTINGUISH + " where recordid = ?",
                    new Object[] {contentBean.getRecordId()});
            db.setTransactionSuccessful();
        } catch (Exception e) {
            return 0;
        } finally {
            db.endTransaction();
        }
        db.close();
        return 1;
    }
    //清空表记录
    public synchronized void deleteHistoryName(){
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.beginTransaction();
        db.execSQL("delete from " + dbHelper.RFID_DISTINGUISH);
        db.setTransactionSuccessful();
        db.endTransaction();
        db.close();
    }
    public synchronized void deleteTable() {
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        database.beginTransaction();
        database.execSQL("drop table " + dbHelper.RFID_DISTINGUISH);
        database.setTransactionSuccessful();
        database.endTransaction();
        database.close();
    }

    // 更新记录
    public synchronized int update(RFIDDistinguishBean contentBean) {
        Log.e("SQLite", "----update----");
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        db.beginTransaction();
        try {
            db.execSQL("update " + dbHelper.RFID_DISTINGUISH
                    + " set recordid=? where content=?,times=? ",
                    new Object[] {contentBean.getRecordId(),contentBean.getContent(),contentBean.getTimes()});
            db.setTransactionSuccessful();
        } catch (Exception e) {
            return 0;
        } finally {
            db.endTransaction();
        }
        db.close();
        return 1;
    }

    // 查询记录
    public synchronized ArrayList<RFIDDistinguishBean> query(String id) {
        Log.e("SQLite", "----query----");
        ArrayList<RFIDDistinguishBean> list = new ArrayList<RFIDDistinguishBean>();
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        if (db.isOpen()){
            System.out.println("query:::is Open");
        }
        Cursor cursor;
        RFIDDistinguishBean distinguishBean;
        // 若fileId为null或""则查询所有记录
        if (id == null || id.equals("")) {
            cursor = db.rawQuery("select * from " + dbHelper.RFID_DISTINGUISH, null);
        } else {
            cursor = db.rawQuery("select * from " + dbHelper.RFID_DISTINGUISH
                    + " where recordid=?", new String[] { id });
        }
        while (cursor.moveToNext()) {
            distinguishBean = new RFIDDistinguishBean();
            String str = cursor.getString(cursor.getColumnIndex("content"));
            distinguishBean.setContent(str);
            String str2 = cursor.getString(cursor.getColumnIndex("times"));
            distinguishBean.setTimes(str2);
            String str3 = cursor.getString(cursor.getColumnIndex("recordid"));
            distinguishBean.setRecordId(str3);
            list.add(distinguishBean);
        }
        cursor.close();
        db.close();
        if (list.size() == 0) {
            Log.e("SQLite", "****表中无数据****");
        }
        return list;
    }
}

使用方法:

DatabaseManager databaseManager = new DatabaseManager(this);

databaseManager.databaseManager.query("");

遇到问题:SQLiteDatabaseLockedException: database is locked

1.SQLiteDatabase database = dbHelper.getWritableDatabase() 和SQLiteDatabase database = dbHelper.getReadableDatabase();调用这两个方法时后边一定要注意下边几个方法

database.setTransactionSuccessful();

database.endTransaction();-----如果有database.beginTransaction();需要加

database.close();-----重点:操作完数据库一定要记得关闭

参考网址:https://cloud.tencent.com/developer/article/1394216

发布了19 篇原创文章 · 获赞 15 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/aidou1314/article/details/104658591