数据存储-SQLiteOpenHelper

发布于:2024-05-09 ⋅ 阅读:(26) ⋅ 点赞:(0)

SQLiteOpenHelper数据库操作辅助类,本身是一个抽象类,抽象类无法直接实例化,所以通常都会自定义类,去继承抽象类,然后再实例化自定义的类。

public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table mytest(id integer"
                +" primary key autoincrement,"
                +" myusername varchar(10),"
                +" mypwd varchar(6))";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i("【数据库升级】", "onUpgrade: 数据库升级了");
    }
}

继承SQLiteOpenHelper抽象类后,必须要重新两个方法,onCreate和onUpgrade,第一个方法主要用于创建数据库表。第二个方法主要用于数据库版本升级。

还必须实现构造方法,系统提供了三个,一般选择带版本号的这一个即可。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button add;
    Button delete;
    Button update;
    Button query;

    MyHelper db = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        add = findViewById(R.id.add);
        delete = findViewById(R.id.delete);
        update = findViewById(R.id.update);
        query = findViewById(R.id.query);

        delete.setOnClickListener(this);
        add.setOnClickListener(this);
        update.setOnClickListener(this);
        query.setOnClickListener(this);

        db = new MyHelper(this, this.getFilesDir().toString() + "/my.db3", null, 1);
    }

    @Override
    public void onClick(View v) {
        int vId = v.getId();
        if (vId == R.id.add) {
            for (int i = 0; i < 5; i++) {
                String addSql = "insert into mytest values(" + i + ",'张三', '123')";
                db.getReadableDatabase().execSQL(addSql);
            }
            Toast.makeText(this, "添加5条数据成功", Toast.LENGTH_SHORT).show();
        } else if (vId == R.id.delete) {
            String delSql = "delete from mytest";
            db.getReadableDatabase().execSQL(delSql);
            Toast.makeText(this, "删除所有数据", Toast.LENGTH_SHORT).show();
        } else if (vId == R.id.update) {
            ContentValues content = new ContentValues();
            content.put("myusername", "李四");
            String a = "id=1";
            db.getWritableDatabase().update("mytest", content, a, null);
            Toast.makeText(this, "更新一条数据", Toast.LENGTH_SHORT).show();
        } else if (vId == R.id.query) {
            String querySql = "select * from mytest";
            Cursor cursor = db.getWritableDatabase().rawQuery(querySql, null);
            while (cursor.moveToNext()) {
                int dataId = cursor.getInt(0);
                String dataName = cursor.getString(1);
                String dataPwd = cursor.getString(2);
                Log.i("【查询结果】", "id->" + dataId + ",name->" + dataName + ",pwd->" + dataPwd);
            }
            Toast.makeText(this, "查询完成,请查看日志信息", Toast.LENGTH_SHORT).show();
        }
    }
}

这里做的比较粗糙,直接使用循环产生5条数据,并插入到数据库中;删除是至极删除所有表中的数据;更新是将id为1的人的姓名改为李四;查询是遍历所有的数据库数据,并打印在日志信息中。

实际开发中,涉及到数据的地方,都可以改为用户输入,然后获取用户输入的信息,再入库;读取出来的数据也可以结合ListView或者其他高级控件再进行显示即可。

效果

SQLite辅助类

文件存储位置:data/data/包名/files/名字


网站公告

今日签到

点亮在社区的每一天
去签到