1.普通的sql语句
2.crud直接写sql语句
3.curd占位符
* onUpgrade方法中实现
//当数据库的版本号变大时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "onUpgrade---oldVersion:" + oldVersion + "## newVersion:" + newVersion);
//升级修改数据库中内容,添加表
db.execSQL("create table info (id,name,phone)");
}
## 数据库的curd-直接写sql语句 ##
* 增
/**
* 指定用户名和金额插入一条记录
*
* @param name
* @param money
*/
public void insert(String name, float money) {
// 1.创建helper对象
// BankDBOpenHelper helper = new BankDBOpenHelper(context);
// 2.获得可读写数据库
SQLiteDatabase db = helper.getWritableDatabase();
String sql = "insert into account (name,money) values ('" + name + "',"
+ money + ")";
Log.d(TAG, sql);
// 3.执行插入sql语句
db.execSQL(sql);
}
* 删
// 删 delete from account where name='zhangsan'
/**
* 指定用户名,删除表中一行记录
*
* @param name
*/
public void delete(String name) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from account where name='" + name + "'");
}
* 改
// 改 update account set money=19.9 where name='zhangsan'
/**
* 指定用户名修改用户金额
*
* @param name
* @param money
*/
public void update(String name, float money) {
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update account set money=" + money + " where name='" + name
+ "'");
}
* 查
// 查 select money from account where name='zhangsan'
/**
* 指定用户查金额
* @param name
* @return -1表示未查到记录;正数,查出结果
*/
public float query(String name) {
SQLiteDatabase db = helper.getReadableDatabase();
// 调用rawQuery查询
Cursor cursor = db.rawQuery("select money from account where name='"
+ name + "'", null);
// cursor 游标,指针,提供移动到第一条记录,移动到下一条记录,移动到最后一条记录
// cursor.moveToFirst()
// cursor.moveToNext()
// cursor.moveToLast()
float money = -1;//-1表示未查到记录
//判断是否存在第一条数据
if(cursor.moveToFirst()){
//取出指定列的数据
//参数是以0为起点数组下标 money (0) name (1) id (2)
//money = cursor.getFloat(0);
money = cursor.getFloat(cursor.getColumnIndex("money"));
}
cursor.close();//cursor必须关闭,否则会有内存泄露(申请了没释放)。
return money;
}
## 内存有关错误说明 ##
* 内存溢出:要申请的内存比现有内存大,内存不够
* 内存泄露:申请内存空间,不再使用内存时,不释放
## curd-占位符 ##
* 改
// db.execSQL("update account set money=" + money + " where name='" + name
// + "'");
db.execSQL("update account set money=? where name=?", new Object[]{money,name});
* 插入
// String sql = "insert into account (name,money) values ('" + name + "',"
// + money + ")";
// 3.执行插入sql语句 ?占位符,表示此处应有数据
db.execSQL("insert into account (name,money) values (?,?)",new Object[]{name,money});
* 删
// db.execSQL("delete from account where name='" + name + "'");
db.execSQL("delete from account where name=?", new Object[]{name});
* 查
// 调用rawQuery查询
// Cursor cursor = db.rawQuery("select money from account where name='"
// + name + "'", null);
Cursor cursor = db.rawQuery("select money from account where name=?", new String[]{name});
## curd-谷歌api ##
* 增
// 3.执行插入sql语句 ?占位符,表示此处应有数据
//db.execSQL("insert into account (name,money) values (?,?)",new Object[]{name,money});
ContentValues values = new ContentValues();
values.put("name", name);
values.put("money", money);
/**
* 参数1 table 要插入表名
* 参数2 nullColumnHack 空列处理,一般null
* 参数3 values是一个map集合,key(列名)-value(列的值)
*/
long rowId = db.insert("account", null, values);
* 删
// db.execSQL("delete from account where name=?", new Object[]{name});
//account name=? new Object[]{name}
/**
* 参数1 表名
* 参数2 删除条件,where后面部分,带?占位符
* 参数3 删除条件中?对应数据
*/
int delete = db.delete("account", "name=?", new String[]{name});
* 改
//db.execSQL("update account set money=? where name=?", new Object[]{money,name});
ContentValues values = new ContentValues();
values.put("money", money);
// account money=?(contentValues集合保存) name=?
db.update("account", values , "name=?", new String[]{name});
* 查
//Cursor cursor = db.rawQuery("select money from account where name=?", new String[]{name});
//money,id account where name=?
/**
* 参数1 表名
* 参数2 字符串数组保存要查出哪些列
* 参数3 where后面条件,带?
* 参数4 where后面条件中占位符?,对应数据
* 参数5 null
* 参数6 null
* 参数7 null
*/
Cursor cursor = db.query("account", new String[]{"money","id"}, "name=?", new String[]{name}, null, null, null);