由于想学习GreenDao框架,但是看了一下有的蒙圈,所以先熟悉一下android原生的SQLiteOpenHelper的使用工具:SQLite Expert Personal SQLite Expert Personal可以很直观的验证程序代码的正确性查看方式 然后找到 data -> data ->自己的项目报名-> *.db 然后导出来在用SQLite Expert Personal 就可以查看了SQLiteOpenHelper的使用首先创建一个继承在SQLiteOpenHelper的类,并重写onCreate()和onUpgrade()方法。程序运行先检测有没有这个数据库 如果没有调用 onCreate() 创建 onCreate() 创建表 onUpgrade 更新数据表的版本public static final String TAG = "database"; private static final String DATABASE_NAME = "test.db";//数据库名字 private static final int DATABASE_VERSION = 1;//数据库版本号 private static final String TABLE_BOOK_NAME = "book"; public String getTableName() { return TABLE_BOOK_NAME; } private static final String CREATE_BOOK_TABLE = "create table " + TABLE_BOOK_NAME + " (" + "id integer primary key autoincrement," + "book_name text, " + "author text, " + "price integer)";//创建数据库里的表的sql语句 public BookSQLOpenHelper(Context context) { this(context, DATABASE_NAME, null, DATABASE_VERSION); } public BookSQLOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { Log.i(TAG, "onCreate"); db.execSQL(CREATE_BOOK_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// String sql = "alter table person add sex varchar(8)";// db.execSQL(sql); String sql = "DROP TABLE IF EXISTS " + DATABASE_NAME; db.execSQL(sql); onCreate(db); }代码log然后实现写外部接口类 BookDao 去封装增删改查 插入方法public void add() { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into " + TABLE_NAME + " ( book_name, author, price) values ( '解忧杂货店', '东野圭吾', 10)"); db.execSQL("insert into " + TABLE_NAME + " ( book_name, author, price) values ('白夜行', '东野圭吾', 11)"); db.execSQL("insert into " + TABLE_NAME + " ( book_name, author, price) values ( 'x嫌疑人的替身', '东野圭吾', 12)"); }修改方法 public void update() { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("book_name", "怪人1"); values.put("author", "东野圭吾"); values.put("price", 15); db.update(TABLE_NAME, values, "book_name = ?", new String[]{"怪人"}); }删除方法 public void delete() { SQLiteDatabase db = helper.getWritableDatabase(); db.delete(TABLE_NAME, "id=?", new String[]{"2"}); }查询方法public void query() { SQLiteDatabase db = helper.getWritableDatabase(); Cursor query = db.query(TABLE_NAME, this.query, "author = ?", new String[]{"东野圭吾"}, null, null, null); query.isFirst(); int count = query.getCount(); Log.e(TAG, "getCount " + count); while (query.moveToNext()) { int bookNameIndex = query.getColumnIndex("book_name"); int authorIndex = query.getColumnIndex("author"); int priceIndex = query.getColumnIndex("price"); Log.e(TAG, " getColumnIndex : " + bookNameIndex + " , " + authorIndex + " , " + priceIndex); String bookName = query.getString(0); String author = query.getString(1); String price = query.getString(2); StringBuilder sb = new StringBuilder(); sb.append(bookName).append(" ").append(author).append(" ").append(price); Log.e(TAG, "getColumnName " + sb.toString()); } }//Cursor对象常用方法如下: c.move(int offset); //以当前位置为参考,移动到指定行 c.moveToFirst(); //移动到第一行 c.moveToLast(); //移动到最后一行 c.moveToPosition(int position); //移动到指定行 c.moveToPrevious(); //移动到前一行 c.moveToNext(); //移动到下一行 c.isFirst(); //是否指向第一条 c.isLast(); //是否指向最后一条 c.isBeforeFirst(); //是否指向第一条之前 c.isAfterLast(); //是否指向最后一条之后 c.isNull(int columnIndex); //指定列是否为空(列基数为0) c.isClosed(); //游标是否已关闭 c.getCount(); //总数据项数 c.getPosition(); //返回当前游标所指向的行数 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 c.getString(int columnIndex); //返回当前行指定列的值
SQLiteOpenHelper的简单使用
最新推荐文章于 2022-04-14 23:16:50 发布