您的位置:首页 > 移动开发 > Android开发

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

2015-06-16 15:48 483 查看
我们通常所接触的都是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检索一些方法的具体参数和作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: