android 代码操作.db demo,android sqlite demo

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

之前简单学习了下SQLite的相关知识,这篇文章我们来看使用SQLite的一个简单的例子,例子中我们会使用如下的三个表格,进行数据库的创建,插入数据,和查询操作。可以到这里下载例子代码

94cafa4f2ac4fab7671390a649993f52.png

首先,我们需要介绍一下Android中提供的使用SQLite的接口以及使用方法。

###Android中SQLite接口介绍###

SQLiteOpenHelper和SQLiteDatabase是我们在Android提供的与SQLite相关的主要类:SQLiteOpenHelper用于数据库的管理,包括数据库和数据表格的创建,数据库的升级等

SQLiteDatabase主要提供了操作数据的接口,包括插入,查询,执行SQL语句等

SQLiteOpenHelpe

SQLiteOpenHelper类主要用于数据库的创建和版本的管理,当我们的代码试图进行数据库的操作时,SQLiteOpenHelper会检查数据库是否已经创建,如果没有创建,那么将会执行创建数据库的操作;如果已经创建,并且版本正确,那么就会返回给我们数据库的句柄;如果版本不正确,那么就会进行数据库的升级等。类的主要接口如下:public abstract void onCreate(SQLiteDatabase db);当数据库被创建时会执行onCreate方法,在这个方法内部我们应当创建数据库的各种表格。

public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);当我们的数据库需要升级时,onUpgrade方法将会被调用,onUpdate的职责是根据新的数据库模型,创建新的表格,遗弃旧的表格,并在必要时将就的数据库当中的数据放入新的表格当中。

此外还需要说明一点,SQLiteOpenHelper的构造方法中都需要一个Version,表示数据库的版本号,当我们从app store下载新的app版本时,SQLiteOpenHelper如果检测到本地版本号不符,就会执行onUpgrade方法进行数据库升级。

从上面的接口可以看到,SQLiteOpenHelper为一个抽象类,因此在实际的使用过程中,我们需要继承它,并重写以上两个函数方能使用。

SQLite接口的使

继承SQLiteOpenHelper,并重写相关的抽象方法:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22public class extends SQLiteOpenHelper{

public final static String DATABASE_NAME="library";

public final static int DATABASE_VERSION=1;

public (Context context){

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public void onCreate(SQLiteDatabase db){

db.execSQL(DBGeneric.CREATE_STUDENT_TABLE);

db.execSQL(DBGeneric.CREATE_BOOK_TABLE);

db.execSQL(DBGeneric.CREATE_RENT_TABLE);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

}

}

我们暂时只重写onCreate方法,onUpgrade我们之后会详细描述。

可以看到,onCreate方法中,我们只执行了一些SQL语句,进行了create table的操作。其中create student table和像table中插入数据的代码段如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16public final static String CREATE_STUDENT_TABLE ="CREATE TABLE " +

STUDENT_TABLE_NAME + " ( " + KEY_ID + " TEXT PRIMARY KEY, " +

STUDENT_NAME + " TEXT, " +

STUDENT_TEL + " TEXT " +" ) ";

//method used to insert new row to student table

public void addNewStudentInfo(String id, String name, String tel){

SQLiteDatabase db = mSqliteOpenHelper.getWritableDatabase();

String insertNewInfo = "INSERT INTO " + DBGeneric.STUDENT_TABLE_NAME +

" ( " + DBGeneric.KEY_ID + ", " + DBGeneric.STUDENT_NAME +

", " + DBGeneric.STUDENT_TEL + " ) VALUES ( " + "'" + id + "'" + ", " +

"'" + name + "'" + ", " + "'" + tel + "'" + " )";

db.execSQL(insertNewInfo);

}

可以看到,我们利用getWritableDatabase()得到数据库的句柄,然后再利用SQLiteDataBase的接口就行数据库的操作,同样如果你要做查询,可以调用getReadableDataBase()。getWritableDatabase会对数据库示例进行加锁,因此如果仅仅是查询,一定要用getReadable*方法,以提高数据库使用的效率。还需提醒一点,当我们不在使用数据库时,##需要调用SQLiteOpenHelper的close()方法`,来关闭打开的数据库连接。

rent_info表中存储了图书出借信息,包括学生的id和图书的id,下面的查询的例子就是根据数据库中的三张表,显示出学生的姓名,以及其借出的图书名:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15public void Test(){

Cursor c;

String test = "SELECT stu."+DBGeneric.STUDENT_NAME+", book."+DBGeneric.BOOK_NAME+" FROM "

+ DBGeneric.STUDENT_TABLE_NAME + " stu," + DBGeneric.BOOK_TABLE_NAME

+ " book," + DBGeneric.RENT_INFO_TABLE_NAME + " rent "

+ "WHERE stu."+DBGeneric.KEY_ID + "= rent." + DBGeneric.RENT_STUDENT_ID

+ " AND book." + DBGeneric.KEY_ID + " = rent." + DBGeneric.RENT_BOOK_ID;

c = mSqliteOpenHelper.getReadableDatabase().rawQuery(test, null);

if (c != null)

c.moveToFirst();

do {

Log.i("DJ", c.getString(0) + " " + c.getString(1));

}while (c.moveToNext());

}

其实SQLite的使用仍然是普通的数据库操作,执行sql语句,得到游标,遍历得到结果。虽然SQLite是简化的SQL,但是对于插入和查询的,join操作,以及Count等函数操作仍然是支持的。

onUpdate方法的使用

在我们的app升级时,往往会增加新的功能,而数据库表格往往也会有新的schema,因此onUpdate方法的正确实现尤为重要,如果你无需保存之前数据库的内容,那么可以使用下面的方法:1

2

3

4

5

6

7

8public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

//delete old tables

db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

//create new tables with new schema

onCreate(db);

}

但是大多数情况下,我们需要保存已有的数据,StackOverflow上有一个帖子,很详细的说明了onUpdate的正确实现步骤。

关于本文的demo

本文的小demo中使用了Android Navigation Drawer模式,可以说是Navigation Drawer实现的标准方式,有兴趣的话建议学习一下,代码很简明易懂。

附上一个很好地SQLite的帮助网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值