android下数据库的创建(重点)
在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,也接受varchar(n)、char(n)、decimal(p,s) 等数据类型, SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略 name字段的类型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句 如:select * from person select * from person order by id desc select name from person group by name having count(*)>1 分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录 select * from Account limit 5 offset 3 或者 select * from Account limit 3,5 插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智’,3) 更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10 删除语句:delete from 表名 where 条件子句。如:delete from person where id=10 获取添加记录后自增长的ID值:SELECT last_insert_rowid()SQLiteOpenHelper:管理数据库的版本
在android应用程序中创建按数据库的步骤:
1、写一个DBHelper,继承了SQLiteOpenHelper,重新写了父类的构造方法、onCreate、onUpGrade: //创建数据库 DBHelper helper = new DBHelper(this, "account.db", null, 1); onCreate是在数据库创建的时候调用的,主要用来初始化数据表结构和插入数据初始化的记录 onUpGrade是在数据库版本升级的时候调用的,主要用来改变表结构 2、调用db = helper.getWritableDatabase(),得到数据对象 数据库sql语句的增删改查 创建表结构:create table person (id integer primary key autoincrement,name varchar(20)); 插入:insert into person (name)values("lisi"); 查询:select * from person; 更新:update person set name=\'wangwu\' where id=1 删除:delete from person where id=1 android下数据库的增删改查(重点)在android应用程序中使用db.execSQL("sql",bindArgs)操作增删改查语句;
1、创建表结构
public void create(View v){ db.execSQL("create table person (id integer primary key autoincrement,name varchar(20))", new Object[]{}); Toast.makeText(this, "创建表结构成功", 0).show(); }2、插入
public void insert(View v){ db.execSQL("insert into person (name)values(?)", new String[]{"lisi"}); Toast.makeText(this, "插入数据成功", 0).show(); }3、查询:
db.rawQuery,cursor类似于一个指针,当cursor指向一条记录时,就把当前记录的数据封装到cursor中,直接从cursor取数据 public void query(View v){ Cursor cursor = db.rawQuery("select * from person",null); //移动游标,返回值为true表示没有移动到数据集的最后(空),如果为false已经数据集的最后(没有数据了) while(cursor.moveToNext()){ int id = cursor.getInt(0); String name = cursor.getString(1); System.out.println("id="+id+";查询数据成功", 0).show(); }4、更新
public void update(View v){ db.execSQL("update person set name=\'wangwu\' where id=?", new Object[]{1}); Toast.makeText(this, "更新数据成功", 0).show(); }5、删除
public void delete(View v){ db.execSQL("delete from person where id=?", new Object[]{1}); Toast.makeText(this, "删除数据成功", 0).show(); } 数据库的另外一种增删改查方法(重点)使用google提供的另外一种方式操作数据库表:
1、插入数据 public void insert(View v){ //db.execSQL("insert into person (name)values(?)", new String[]{"lisi"}); ContentValues values = new ContentValues(); Random r = new Random(); values.put("name", "zhangsan"+r.nextInt(100)); long rowId = db.insert("person", null, values); System.out.println("rowId="+rowId); Toast.makeText(this, "插入数据成功", 0).show(); }2、查询数据
public void query(View v){ /** * table 表名 * columns 查询的列 * selection 查询条件"id=1" * selectionArgs 查询条件的值 * String groupBy * String having * String orderBy * */ Cursor cursor = db.query("person", new String[]{"id","name" }, null, null, null, null, null); while(cursor.moveToNext()){ int id = cursor.getInt(0); String name = cursor.getString(1); System.out.println("id="+id+";查询数据成功", 0).show(); } public void update(View v){ // db.execSQL("update person set name=\'wangwu\' where id=?", new Object[]{1}); //用来封装要修改的列名和值 ContentValues values = new ContentValues(); values.put("name", "wangwu"); db.update("person", values, "id=?", new String[]{"1"}); Toast.makeText(this, "更新数据成功", 0).show(); } public void delete(View v){ // db.execSQL("delete from person where id=?", new Object[]{1}); db.delete("person", "id=?", new String[]{"2"}); Toast.makeText(this, "删除数据成功", 0).show(); } 命令行查看数据库 使用adb shell进入模拟器或者手机的控制台; 使用cd切换到数据库文件所在的目录; 使用sqlite3 数据库文件的名称打开数据; 使用增删改查语句操作数据库。 数据库的事务(重点)什么是事务:同一组操作要么同时成功,要么同时失败;
zhangsan -> lisi 100yuan 1、zhangsan - 100 2、lisi + 100