【andorid基础篇】数据库的创建以及增删改查

I,安卓下的数据库

安卓下使用的数据库是SQLite,安卓为我们提供的API是SQLiteOpenHelper。

1,创建一个数据库

1)写一类去继承抽象类SQLiteOpenHelper,我们需要复写相关的方法:

 1 public WcxSQLite(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version); 3 } 4 5 public void onCreate(SQLiteDatabase db) { 6 7 } 8 9 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 10 11 }
对于这些参数Context context, String name, CursorFactory factory,int version
context表示的是上下文,name则是创建数据库的名字,factory表示游标工厂,当为null的时候,表示使用默认的游标工厂,version顾名思义表示的是数据库的版本。

对于onCreate方法,代表的是数据库创建时,就会调用的方法,所以我们可以在方法里去写一些初始化的动作。
而onUpgrade方法,只有当数据库的版本发生变化时,才会调用。

下面我们在onCreate方法中,进行一些初始化的操作,比如创建出表结构:
1 public void onCreate(SQLiteDatabase db) {
2         /**
3          * 安卓下的SQLite是移动平台的嵌入式数据库,实际上所定义的类型,如(int varchar),真正在底层存放的时候都是以String字符来存放的。
4          * varchar(20)和varchar(10)没有任何区别!
5          */
6         db.execSQL("create table person(id int primary key auto_increment,name varchar(20),number varchar(20))");
7     }

II,实现增删改查(普通的方式)

我们可以写一个操作数据库的dao,在构造方法中就创建数据库。如:

1 private PersonSQLiteOpenHelper helper;
2     public PersonDao(Context context){
3         /**
4          * 在构造方法中实现数据库的初始化
5          */
6         helper=new PersonSQLiteOpenHelper(context);
7     }

其实创建数据库相关类的对象,并没有实际的在硬盘上创建一个数据库文件,就如同File一样,我们需要调用它的读和写的方法,才算真正的创建数据库。

1)增加数据到数据库:

建议采用db.execSQL(sql, bindArgs)方法,因为这个方法可以防止SQL注入,不容易写错。该方法并没有返回值,所以我们无法得知是否添加成功

2)查询数据库

对于查询使用的是rawQuery(String sql, String[] selectionArgs)方法,它返回的是游标Cursor,对于一张表,游标最初位于表的第一行的前面,如图:

画红线的就是游标最先指向的行,调用它的movenext方法,游标就一行一行的往下移动。

 

3)删除,更改数据库

同样没有返回值,使用普通方式来操作数据库的弊端已经显现。

4)查询所有

附上代码:

 1 /**
 2      *查询所有的数据。把查询到的数据添加到javabea中,再存放在集合中,在返回集合
 3      */
 4     public List<Person> findAll(){
 5         SQLiteDatabase db=helper.getWritableDatabase();
 6         Cursor cursor=db.rawQuery("select * from person", null);
 7         List<Person> list=new ArrayList<Person>();
 8         while(cursor.moveToNext()){
 9             /**
10              * id为第一列
11              */
12             int id=cursor.getInt(cursor.getColumnIndex("id"));
13             /**
14              * 而name和number为第二列和第三列
15              */
16             String name=cursor.getString(cursor.getColumnIndex("name"));
17             String number=cursor.getString(cursor.getColumnIndex("number"));
18             Person person=new Person(id, name, number);
19             /**
20              * 添加到集合
21              */
22             list.add(person);
23         }
24         return list;
25     }

先把数据库的数据查询出来,封装到数据库。接着添加到集合,然后在测试方法中,遍历集合,就可以查询所有的数据。

 

III,增删改查(andorid的方式)

对于普通方式操作数据,我认为最大的缺点就是没有返回值,即使我没操作成功,也不会有什么提示,而使用安卓的方式,几乎解决了这一困扰。

1)增加数据

使用的是db.insert(table, nullColumnHack, values)方法。

table指的就是要往哪张表去插入数据,

nullColumnHack表示的当你为它指定值后,当没有成功插入数据时,就会默认的为你插入null到表中,所以当我们不需要这样的功能时,就把它设置为null。

values类型是ContextValues,可以把它理解为map,添加键值对,键代表列名,值代表列所对应的值。

public long add(String name,String number){
        SQLiteDatabase db=helper.getWritableDatabase();
                ContentValues values=new ContentValues();
        values.put(name, number);
        long id=db.insert("person",null, values);
        db.close();
        return id;    
    }

insert方法是有返回值的,返回的是新添加行的id,如果没有添加成功,就会返回-1.所以我们可以根据返回值来判断是否添加成功。

2)查询数据

对于查询数据,我只说它的方法:

db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

table:插入的表名

columns:查询哪些列

selection, selectionArgs:where语句和where语句对应的值

groupBy, having, orderBy:是否分组,是否过滤,是否排序,不管的话,写为null即可。

3)修改和删除数据

db.update(table, values, whereClause, whereArgs)

db.delete(table, whereClause, whereArgs)

它们的返回值是影响到的行数,如果没有成功,返回的是0

 

IV,一个小技巧

当我们写好了数据库后,可以写一个测试类来测试是否操作成功。安卓中写测试类,不仅需要继承AndroidTestCase类,还需要在清单文件去配置。

如果我们忘记了怎么去配置,可以新建一个测试工程,去它的清单文件去拷贝。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。