Android数据存储之数据库的利用

我们通常所接触的都是Oracle、MySQL等数据库,这些数据库都是需要安装,然后启动服务器进程,但是SQLite只是一个文件,专门适用于资源有限的设备上进行适量的数据存储,比如手机、pad等。

开发android中的SQLite数据库有两种方法。第一种就是利用SQLiteDatabase对象来管理、操作数据库;第二种是利用android提供的SQLiteOpenHelper类处理。

第一种利用SQLiteDatabase对象是一种比较繁琐的方法,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。

话不多说,我们直接利用一个简单的程序来展示利用SQLiteDatabase对象来管理数据库。下面的程序示范了如何子啊android应用中操作SQLite数据库,当单击按钮时这两个文本框的内容会被插入数据库。具体的xml界面程序我就不给大家了,因为我们只是放置了两个文本框和一个按钮来完成我们的操作。

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteException;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CursorAdapter;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.SimpleCursorAdapter;

import android.widget.TextView;

import android.widget.Toast;

 

public class DBTest extends Activity

{

    SQLiteDatabase db;

    Button bn = null;

    ListView listView;

 

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        // 创建或打开数据库(此处需要使用绝对路径)

        String liyang=this.getFilesDir().toString();

        Toast.makeText(DBTest.this,liyang, Toast.LENGTH_LONG).show();

        TextView liyang1=(TextView)findViewById(R.id.liyang);

        liyang1.setText(liyang);

        db = SQLiteDatabase.openOrCreateDatabase(

            this.getFilesDir().toString()

            + "/my.db3", null); // ①

        listView = (ListView) findViewById(R.id.show);

        bn = (Button) findViewById(R.id.ok);

        bn.setOnClickListener(new OnClickListener()

        {

            @Override

            public void onClick(View source)

            {

                // 获取用户输入

                String title = ((EditText) findViewById(

                    R.id.title)).getText().toString();

                String content = ((EditText) findViewById(R.id.content))

                    .getText().toString();

                try

                {

                    insertData(db, title, content);

                    Cursor cursor = db.rawQuery("select * from news_inf"

                        , null);

                    inflateList(cursor);

                }

                catch (SQLiteException se)

                {

                    // 执行DDL创建数据表

                    db.execSQL("create table news_inf(_id integer"

                        + " primary key autoincrement,"

                        + " news_title varchar(50),"

                        + " news_content varchar(255))");

                    // 执行insert语句插入数据

                    insertData(db, title, content);

                    // 执行查询

                    Cursor cursor = db.rawQuery("select * from news_inf"

                        , null);

                    inflateList(cursor);

                }

            }

        });

    }

    private void insertData(SQLiteDatabase db

        , String title, String content) //②

    {

        // 执行插入语句

        db.execSQL("insert into news_inf values(null , ? , ?)"

            , new String[] {title, content });

    }

    private void inflateList(Cursor cursor)

    {

        // 填充SimpleCursorAdapter

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(

            DBTest.this,

            R.layout.line, cursor,

            new String[] { "news_title", "news_content" }

            , new int[] {R.id.my_title, R.id.my_content },

            CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); //③

        // 显示数据

        listView.setAdapter(adapter);

    }

    @Override

    public void onDestroy()

    {

        super.onDestroy();

        // 退出程序时关闭SQLiteDatabase

        if (db != null && db.isOpen())

        {

            db.close();

        }

    }

}

刚才我们讲到第一种方法是一种比较繁琐的方法,android提供了一种更加简便、优雅的的处理方式,那就是提供了SQLiteOpenHelper类来处理。其实实际项目中很少使用SQLiteDatabase对象来打开数据库,通常都是继承SQLiteOpenHelper类开发子类,通过该子类的getReadableDatabase()、getWriteableDatabase()方法打开数据库。

Android如何使用SQLiteOpenHelper呢?SQliteOpenHelper是一个抽象类,来管理数据库的创建和版本的管理。要使用它必须实现它的nCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int)方法。onCreate:当数据库第一次被建立的时候被执行,例如创建表,初始化数据等。onUpgrade:当数据库需要被更新的时候执行,例如删除久表,创建新表。

下面的程序是展示了我们在继承SQLiteOpenHelper时要实现的一些方法,通过实现这些方法,便可以操作、管理SQLite数据库。在本博客中我上传了一个例子,是用SQLiteOpenHelper完成的一个单词本,可以完成存储、查询单词的过程,程序可以很好的展示如何使用SQLiteOpenHelper类。

public class DatabaseHelper extends SQLiteOpenHelper {    
  DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
  {    
    super(context, name, cursorFactory, version);    
     }    
    
     @Override   
     public void onCreate(SQLiteDatabase db) {    
         // TODO 创建数据库后,对数据库的操作    
     }    
    
     @Override   
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    
         // TODO 更改数据库版本的操作    
     }    
    
 @Override   
 public void onOpen(SQLiteDatabase db) {    
         super.onOpen(db);      
         // TODO 每次成功打开数据库后首先被执行    
     }     
 }

那么如果你想在android上存储数据时(当然数据不宜过大),你可以考虑利用SQLite数据库来进行存储。通过本文的介绍和提供的程序,你可以使用 SQLite 创建数据库和表、添加数据、更新和检索数据,完成你所想的操作,当然在阅读过程中,还需要你去网上或者API检索一些方法的具体参数和作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值