android SQLite数据的使用

  SQLite数据库是一个轻量级的数据库 、非常小 、 移植性好、效率高、可靠 ,功能齐全、嵌入式设备因为受到硬件条件的限制所以非常适合使用 SQLite 数据库,android提供了一系列操作SQLite数据库的类

1.SQLiteOpenHelper类,该类主要是创建和更新数据库使用

public class DBHelper extends SQLiteOpenHelper {
    private static DBHelper gInstance;
    private static final  String DATABASE_NAME = "xy.db";
    private DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        this(context, name, factory, version, null);
    }
    //name 数据库名、factory 用来创建对象游标,或者默认为null、 version数据版本 、errorHandler 当sqlite报告一个数据库毁坏错误时,DatabaseErrorHandler会被使用
    private DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

    public static synchronized DBHelper getInstance(Context context, SQLiteDatabase.CursorFactory factory, int version){
        if(gInstance == null){
            gInstance = new DBHelper(context, DATABASE_NAME, factory, version);
        }
        return gInstance;
    }

    public static synchronized DBHelper getInstance(Context context, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler){
        if(gInstance == null){
            gInstance = new DBHelper(context, DATABASE_NAME, factory, version, errorHandler);
        }
        return gInstance;
    }

    @Override//该方法只在创建时,被调用一次
    public void onCreate(SQLiteDatabase db) {
        //SQLiteDatabase 是操作数据库的增删改查的类
        //此处创建数据库
        db.execSQL("create table table1(_id integer, name varchar)");
    }

    @Override//当数据库的版本newVersion比oldVersion高时,此方法会本调用
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //oldVersion 上一次数据库的版本号,newVersion 新数据库的版本号
    }
}

  该类有两个获取数据库引用的方法,getWritableDatabase()和getReadableDatabase()。getWritableDatabase() 方法以写读方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库

  下面介绍一个小实例配合SQLiteDatabase类

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加数据"/>

    <Button
        android:id="@+id/delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删数据"/>

    <Button
        android:id="@+id/modify"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="改数据"/>

    <Button
        android:id="@+id/find"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查数据"/>

</LinearLayout>
public class MainActivity extends AppCompatActivity {

    private DBHelper mDbHelper;
    private SQLiteDatabase mDatabase;
    private int mId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDbHelper = DBHelper.getInstance(MainActivity.this, null, 1);
        mDatabase = mDbHelper.getReadableDatabase();
        MyOnClickListener listener = new MyOnClickListener();
        findViewById(R.id.add).setOnClickListener(listener);
        findViewById(R.id.delete).setOnClickListener(listener);
        findViewById(R.id.modify).setOnClickListener(listener);
        findViewById(R.id.find).setOnClickListener(listener);
    }

    class MyOnClickListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.add:
                    add();
                    break;
                case R.id.delete:
                    delete();
                    break;
                case R.id.modify:
                    modify();
                    break;
                case R.id.find:
                    find();
                    break;
            }
        }
    }

    private void find() {
        Cursor c = mDatabase.query("table1", null, null, null, null, null, null);
        if(c != null){
            while (c.moveToNext()){
                int id = c.getInt(c.getColumnIndex("_id"));
                String name = c.getString(c.getColumnIndex("name"));
                System.out.println("_id = " + id + " name = " + name);
            }
            c.close();
        }
    }

    private void modify() {
        ContentValues values = new ContentValues();
        values.put("_id", mId);
        values.put("name", "xiao"  + mId);
        int count = mDatabase.update("table1", values, "_id = ?", new String[]{String.valueOf(mId)});
        System.out.println("修改了"  + count + "条");
    }

    private void delete() {
        int count = mDatabase.delete("table1", "_id = ?", new String[]{String.valueOf(mId)});
        --mId;
        System.out.println("删除了" + count + "条");
    }

    private void add() {
        ContentValues values = new ContentValues();
        values.put("_id", mId);
        values.put("name", "wurui"  + mId);
        long id = mDatabase.insert("table1", null, values);
        System.out.println("成功添加一条 id为" + id);
        ++mId;
    }

    @Override
    protected void onDestroy() {
        if(mDatabase != null){
            mDatabase.close();
        }
        if(mDbHelper != null){
            mDbHelper.close();
        }
        super.onDestroy();
    }
}

  代码相对于简单,在此不过多介绍了,可以看到,增删改查,都是通过SQLiteDatabase类完成的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值