我们先讲解数据库的创建。
在android中我们通常会用到SQLiteOpenHelper来建立数据库,因为他书写简单,并且可以快速的升级数据库的版本。
下面我们对SQLiteOpenHelper进行一一解答:
创建一个数据库:
继承SQLiteOpenHelper
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
//这里的bank是数据库的表名;而"banke.db"是整个数据库的文件名;
private static final String sql = "create table bank(id integer primary key autoincrement ,name varchar , money integer)";
private static final String TAG = MySQLiteOpenHelper.class.getSimpleName();
public MySQLiteOpenHelper(Context context) {
//第二个参数是数据库文件名;
//第三个参数为 factory 游标工厂,null 表示使用默认的工厂;
//version 为版本号;
super(context, "banke.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate: enter");
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
下面我们对增删改查四个方法逐个讲解;
sql语句:
增:String sql = "insert into bank (name , money ) values(?,?)";
database.execSQL(sql, new Object[]{"apple", 1800});
删:String sql = "delete from bank where name = ?";
database.execSQL(sql, new Object[]{"apple"});
改:String sql = "update bank set money = ? where name =?";
database.execSQL(sql,new Object[]{1000,"apple"});
查:String sql = "select (money) from bank where name = ?";
Cursor cursor1 = database.rawQuery(sql, new String[]{"apple"});
首先我们讲-增;
使用方法有两种:每次使用时都要得到
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase mDatabase = mySql.getWritableDatabase();
//第一种方法:
/*
insert(String table, String nullColumnHack, ContentValues values);
String table 表示是数据表的表名(数据库的文件名不等于数据表的表名这点得弄清楚)
String nullColumnHack 当下面的values为null时有效这个参数才有效,表示强行插入null值
ContentValues values
*/
ContentValues values = new ContentValues();
values.put("name", "apple");
values.put("money", 4999);
mDatabase.insert("bank", null, values);
//第二种方法:
//sql语句中的bank时数据库的表名,values(?,?)里面的?号为占位符,这里的结果由execSQL中的new Object[]{}传入;
String sql = "insert into bank (name , money ) values(?,?)";
mDatabase.execSQL(sql, new Object[]{"apple", 1800});
mDatabase.close();
查
同样也是两种方法;
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase mDatabase = mySql.getWritableDatabase();
//第一种:
/*
String table 数据表的表名
String[] columns, 要查询出来的列名;
String selection, 相当于select语句where 后面的部分,可提供占位符,
String[] selectionArgs,为上一个占位符提供参数,
String groupBy,
String having,
String orderBy
*/
Cursor cursor = mDatabase.query("bank", new String[]{"money"}, "name = ?", new String[]{"HUAWEI"}, null, null, null);
//第二种:
//sql中 select 表示要查的内容 from 数据库表 where name = ? "?"号代表占位符; 下面这句话表示查询name为 ?的一整行数据;
String sql = "select (money) from bank where name = ?";
Cursor cursor1 = mDatabase.rawQuery(sql, new String[]{"apple"});
while (cursor1.moveToNext()) {
//int apple = cursor.getInt(cursor.getColumnIndex("money"));
int huawei = cursor1.getInt(cursor1.getColumnIndex("money"));
Log.d(TAG, "query: huawei = " + huawei);
}
cursor.close();
mDatabase.close();
//如果是要查询整张表那么select语句后面的where部分就不需要了,如下;
//查询整张表的所有内容;
String sql = "select * from bank";
Cursor cursor = database.rawQuery(sql, null);
删除
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase database = mySql.getWritableDatabase();
//public int delete(String table, String whereClause, String[] whereArgs) whereClause如果为null表示删除所有
int list = database.delete("bank", "name = ?", new String[]{"HUAWEI"});
//list 表示影响的行数,0表示没有删除成功
Log.d(TAG, "delete: list = " + list);
//这里表示删除name为apple的一行数据;
String sql = "delete from bank where name = ?";
database.execSQL(sql, new Object[]{"apple"});
//表示删除bank表中的所有数据;
String sql = "delete from bank";
database.execSQL(sql, new Object[]{});
database.close();
修改
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase database = mySql.getWritableDatabase();
// ContentValues values = new ContentValues();
// values.put("money", 55555);
// database.update("bank", values, "name = ?", new String[]{"apple"});
// 这里是指更新bank表中的name对应的money,where后面也可以指定id或表中对应的其它有的变量,如name;
String sql = "update bank set money = ? where name =?";
database.execSQL(sql,new Object[]{1000,"apple"});
database.close();
//如果要修改一行的所有数据那么使用update()api会比较省事。
// public int update(String table, ContentValues values, String whereClause, String[] whereArgs)
//whereClause为null的话表示更新整个表有数据的每一行;
database.update("bank", values, "id = ?", new String[]{"这里是所需要修改的行标"});