Android SQLite数据库使用

SQLite是一种轻量级的数据库,存取数据非常快,非常适合移动设备的本地化存取数据。(Android系统中已经内置了SQLite数据库)

数据库的创建:

  • SQLiteOpenHelper,该类是Android提供给我们的便于管理数据库的一个抽象类,里面有两个主要的抽象方法需要我们在继承时进行重写。分别是onCreate():数据库创建时会调用;onUpgrade():数据库升级时调用。另外还提供数据库连接的方法:getReadableDatabase()、getWritableDatabase().上述方法在调用时,如果数据库不存在,则会创建新的数据库,调用onCreate()方法。如果已经存在,则只返回一个当前数据库的SQLiteDatabase对象,onCreate()方法不会调用。

  • getReadableDatabase():该方法得到的数据库对象,可以对其进行读写操作,磁盘空间不足时,数据库将会是只读状态。

  • getWritableDatabase():该方法得到的数据库对象同样可以进行读写操作,磁盘空间不足时,将抛出异常

  • SQLiteDatabase,该类是一个数据库访问类,用于对数据库增删改查的操作。

 

具体使用方法:

1、创建SQLite工具类:(初始化操作)

/**
 * SQLite 工具类
 *
 * 数据库操作的帮助类
 */
public class DBHelper  extends SQLiteOpenHelper {
    public DBHelper(@Nullable Context context, int version) {
        super(context, "feige.db", null, version);
    }

    /**
     * 什么时候才会创建建数据库文件?
     * 1)数据库文件不存在
     * 2)连接数据库
     *
     *
     * 什么时候调用?
     * 当数据库文件创建时调用(1次)
     * 在此方法中做什么?
     * 建表、插入一些初始化数据
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.e("TAG","DBHelper onCreate()");

        //建表
        String sql = "create table person( _id integer primary key autoincrement, name varchar, age int)";
        db.execSQL(sql);
        //插入一些数据
        //直接sql语句操作数据库表
        db.execSQL("insert into person(name,age) values('章散',25)");
        db.execSQL("insert into person(name,age) values('李四',30)");
    }


    /**
     * 当传入的版本号大于数据库库版本号时调用
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.e("TAG","DBHelper onUpgrade()");

    }
}

2、增删改查等操作

public class TestSQliteActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_sqlite);
    }


    /**
     * 创建库
     */
    public void testCreateDB(View v) {
        DBHelper dbHelper = new DBHelper(this, 1);
        //空间满的场合, 没法写入,也不报错(正常不会出现)
        //获取连接
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        //dbHelper.getWritableDatabase();
        //提示
        Toast.makeText(this, "创建数据库", Toast.LENGTH_SHORT).show();
    }

    /**
     * 更新库
     */
    public void testUpdateDB(View v) {
        DBHelper dbHelper = new DBHelper(this, 2);
        //获取连接
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        //提示
        Toast.makeText(this, "更新数据库", Toast.LENGTH_SHORT).show();
    }

    /**
     * 添加记录
     */
    public void testInsert(View v) {
        //1、得到连接
        DBHelper dbHelper = new DBHelper(this, 2);
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();
        //2、执行insert    insert into person(name,age) values('Tom',30)
        ContentValues values = new ContentValues();
        values.put("name", "Marry");
        values.put("age", 26);
        long id = sqLiteDatabase.insert("person", null, values);
        //直接sql语句操作数据库表
        //db.execSQL("insert into person(name,age) values('章散',25)");
        //3、关闭连接
        sqLiteDatabase.close();
        //4、提示
        Toast.makeText(this, "id = " + id, Toast.LENGTH_LONG).show();
    }

    /*
     * 更新
     */
    public void testUpdate(View v) {
        //1、获取连接
        DBHelper dbHelper = new DBHelper(this, 2);
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        //2、执行update

        // SQL语句:updata person set name = 'Jack',age=32 where _id =4;
        ContentValues values = new ContentValues();
        values.put("name", "Jack");
        values.put("age", 33);
        int updateCount = database.update("person", values, "_id=?", new String[]{"4"});
        //3、关闭连接
        database.close();
        //4、提示
        Toast.makeText(this, "更新数据---> updateCount = " + updateCount, Toast.LENGTH_LONG).show();
    }


    /*
     * 删除
     */
    public void testDelete(View v) {
        //1、获取连接
        DBHelper dbHelper = new DBHelper(this, 2);
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        //2、执行delete

        // SQL语句:delete from person where _id =4;
//        int deleteCount = database.delete("person", "_id=?", new String[]{"4"});
        //效果同上
        int deleteCount = database.delete("person", "_id = 4", null);
        //3、关闭连接
        database.close();
        //4、提示
        Toast.makeText(this, "删除数据---> deleteCount = " + deleteCount, Toast.LENGTH_LONG).show();
    }

    /*
     * 查询
     */
    public void testQuery(View v) {
        //1、获取连接
        DBHelper dbHelper = new DBHelper(this, 2);
        SQLiteDatabase database = dbHelper.getReadableDatabase();
        //2、执行select
//        Cursor cursor = database.rawQuery("select * from person where _id=? and name=?",new Object[]{id,name});
        // SQL语句:select * from person ;
        Cursor cursor = database.query("person", null, null, null, null, null, null);
//        Cursor cursor= database.query("person",null,"_id=?",new String[]{"3"},null,null,null);

        //得到匹配的总记录数
        int selectCount = cursor.getCount();
        //取出cursor的数据
        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            Log.e("TAG", id + " - " + name + " - " + age);
        }
        //3、关闭连接
        cursor.close();
        database.close();
        //4、提示
        Toast.makeText(this, "查询数据---> selectCount = " + selectCount, Toast.LENGTH_LONG).show();
    }


    /*
     * 测试事务处理
     */
    public void testTransaction(View v) {
        SQLiteDatabase database = null;
        try {
            // 获取连接
            DBHelper dbHelper = new DBHelper(this, 2);
            database = dbHelper.getReadableDatabase();
            //1、开启事务(获取连接后)
            database.beginTransaction();

            // SQL语句:updata person set name = 'Jack',age=32 where _id =4;
            ContentValues values = new ContentValues();
            values.put("age", 15);
            int updateCount = database.update("person", values, "_id=?", new String[]{"1"});
            Log.e("TAG", "updateCount = " + updateCount);

            boolean flag = true;
            if (flag) {
                throw new RuntimeException("运行异常");
            }

            values = new ContentValues();
            values.put("age", 43);

            int updateCount2 = database.update("person", values, "_id=?", new String[]{"3"});
            Log.e("TAG", "updateCount2 = " + updateCount2);

            //2、设置事务成功(在全部正常执行后)
            database.setTransactionSuccessful();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            Toast.makeText(this, "出异常了。。。", Toast.LENGTH_LONG).show();
            if (database != null) {
                //关闭事务
                database.endTransaction();
                //关闭连接
                database.close();
            }
        }
    }
}

TestSQliteActivity.java布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testCreateDB"
        android:text="Create DB" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testUpdateDB"
        android:text="Update DB" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testInsert"
        android:text="Insert" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testUpdate"
        android:text="Update" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testDelete"
        android:text="Delete" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testQuery"
        android:text="query" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="testTransaction"
        android:text="Test Transaction" />

</LinearLayout>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值