转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53316096
本文出自【DylanAndroid的博客】
在上一篇【玩转SQLite系列】(三)通过sql语句操作SQLite数据库中介绍了用sql语句来操作SQLite数据库,那么,就需要用户必须要由很熟练的sql语句拼写和sql语法的熟练掌握。
其实,在Android里面提供了相应的API来操作数据库,即使对sql不是很熟练,也能够很好的去操作SQLite数据库。
这篇文章介绍一下通过Android提供的API对数据库的以下操作:1.创建表
2.删除表
3.新增数据
4.修改数据
5.删除数据
6.查询数据
File dataBaseFile = new File(Environment.getExternalStorageDirectory() + "/sqlite", Contacts.DATABASE_NAME);
if (!dataBaseFile.getParentFile().exists()) {
dataBaseFile.mkdirs();
}
sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(dataBaseFile, null);
cd storage/emulated/legacy/sqlite
/**
* 1.创建数据表user
* 表名 user
* *数据表user表结构字段
* 主键:id
* 名字:name
* 年龄:age:
*
* @param v
*/
public void create(View v) {
String sql = "CREATE TABLE " +
"IF NOT EXISTS " +
"user(" +
"id Integer PRIMARY KEY AUTOINCREMENT," +
"name varchar," +
"age Integer)";
sqLiteDatabase.execSQL(sql);
}
我们通过 (sqlite3 info2).命令打开数据库,再执行(.table)命令查看数据表
/**
* 2.删除数据表user
*
* @param v
*/
public void drop(View v) {
String sql = "DROP TABLE " +
"IF EXISTS " +
"user";
sqLiteDatabase.execSQL(sql);
}
/**
* 3.给user表中新增一条数据
*
* long insert(String table, String nullColumnHack, ContentValues values)
* 第一个参数:数据库表名
* 第二个参数:当values参数为空或者里面没有内容的时候,
* insert是会失败的(底层数据库不允许插入一个空行),
* 为了防止这种情况,要在这里指定一个列名,
* 到时候如果发现将要插入的行为空行时,
* 就会将你指定的这个列名的值设为null,然后再向数据库中插入。
* 第三个参数:要插入的值
* 返回值:成功操作的行号,错误返回-1
*
* @param v
*/
public void insert(View v) {
String table = "user";
ContentValues contentValues = new ContentValues();
contentValues.put("name", "张三");
contentValues.put("age", 25);
long num = sqLiteDatabase.insert(table, null, contentValues);
if (num == -1) {
Toast.makeText(this, "插入失败", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "成功插入到第" + num + "行", Toast.LENGTH_SHORT).show();
}
}
我们通过select * from user;命令去查看一下数据库中内容
成功插入了两条数据
/**
* 4.修改user表中id为2的名字改成“李四”
*
* int update(String table, ContentValues values, String whereClause, String[] whereArgs)
* 第一个参数:表名
* 第二个参数:所要修改该的字段对应的值
* 第三个参数:修改的条件字段
* 第四个参数:修改的条件字段对应的值
* 返回值:影响的行数
*
* @param v
*/
public void update(View v) {
String table = "user";
ContentValues contentValues = new ContentValues();
contentValues.put("name", "李四");
String where = "id=2";
/**
* 方式一
*/
sqLiteDatabase.update(table, contentValues, where, null);
/**
* 方式二
*/
where = "id=?";
String[] whereArgs = new String[]{"2"};
int num = sqLiteDatabase.update(table, contentValues, where, whereArgs);
Toast.makeText(this, "修改了" + num + "行", Toast.LENGTH_SHORT).show();
}
我们来查看一下修改的结果
成功将id为2的姓名修改成了李四
/**
* 5.删除user表中id为2的记录
*
* int delete(String table, String whereClause, String[] whereArgs)
* 第一个参数:删除的表名
* 第二个参数:修改的条件的字段
* 第三个参数:修改的条件字段对应的值
* 返回值:影响的行数
*
* @param v
*/
public void delete(View v) {
String table = "user";
String where = "id=2";
sqLiteDatabase.delete(table, where, null);
where = "id=?";
String[] whereArgs = new String[]{"3"};
int num = sqLiteDatabase.delete(table, where, whereArgs);
Toast.makeText(this, "删除了" + num + "行", Toast.LENGTH_SHORT).show();
}
我们来查看一下删除的结果
成功将id为2的数据删除
/**
* 6.查询数据
*
* Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having,String orderBy)
* 第一个参数:表名
* 第二个参数:要查询的字段名
* 第三个参数:要查询的条件字段
* 第四个参数:要查询的条件字段对应的值
* 第五个参数:分组的字段
* 第六个参数:筛选的字段
* 第七个参数:排序的字段
* 返回值:游标
*
* @param v
*/
public void query(View v) {
String table = "user";
Cursor cursor = sqLiteDatabase.query(table, null, null, null, null, null, null);
if (cursor == null) {
return;
}
while (cursor.moveToNext()) {
Log.d(Contacts.TAG, "id=" + cursor.getInt(0) + ",name=" + cursor.getString(1) + ",age=" + cursor.getInt(2));
}
cursor.close();
}
我们通过Log来查看结果