该类是SQLiteDatabase一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。 SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的3个函数:
当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
package com.pmplife.imageview;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class StuDBHelper extends SQLiteOpenHelper {
//StuDBHelper作为一个访问SQLite的助手类,提供两个方面的功能,
//第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作
//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作
private static final String TAG = "TestSQLite";
public static final int VERSION = 1;
//必须要有构造函数
public StuDBHelper(Context context,String name,CursorFactory factory,
int version) {
super(context,name,factory,version);
}
@Override
//当第一次创建数据库的时候,调用该方法
public void onCreate(SQLiteDatabase db) {
// 创建表SQL语句
String sql = "create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10))";
//输出创建数据库的日志信息
Log.i(TAG,"create Database------------->");
//execSQL函数用于执行SQL语句
db.execSQL(sql);
}
@Override
//当更新数据库的时候执行该方法
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
//输出更新数据库的日志信息
Log.i(TAG,"update Database------------->");
}
}
package com.pmplife.imageview;
import android.support.v7.app.ActionBarActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
// 声明各个按钮
private Button createBtn;
private Button insertBtn;
private Button updateBtn;
private Button queryBtn;
private Button deleteBtn;
private Button ModifyBtn;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
textView = (TextView)findViewById(R.id.textViewId);
// 调用creatView方法
creatView();
// setListener方法
setListener();
}
//通过findViewById获得Button对象的方法
private void creatView()
{
createBtn = (Button)findViewById(R.id.createDatabase);
updateBtn = (Button) findViewById(R.id.updateDatabase);
insertBtn = (Button) findViewById(R.id.insert);
ModifyBtn = (Button) findViewById(R.id.update);
queryBtn = (Button) findViewById(R.id.query);
deleteBtn = (Button) findViewById(R.id.delete);
}
// 为按钮注册监听的方法
private void setListener()
{
createBtn.setOnClickListener(new CreateListener());
updateBtn.setOnClickListener(new UpdateListener());
insertBtn.setOnClickListener(new InsertListener());
ModifyBtn.setOnClickListener(new ModifyListener());
queryBtn.setOnClickListener(new QueryListener());
deleteBtn.setOnClickListener(new DeleteListener());
}
//创建数据库的方法
class CreateListener implements OnClickListener
{
@Override
public void onClick(View v) {
//创建StuDBHelper对象
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,"stu_db",null,1);
//得到一个可读的SQLiteDatabase对象
SQLiteDatabase db =dbHelper.getReadableDatabase();
}
}
//更新数据库的方法
class UpdateListener implements OnClickListener
{
@Override
public void onClick(View v) {
// 数据库版本的更新,由原来的1变为2
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,
"stu_db",2);
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}
//插入数据的方法
class InsertListener implements OnClickListener
{
@Override
public void onClick(View v) {
//获取最新版本的数据库,不然会出现异常
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,2);
// 得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 生成ContentValues对象 //key:列名,value:想插入的值
ContentValues cv = new ContentValues();
// 往ContentValues对象存放数据,键-值对模式
cv.put("id",1);
// 添加用户名
cv.put("sname","xiaoming");
cv.put("sage",21);
cv.put("ssex","male");
// 调用insert方法,将数据插入数据库
db.insert("stu_table",cv);
// 关闭数据库
db.close();
}
}
//查询数据的方法
class QueryListener implements OnClickListener
{
@Override
public void onClick(View v) {
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,2);
// 得到一个可写的数据库 SQLiteDatabase db
SQLiteDatabase db = dbHelper.getReadableDatabase();
// 参数1:表名
// 参数2:要想显示的列列名称数组
// 参数3:where子句
// 参数4:where子句对应的条件值
// 参数5:分组方式
// 参数6:having条件
// 参数7:排序方式
// Cursor:返回值,相当于结果集ResultSet
//Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
//Cursor游标常用方法
//getCount() 获得总的数据项数
//isFirst() 判断是否第一条记录
//isLast() 判断是否最后一条记录
//moveToFirst() 移动到第一条记录
//moveToLast() 移动到最后一条记录
//move(int offset) 移动到指定记录
//moveToNext() 移动到下一条记录
//moveToPrevious() 移动到上一条记录
//getColumnIndexOrThrow(String columnName) 根据列名称获得列索引
//getInt(int columnIndex) 获得指定列索引的int类型值
//getString(int columnIndex) 获得指定列缩影的String类型值
//查询获得游标
Cursor cursor = db.query("stu_table",new String[] { "id","sname",
"sage","ssex" }, "id=?",new String[] { "1" },
null);
//判断游标是否为空
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("sname"));
String age = cursor.getString(cursor.getColumnIndex("sage"));
String sex = cursor.getString(cursor.getColumnIndex("ssex"));
System.out.println("query------->" + "姓名:" + name + " " + "年龄:"
+ age + " " + "性别:" + sex);
}
// 关闭数据库
db.close();
}
}
//修改数据的方法
class ModifyListener implements OnClickListener
{
@Override
public void onClick(View v) {
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,2);
// 得到一个可写的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 实例化内容值
ContentValues cv = new ContentValues();
//在values中添加内容年龄被修改为23
cv.put("sage","23");
// 修改条件 where 子句 "?"是占位符号,对应后面的"1",
String whereClause = "id=?";
// 修改添加参数
String[] whereArgs = { String.valueOf(1) };
// 参数1 是要更新的表名
// 参数2 是一个ContentValeus对象
// 参数3 是where子句
db.update("stu_table",cv,whereClause,whereArgs);
}
}
//删除数据的方法
class DeleteListener implements OnClickListener
{
@Override
public void onClick(View v) {
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this,2);
// 得到一个可写的数据库
SQLiteDatabase db = dbHelper.getReadableDatabase();
// 删除条件
String whereClauses = "id=?";
// 删除条件参数
String[] whereArgs = { String.valueOf(2) };
// 调用delete方法,删除数据,删除id=2的数据
db.delete("stu_table",whereClauses,whereArgs);
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.pmplife.imageview.MainActivity$PlaceholderFragment" >
<TextView
android:id="@+id/textViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SQLite Activity"/>
<Button
android:id="@+id/createDatabase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textViewId"
android:text="创建数据库"/>
<Button
android:id="@+id/updateDatabase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/createDatabase"
android:text="更新数据库"/>
<Button
android:id="@+id/insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/updateDatabase"
android:text="插入数据"/>
<Button
android:id="@+id/update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/insert"
android:text="更新数据"/>
<Button
android:id="@+id/query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/update"
android:text="查询数据"/>
<Button
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/query"
android:text="删除数据"/>
</RelativeLayout>