一、SQLite介绍
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
二、SQLiteOpenHelper使用方法
JAVA中使用JDBC来访问数据库,而Android则设计使用一套自己的API来访问数据库,必须要是用到SQLiteOpenHelper方法来访问数据库,不使用也可以,但会很麻烦。SQLiteOpenHelper是一个管理数据库的创建、版本等操作的帮助类。可以创建一个子类去实现一些方法。SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。
使用SQLiteOpenHelper来访问数据库必须要使用一些方法:
getReadableDatabase():创建或者打开一个可读的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查等操作
getWritableDatabase():创建或者打开一个(可读)可写的数据库,会返回一个SQLiteDatabase对象,基于这个对象可以进行增删改查等操作
onCreate(SQLiteDatabase db):回调函数,当数据库被第一次创建时调用
onOpen(SQLiteDatabase db):回调函数,当数据库被打开时调用
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):回调函数,当数据库被更新时调用
close():关闭数据库
三、使用abd访问SQLite
adb的全称为Android Debug Bridge,起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS调试Android程序,其实就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
adb是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机).它的主要功能有:
1)
2)
3)
4)
ADB是一个客户端-服务器端程序,其中客户端是你用来操作的电脑, 服务器端是android设备
打开命令行,输入adb,就会看到adb的相关命令。如果看到的是adb不是内部或外部命令这个提示,说明环境变量没有配置好,以前path只配置了sdk目录下的tools,对于旧版本中adb.exe就在该目录下,可以正常启动。但是对于新版本sdk,adb.exe被移动到了platform- tools目录下,这一点需要注意。
如果此时提示Device not found,则是因为模拟器没有启动,需要先启动模拟器,启动模拟器可以从Eclipse上的Opens Android SDK and AVD Manageer上选择需要启动的模拟器进行启动,也可以从命令行进行启动。
SQLite数据库放在./data/data/当前虚拟机运行的应用程序的包名/databases/目录里。当没有创建数据库的时候,是没有databases目录的,只有当数据库创建成功时才有。此时只有lib目录,没有databases目录。当运行创建程序之后,就会创建databases目录,且该目录下有数据库。
四、增、删、改、查操作
/**
* SQLiteDataBaseHelper作为一个访问SQLite的助手类,提供了两个方面的功能
* 第一:getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
* 第二:提供onCreate(),onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
*/
public class DataBaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
//在SQLiteOpenHelper子类当中,必须有该构造函数
public DataBaseHelper(Context context, String name, CursorFactory factory,
int version) {
//必须通过super调用父类当中的构造函数
super(context, name, factory, version);
}
public DataBaseHelper(Context context,String name){
this(context,name,VERSION);
}
public DataBaseHelper(Context context,String name,int version){
this(context, name,null,VERSION);
}
//当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行,也就是第一次得到SQLiteDatabase对象的时候,才会调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("create a DataBase");
db.execSQL("create table user(id int,name varchar(20))");
}
//当打开数据库时传入的版本号与当前的版本号不同时调用该方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("update a DataBase");
}
}
public class SQLiteActivity extends Activity {
private Button createDataBaseButton = null;
private Button updateDataBaseButton = null;
private Button insertButton = null;
private Button updateButton = null;
private Button queryButton = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sqlite);
createDataBaseButton = (Button) findViewById(R.id.createDataBaseButton);
updateDataBaseButton = (Button) findViewById(R.id.updateDataBaseButton);
insertButton = (Button) findViewById(R.id.insertBaseButton);
updateButton = (Button) findViewById(R.id.updateButton);
queryButton = (Button) findViewById(R.id.queryButton);
createDataBaseButton.setOnClickListener(new CreateDataBaseListener());
updateDataBaseButton.setOnClickListener(new UpdateDataBaseListener());
insertButton.setOnClickListener(new InsertButtonListener());
updateButton.setOnClickListener(new UpdateButtonListener());
queryButton.setOnClickListener(new QueryButtonListener());
}
class CreateDataBaseListener implements OnClickListener{
@Override
public void onClick(View v) {
//创建一个SQLiteDataBaseHelper对象
DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
//只有调用了DataBaseHelper对象的getReadableDatabase()或者getWritableDatabase()方法之后,才会创建或者打开一个数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class UpdateDataBaseListener implements OnClickListener{
@Override
public void onClick(View v) {
DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
class InsertButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
//生成ContentValues对象,和map对象差不多,存放的都是键值对
ContentValues values = new ContentValues();
//向该对象中插入键值对,其中键是列名,值是和列类型一致的值
values.put("id",1);
values.put("name", "zhangsan");
DataBaseHelper dbhelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
SQLiteDatabase db = dbhelper.getWritableDatabase();
//调用insert方法,就可以将数据库插入到数据库中,参数:表明、默认空值、ContentValues对象
db.insert("user", null, values);
}
}
class UpdateButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","zhangsanfeng");
//(1):要更新的表明;(2):ContentValues对象;(3):where子句;(4):对占位符进行赋值,第一个元素赋值给第一个占位符;
db.update("user", values, "id=?", new String[]{"1"});
}
}
class QueryButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
DataBaseHelper dbHelper = new DataBaseHelper(SQLiteActivity.this, "db_myTest");
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"},
null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
System.out.println("Name is ---> " + name);
}
}
}
}