SQLiteOpenHelper的简单使用
由于想學習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); ??//返回當前行指定列的值 ?
原文:https://blog.csdn.net/wasneverlonely/article/details/79347892?
?
總結
以上是生活随笔為你收集整理的SQLiteOpenHelper的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Skip宏块与Direct预测模式浅析
- 下一篇: 编程巨星的唯一秘诀