// 总结特定
// 1. openOrCreateDatabase()不需要调用
// 2. 封装了数据库的创建、升级的
// 3. 当需要获取SQLiteDatabase对象的时候 使用
// getReadableDatabase()、getWritableDatabase()即可
public class MyHelper extends SQLiteOpenHelper {
private static String DB_NAME = "scholar.db";
private static int VERSION = 1;
// SQLiteOpenHelper构造器的四个参数
// 参数1. 上下文
// 参数2. 数据库的名称("scholar.db")
// 参数3. 数据库Cursor的工厂。一般设置为null
// 参数4. 该数据库的版本号
public MyHelper(Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 当调用该方法时 数据库已经存在了
// 也就是说openOrCreateDatabase()不需要调用了
// 这里只需要创建表就可以了
String sql = "CREATE TABLE IF NOT EXISTS [user] ([u_name] TEXT(10), [u_age] INTEGER, [u_height] INTEGER);";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public DBUtils(Context context) {
this.context = context;
helper = new MyHelper(context);
}
// 往表中插入记录
// INSERT INTO user(字段1,字段2) VALUES(值1,值2);
// 返回值表示插入了多少条记录(0表示插入失败)
public long insert(ContentValues values) {
db = helper.getWritableDatabase();
return db.insert("user", // 第一个参数:表名
null, // 第二个参数:当插入的记录全部为空时 找一个不为空的字段。大部分情况下直接写null
values); // 要插入的实际值(ContentValues对象)
}
// 从表中删除记录
// DELETE FROM user WHERE 字段1=值1 AND 字段2=值2
// 返回值表示删除了多少条记录(0表示删除失败)
public int delete(String whereClause, String[] whereArgs) {
db = helper.getWritableDatabase();
return db.delete("user", // 第一个参数:表名
whereClause, // WHERE语句(具体的值可以使用?来代替)
whereArgs); // whereClause中的?会被这里具体的值所取代
}
// 更新表中的记录
// UPDATE user SET 字段1=值1,字段2=值2 WHERE 字段3=值3 AND 字段4=值4
// 返回值表示更新了多少条记录(0表示无更新)
public int update(ContentValues values, String whereClause, String[] whereArgs) {
db = helper.getWritableDatabase();
return db.update("user", // 第一个参数:表名
values, // 第二个参数:要更新的实际值(ContentValues对象)
whereClause, // WHERE语句(具体的值可以使用?来代替)
whereArgs); // whereClause中的?会被这里具体的值所取代
}
// 查询所有记录
// SELECT * FROM user
// 返回Cursor游标(描述数据库的数据)
public Cursor queryAll() {
db = helper.getReadableDatabase();
return db.query("user", null, null, null, null, null, null);
}
// 按条件查询
// SELECT * FROM user WHERE 字段1=值1 AND 字段2=值2
// 返回Cursor游标(描述数据库的数据)
public Cursor queryWhere(String selection, String[] selectionArgs) {
db = helper.getReadableDatabase();
return db.query("user", null, selection, selectionArgs, null, null, null);
}
// 按字段查询
// SELECT 字段1,字段2 FROM user
public Cursor queryField(String[] columns) {
db = helper.getReadableDatabase();
return db.query("user", columns, null, null, null, null, null); // columns表示要查询的字段
}
查询结果显示
Cursor cursor = dbutils.queryField(new String[]{"u_name", "u_age"});
// 遍历查询出来的每条记录
while(cursor.moveToNext()){
// 姓名
int columnIndex = cursor.getColumnIndex("u_name"); // 第几列
String name = cursor.getString(columnIndex);
// 年龄
columnIndex = cursor.getColumnIndex("u_age");
int age = cursor.getInt(columnIndex);
// 身高
//columnIndex = cursor.getColumnIndex("u_height");
//int height = cursor.getInt(columnIndex);
Log.i("DBUtils", "name: " + name + ", age:" + age);
}
Cursor cursor = dbutils.queryAll();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this, // 第一个参数:上下文
android.R.layout.simple_list_item_2, // 第二个参数:每行的布局
cursor, // 第三个参数:数据库数据(游标)
new String[] { "p_name", "p_height" }, // 第四个参数:
new int[] { android.R.id.text1, android.R.id.text2 }, // 第五个参数:布局中控件的id
0);
listview.setAdapter(adapter);