| 
 | 
	
 
 
本文我们来实现一下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(); 
            } 
    } 
 
五、执行结果 
通过多次点击插入记录,显示结果如下: 
 
 |   
 
 
 
 | 
  
 |