/*

大家都知道写博客会很累的,大热天的。

希望=转载请注明出处:http://blog.csdn.net/ta893115871

请不要可怜你的鼠标,(*^__^*) 嘻嘻……

*/

众所周知,数据库是很重要的。市面上的大大小小的软件差不多都要用到数据库。

Android中数据库为SQlite,因为小巧便捷,占用的空间少,易于操作。使用很受欢迎。

数据库不外乎查询(query)新增(insert)修改(update)删除(delete)。

本例子

1.使用Menu按键来做数据库的查询(query)新增(insert)修改(update)删除(delete)。

2.搭配ListView Widget来触发单击事件和鼠标滚轮事件。

下面就看一下数据库。

首先建一个辅助类MyDataBase继承SQLiteOpenHelpe,必须实现它的onCreate() onUpdate()方法

数据库创建时,会调用onCreate()方法,所以可将要添加的表(table)写在里面。

创建的方法如下所示:

@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub/* 建立表table */Log.i(TAG, " onCreate() ");String sql = "CREATE TABLE " + TABLE_NAME + " (" + FIELD_id+ " INTEGER PRIMARY KEY AUTOINCREMENT," + " " + FIELD_TEXT+ " TEXT)";db.execSQL(sql);}

当更新数据库时会调用onUpdate()方法。

所以要将更新tableSQL写在里面。

//更新数据库@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubLog.i(TAG, " onUpgrade() ");//删除表的SQLString sql = "DROP TABLE IF EXITS " + TABLE_NAME;db.execSQL(sql);onCreate(db);}

2.得到SQLiteDatabasedb对象,

通过db=MyOpenHelper.getReadableDatabase();//得到只读的数据存储对象,如果数据库不存在择创建一个数据库

db= MyOpenHelper.getWritableDatabase();//得到可读可写的数据哭对象。

如果数据库不存在择创建一个数据库

数据库的文件会自行产生在/data/data/package名称/database下在Eclipse来查询数据库是否创建成功。

根据自己的需要选择不同的方法;

到此我们的数据库就创建成功了。

(一)查询:

Cursor cursor=db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);

返回的是一个游标对象。

游标的作用是指项数据库的表的行我们可以通过 cursor.moveToNext();或者

Cursor.moveToPosition();来控制游标的位置;

字段虽然比较多,但了解数据库的人应该很清楚,

第一个参数是表名table_name

第二个参数是要查询的字段

第三个参数是查询的条件

这里说一下这个查询条件

查询所有的数据:

//asc是升序,desc是降序,默认为asc

mSQLiteDatabase.query(TABLENAME,new String[] {ID,stuName,stuNumber,stuScore },null,null,null,null,ID+" asc");

查询有条件的数据:

Cursor cursor = db.query(TABLENAME,new String[] {ID, stuName, stuNumber,stuScore }," stuName =?",

new String[] {“zhnagsan”},null,null,null)

这样写的话第四个参数就是第三个参数的替代值。

//Returns A Cursor object, whichis positioned before the first entry

Cursorcur= mSQLiteDatabase.query(TABLENAME,new String[] {ID,stuName,stuNumber,stuScore }, stuNumber+"="+number,null,null,null,null);

也可以把第四个参数置空,直接在第三个参数完成数据的查询条件。

两种方法都可以。

在完成游标的生成之后。

如果这个cursor不为空,择我们进行查询的时候要让游标移到第一个数据。

Cursor.moveTofirst();

因为游标默认的是指向第一行数据的上一行,如果我们不指向第一行就会报错,越界的异常。

()增加

// 增加数据public long addMethod(String str) {/* 将新增的值放入ContentValues */ContentValues cv = new ContentValues();cv.put(FIELD_TEXT, str);//键值对long row = db.insert(TABLE_NAME, null, cv);Log.i(TAG, "addMethod row=" + row);return row;}

第一个参数是你想往哪张表中插入数据的表名。

第二个参数是不允许插入一个完全为空的一条记录。

第二个参数是键值对,封装在一个ContentValues对象中。

(三)修改

// 修改public void modMethod(int id, String str) {ContentValues values = new ContentValues();values.put(FIELD_TEXT, str);String[] whereArgs = { Integer.toString(id) };int rowsaffected = db.update(TABLE_NAME, values, FIELD_id + " = ?",whereArgs);Log.i(TAG, "modMethod() rowsaffected=" + rowsaffected);}

参数已经很清楚了。

返回的是受影响的行数,是一行还是2行。

(四)删除

// 删除public void deleteMethod(int id) {String[] whereArgs = { Integer.toString(id) };int rowsaffected = db.delete(TABLE_NAME, FIELD_id + "=?", whereArgs);Log.i(TAG, "deleteMethod() rowsaffected=" + rowsaffected);}


参数已经很清楚了。

返回的是受影响的行数,是一行还是2行。

(五)关闭数据库

//关闭数据库@Overridepublic synchronized void close() {// TODO Auto-generated method stubLog.i(TAG, " close() ");db.close();super.close();}


范例的源代码见《二》Android 数据库 SQlite SQLiteOpenHelper

更多相关文章

  1. Android(安卓)SQLiteOpenHelper源码解读
  2. 数据存储有几种方式?分别是什么?
  3. GreeDAO详解-----数据库升级详解
  4. Android(安卓)-- 系统进程Zygote的启动分析
  5. 使用greenDao操作本地数据库,Android9.0读取数据库失败的问题解决
  6. Android中SoundPool放声音
  7. Android使用Realm数据库实现App中的收藏功能(代码详解)
  8. android 菜单设计
  9. Android(安卓)Activity URL Scheme的介绍与应用

随机推荐

  1. MySQL 8.0 之不可见列的基本操作
  2. Mysql Online DDL的使用详解
  3. MySQL 存储过程的优缺点分析
  4. IDEA 链接Mysql数据库并执行查询操作的完
  5. MySQL 覆盖索引的优点
  6. MySQL 视图(View)原理解析
  7. 超详细教你怎么升级Mysql的版本
  8. 详解mysql三值逻辑与NULL
  9. MySQL时间盲注的五种延时方法实现
  10. 分析MySQL抛出异常的几种常见解决方式