赞
踩
1.创建MyDBOpenHelper继承自SQLiteOpenHelper用来管理数据库
- public class MyDBOpenHelper extends SQLiteOpenHelper {
-
- public MyDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){
- super(context,name,null,version);
- }
-
- //数据库第一次创建时被调用
- //在数据库第一次创建时,添加已知需要创建的固定表格
- @Override
- public void onCreate(SQLiteDatabase sqLiteDatabase) {
- sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)");
- sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)");
-
- }
- //软件版本号发生改变时调用
- @Override
- public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
-
- }
- }

2.创建SQLManager数据库管理类,设置为单利
- public class SQLManager {
-
- private MyDBOpenHelper dbOpenHelper;
-
- public MyDBOpenHelper getDbOpenHelper() {
- return dbOpenHelper;
- }
-
- public void setDbOpenHelper(MyDBOpenHelper dbOpenHelper) {
- this.dbOpenHelper = dbOpenHelper;
- }
-
- // 内部类实现单利模式
- // 延迟加载,减少内存开销
- private static class SQLManagerHolder{
- private static SQLManager instance = new SQLManager();
- }
-
- // 私有的构造函数
- private SQLManager(){
-
- }
-
- public static SQLManager getInstance(){
- return SQLManagerHolder.instance;
- }
-
- }

3.首次使用时创建数据库
- private void initDataBase() {
- SQLManager sqlManager = SQLManager.getInstance();
- MyDBOpenHelper myDBOpenHelper = new MyDBOpenHelper(context,"my.db",null,1);
- sqlManager.setDbOpenHelper(myDBOpenHelper);
- }
4.进行增删改查数据库时从单利中获取
- private void deletePerson() {
- SQLManager sqlManager = SQLManager.getInstance();
- MyDBOpenHelper dbOpenHelper = sqlManager.getDbOpenHelper();
- SQLiteDatabase database = dbOpenHelper.getWritableDatabase();
- database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()});
- finish();
- }
获取到SQLiteDatabase后,使用该对象执行对应的SQL语句。
5.创建表格
- //数据库第一次创建时被调用
- @Override
- public void onCreate(SQLiteDatabase sqLiteDatabase) {
- sqLiteDatabase.execSQL("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR,money REAL,ratio REAL)");
- sqLiteDatabase.execSQL("CREATE TABLE record(id INTEGER PRIMARY KEY AUTOINCREMENT,time VARCHAR,money REAL,profit REAL,deduct REAL)");
-
- }
对于已知需要使用的表格在MyDBOpenHelper的onCreate的方法中进行创建。
以第一个persons表为例:
创建表名为persons的表,表中字段id为自动增长主键 int型使用INTEGER表示,name 字符串型使用VARCHAR表示,money 浮点型使用REAL表示。
6.往表格中添加数据
database.execSQL("INSERT INTO persons (name,money,ratio)values(?,?,?)", new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getRatio()});
对应的字段类型相对应。(database获取办法在第四步)
7.删除表格中的某条数据
database.execSQL("DELETE FROM persons WHERE id = ?",new String[]{mainModel.getId()});
表示根据id从persons表格中删除数据。
8.修改表格中的某条数据
database.execSQL("UPDATE persons SET name = ?,money = ? WHERE id = ?",new Object[]{mainModel.getName(),mainModel.getMoney(),mainModel.getId()});
修改persons表中id为当前获取mainModel的id的数据,重新设置name和money两个字段。
9.查询表格中数据
查询某一表格中所有数据
- List<MainModel> mainModels = new LinkedList<>();
- SQLiteDatabase database = myDBOpenHelper.getReadableDatabase();
- Cursor cursor = database.rawQuery("SELECT * FROM persons",null);
- //存在数据返回true
- while (cursor.moveToNext()){
- MainModel model = new MainModel();
- int id = cursor.getInt(cursor.getColumnIndex("id"));
- model.setId(String.valueOf(id));
- String name = cursor.getString(cursor.getColumnIndex("name"));
- model.setName(name);
- String money = cursor.getString(cursor.getColumnIndex("money"));
- model.setMoney(Float.valueOf(money));
- mainModels.add(model);
- }
根据条件查询数据
- Cursor cursor1 = database.rawQuery("SELECT * FROM persons WHERE id = ?", new String[]{"1"});
- //存在数据返回true
- float sum = 0.f;
- while (cursor1.moveToFirst()){
- MainModel model = new MainModel();
- int id = cursor1.getInt(cursor1.getColumnIndex("id"));
- model.setId(String.valueOf(id));
- String name = cursor1.getString(cursor1.getColumnIndex("name"));
- model.setName(name);
- }
因为主键是唯一的,所以查询的数据只有一条。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。