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检索一些方法的具体参数和作用。
开发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检索一些方法的具体参数和作用。
相关文章推荐
- Android NDK开发介绍
- android-sdk-windows下载版
- Android—Greendao:SQLite Exception: no such table Error [duplicate]
- Android性能调优
- Android如何监听蓝牙耳机的按键事件
- Android中SQLite的陷阱
- android环境搭建
- picasso-强大的Android图片下载缓存库
- Android即时通讯服务,类似QQ的聊天工具,源码分享
- Android应用程序的默认最大内存值
- Android Volley完全解析(一),初识Volley的基本用法
- android之ION内存管理器(1)-- 简介
- android 圆角 圆形 图片 背景 selector 技巧
- Android 关闭应用程序的6种方法
- Android 使用shape添加边框
- Android Studio 导入jar包
- AndroidManifest.xml详解(下)
- [Android] 进程(Process)和线程(Thread)
- 如何在Android中定义容量巨大的数组
- Android文件图片上传的详细讲解(四)---服务端编码