wocaosinima 发表于 2016-11-29 11:31:01

Android(OPhone) 学习笔记

本文我们来实现一下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();
            }
    }

五、执行结果
通过多次点击插入记录,显示结果如下:
页: [1]
查看完整版本: Android(OPhone) 学习笔记