安卓学习之路之SQlite数据库的增删改查

本文介绍了如何在Android应用中使用SQLiteOpenHelper类来创建和管理SQLite数据库,包括数据库的创建、表的创建、数据的增删改查等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简介:

SQlite数据库存储,显而易见,它就是用来存储数据的,一般数据是用来存储这些数据量大、结构性复杂的数据;

2:Android为我们提供了一个简单的工具类SQLiteOpenHelper,但是这个类是一个抽象类,所以想要用它,需要自己的工具类去继承它,并实现里面的方法.具体的代码如下:

public class MySqliteHelper extends SQLiteOpenHelper {
    public final static String NAME = "info.db";
    public final static int VERSION = 1;
    public final static String TABLENAME = "person";


    public MySqliteHelper(Context context) {
        super(context, NAME, null, VERSION);
    }

    /**
     * 只有当数据库第一次被创建的时候调用的方法
     * 可以在这个方法里创建一个表
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table person(_id integer primary key autoincrement,name varchar(16),age varchar(16))";
        db.execSQL(sql);
    }

    /**
     * 当数据库的版本升级的时候回调的方法
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 当数据库的版本降级的时候调用的方法
     * 一般不会使用
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        super.onDowngrade(db, oldVersion, newVersion);
    }

    /**
     * 打开数据库时,回调的方法
     * @param db
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.e("aa", "数据库打开了");
    }
}
必须要重写的方法,onCreate()和onUpgrade()还有一个构造方法,一般构造方法,选择一个参数少的即可,
第一个参数是Context,这个没什么好说的,必须要有
它才能对数据库进行操作。第二个参数是数据库名,创建数据库时使用的就是这里指定的名
称。第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。
第四个参数表示当前数据库的版本号, 可用于对数据库进行升级操作。构建出
SQLiteOpenHelper 的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方
法就能够创建数据库了,数据库文件会存放在/data/data/<package name>/databases/目录下。

值得注意的是只有当SQLiteOpenHelper 的实例创建以后,并调用getReadableDatabase()或getWritableDatabase()的方法的时候,onCreate()的方法才会执行.

一个表中至少有一个主键(primary key),一般情况下_id作为主键;

autoincrement 关键字表示自增长

下面是数据库的增删改查:

public class MainActivity extends AppCompatActivity {
    private MySqliteHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = new MySqliteHelper(this);
    }

    public void onclick(View view) {
        // helper.getReadableDatabase()创建一个数据库,如果有的话,就直接打开,并返回一个用来操作数据库的类
        //用来操作数据库的类
        SQLiteDatabase database = helper.getReadableDatabase();
        SQLiteDatabase database1 = helper.getReadableDatabase();
        //通过打印发现这个对象其实是一样的;
        Log.e("ss", "" + database);
        Log.e("ss", "" + database1);
        
        switch (view.getId()) {
            case R.id.bt_create:
                Log.e("aa", "数据库创建了");

                break;
            case R.id.bt_add:
                //增加的方法
                for (int i = 0; i < 30; i++) {
                    ContentValues values = new ContentValues();
                    values.put("name","zhangsan"+i);
                    values.put("age", "2" + i);
                    //把数据封装到ContentValues的对象里面
                    database.insert(MySqliteHelper.TABLENAME, null, values);
                }
                break;
            case R.id.bt_quary:
                //查找的方法
                //MySqliteHelper.TABLENAME在自己的工具类中声明的表名
                Cursor cursor = database.query(MySqliteHelper.TABLENAME, null, null, null, null, null, null);
//                boolean isFirst = cursor.moveToFirst();
                
                while (cursor.moveToNext()) {
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String age = cursor.getString(cursor.getColumnIndex("age"));
                    Log.e("name", "" + name);
                    Log.e("age", "" + age);
                }
                break;
            case R.id.bt_update:
                //更新的方法
                ContentValues values = new ContentValues();
                values.put("name", "nihao");
                database.update(MySqliteHelper.TABLENAME, values,"_id = ?", new String[]{"1"});
                //这里的? 是个占位符,其实是表示String数据的具体要修改的值
                break;
            case R.id.bt_delete:
                //删除的方法
                database.delete(MySqliteHelper.TABLENAME, "_id = ?", new String[]{"1"});
                break;

        }
        Log.e("aa", "数据库关闭了");
        //注意的是每次操作完,记得把数据库关闭
        database.close();
    }

}
还有一点要注意的是

getReadableDatabase() 和
getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在
则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不
同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对
象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值