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 
 

猜你喜欢

转载自blog.csdn.net/u011555996/article/details/86134951