技术开发 频道

OPhone学习笔记 - SQLite

  【IT168 技术开发】本文我们来实现一下Android内置SQLite数据库,该数据库对于创建它们的包套件是私有的,而且数据库不应该用来存贮文件。SQLite是一个轻量级的软件库,体积大小只用几千字节,一些SQL的指令只是部分支持,例如:ALTER、TABLE。

  一、界面设置

  首先设置界面如下,这里需要说明一下,完成界面描绘之后,可以不编写响应代码先运行,这样可以保证main.xml的无误。笔者曾经重复命名了两个button后直接编写响应代码,结果编写代码时发现总是出错,再看R.java里面一直没有id的class,导致了时间和精力的浪费。

  二、常用对象方法

  在程序中,我们实现若干基本操作,删除的过程中包括查找,显示的过程中包括遍历。在这个例子中,需要引入若干的以前没用到的库:android.database.sqlite.*;android.util.Log;android.content.Context;android.database.*;

  参考 http://www.ophonesdn.com/forum/thread.do?topicId=eb0e8fe9-8898-11de-ba0c-e1dca3c51327&forumId=17 的例子(不过该例子有一些小问题),定义如下变量和常量

  OnClickListener listener1 = null;

  OnClickListener listener2 = null;

  OnClickListener listener3 = null;

  OnClickListener listener4 = null;

  OnClickListener listener5 = null;

  Button button1;

  Button button2;

  Button button3;

  Button button4;

  Button button5;

  TextView tv;

  DatabaseHelper mOpenHelper;

  private static final String DATABASE_NAME = "dbForTest.db";

  private static final int DATABASE_VERSION = 1;

  private static final String TABLE_NAME = "diary";

  private static final String TITLE = "title";

  private static final String BODY = "body";

  在create中编写如下代码:

  在设置好界面之后,准备好按钮响应:

  三、数据库初始化

  在create的最后一行,创建了DatabaseHelper的一个对象,下面我们来看看这个对象是由什么构成的。

  private static class DatabaseHelper extends SQLiteOpenHelper {

  DatabaseHelper(Context context) {

  
super(context, DATABASE_NAME, null, DATABASE_VERSION);

  }

  @Override

  
public void onCreate(SQLiteDatabase db) {

  String sql
= "CREATE TABLE " + TABLE_NAME + " (" + TITLE + " " + BODY + " " + ");";

  db.execSQL(sql);

  }

  @Override

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

  }

  }

  四、常用数据库操作

  1.创建表

  private void CreateTable() {

  SQLiteDatabase db
= mOpenHelper.getWritableDatabase();//获得一个SQLiteDatabase实例

  String sql
= "CREATE TABLE " + TABLE_NAME + " (" + TITLE + " " + BODY + " " + ");";

  
try {

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

  db.execSQL(sql);

  setTitle(
"数据表成功重建");

  }
catch (SQLException e) {

  setTitle(
"数据表重建错误");

  }

  }

  2.删除表

  private void dropTable() {

  SQLiteDatabase db
= mOpenHelper.getWritableDatabase();

  String sql
= "drop table " + TABLE_NAME;

  
try {

  db.execSQL(sql);

  setTitle(
"数据表成功删除:" + sql);

  }
catch (SQLException e) {

  setTitle(
"数据表删除错误");

  }

  }

  3.插入数据

  private void insertItem() {

  SQLiteDatabase db
= mOpenHelper.getWritableDatabase();

  String sql1
= "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY

  
+ ") values('haiyang', 'android的发展真是迅速啊');";

  String sql2
= "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY

  
+ ") values('icesky', 'Ophone的发展真是迅速啊');";

  
try {

  db.execSQL(sql1);

  db.execSQL(sql2);

  setTitle(
"插入两条数据成功");

  }
catch (SQLException e) {

  setTitle(
"插入两条数据失败");

  }

  }

  4.删除数据

  private void deleteItem() {

  
try {

  SQLiteDatabase db
= mOpenHelper.getWritableDatabase();

  db.delete(TABLE_NAME,
" title = 'haiyang'", null);

  setTitle(
"删除title为haiyang的一条记录");

  }
catch (SQLException e) {

  }

  }

  5.显示记录

  流程为:获取数据库实例,设置指针,显示记录数,移动指针,遍历并显示数据。

  private void showItems() {

  SQLiteDatabase db
= mOpenHelper.getReadableDatabase();

  String col[]
= { TITLE, BODY };

  Cursor cur
= db.query(TABLE_NAME, col, null, null, null, null, null);

  Integer num
= cur.getCount();

  setTitle(Integer.toString(num)
+ " 条记录");

  cur.moveToFirst();

  tv.setText(
"");

  
while (cur.getPosition()!=cur.getCount())

  {

  tv.append(Integer.toString(cur.getPosition())
+" , "+cur.getString(cur.getColumnIndex("title"))+" , "+cur.getString(cur.getColumnIndex("body"))+"\n");

  cur.moveToNext();

  }

  }

  五、执行结果

  通过多次点击插入记录,显示结果如下:

0
相关文章