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/名字