由于想学习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