SQLiteOpenHelper是android供给我们一个数据库辅助类来创建或打开数据库,我们创建一个辅助类继承自SQLiteOpenHelper类,在该类的 构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩展SQLiteOpenHelper类主要做的工作就是重写两个方法onCreate(SQLiteDatabase db) 和onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version
package com.example.test;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
// DBHelper做创建数据表和更新数据表的操作
public class DBHelper extends SQLiteOpenHelper
{
// 数据库名称为data
private static final String DB_NAME = "TEST.db";
// 数据库版本
private static final int DB_VERSION = 1;
// 创建公共信息表
private static final String db_comminfo = "CREATE TABLE COMMINFO ("
+ "_id integer PRIMARY KEY, "
+ "info_name varchar(10),"
+ "info_value integer)";
public DBHelper(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
/**
* 在数据库第一次生成的时候会调用这个方法,也就是说,只有在创建数据库的时候才会调用,当然也有一些其它的情况,
* 一般我们在这个方法里边生成数据库表。
*/
public void onCreate(SQLiteDatabase db)
{
db.execSQL(db_comminfo);
}
@Override
/**
* 当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,
* 当然是否还需要做其他的操作,完全取决于应用的需求。
*/
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS COMMINFO");
onCreate(db);
}
}
操作数据库最好需要创建一个工具类进行增删改查,先编写一个工具类DBadapter,将通用的打开数据库,关闭数据库的方法写好
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Semaphore;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public abstract class DBadapter
{
private Context m_context;
public static SQLiteDatabase db;
// 防止两个线程同时访问,一个访问结束,而另一个还未结束
private static Semaphore m_sem = new Semaphore(1);
private DBHelper dbhelper;
// 数据库表名
protected static String DB_TABLE;
public DBadapter(Context context )
{
this.m_context = context;
}
/**
* @Title: ${open}
* @Description: ${打开数据库,返回数据库对象}
* @param ${} 无参数
* @return ${} 无返回值
* @throws SQLException
*/
public boolean open() throws SQLException
{
try
{
m_sem.acquire();
}
catch (InterruptedException e)
{
m_sem.release();
e.printStackTrace();
return false;
}
dbhelper = new DBHelper(m_context);
db = dbhelper.getWritableDatabase();
if(db == null)
{
m_sem.release();
return false;
}
return true;
}
/**
* @Title: ${close}
* @Description: ${关闭数据库}
* @param ${} 无参数
* @return ${} 无返回值
* @throws
*/
public void close()
{
if(db != null) {
db.close();
}
if(dbhelper != null) {
dbhelper.close();
}
m_sem.release();
}
/**
* 单行游标转化成Map
* @param cursor
* @return
*/
public static HashMap<String, String> cursorToMap(Cursor cursor)
{
HashMap<String, String> map = new HashMap<String, String>();
if(cursor == null || !cursor.moveToFirst()) {
return new HashMap<String, String>();
}else{
String[] names = cursor.getColumnNames();
for(String name:names){
map.put(name, cursor.getString(cursor.getColumnIndex(name)));
}
}
return map;
}
/**
* 多行游标转换成List<Map>
* @param cursor
* @return
*/
public static List<Map<String, String>> cursorToList(Cursor cursor)
{
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
if(cursor != null && cursor.moveToFirst())
{
do {
HashMap<String, String> map = new HashMap<String, String>();
String[] names = cursor.getColumnNames();
for(String name:names){
map.put(name, cursor.getString(cursor.getColumnIndex(name)));
}
list.add(map);
} while (cursor.moveToNext());
}
return list;
}
}
最后就编写对表的操作类,在程序中直接调用这个类的方法就可以实现对数据库的操作
public class CommInfoDBAdapter extends DBadapter
{
private static final String TAG = "CommInfoDBAdapter";
// 数据库表名
private static final String DB_TABLE = "COMMINFO";
// 表中一条数据的ID
private static final String KEY_ID = "_id";
// 表中字段:名称
private static final String NAME = "info_name";
// 表中字段:值
private static final String VALUE = "info_value";
public CommInfoDBAdapter(Context context)
{
super(context);
}
/**
* 往参数表插入数据
* @param name
* @param value
* @return
* @author Administrator
* @date 2015年1月29日 上午10:23:31
*/
public long insertData(String name, int value)
{
ContentValues initialValues = new ContentValues();
initialValues.put(NAME, name);
initialValues.put(VALUE, value);
return db.insert(DB_TABLE, KEY_ID, initialValues);
}
/**
* 返回所有的信息
* @param type
* @return
*/
public List<TestObject> getAll()
{
List<TestObject> objList = new ArrayList<TestObject>();
Cursor cursor = db.query(DB_TABLE, new String[] { NAME, VALUE},null, null, null, null, null);
while (cursor.moveToNext())
{
TestObject obj = new TestObject();
obj.setName(cursor.getString(cursor.getColumnIndex(NAME)));
obj.setValue(cursor.getInt(cursor.getColumnIndex(VALUE)));
objList.add(obj);
}
if(cursor != null)
{
cursor.close();
}
return objList;
}
public List<TestObject> getObjByName(String name)
{
List<TestObject> objList = new ArrayList<TestObject>();
Cursor cursor = null;
try
{
cursor = db.query(DB_TABLE, new String[] {KEY_ID, NAME, VALUE},
NAME + "= ? ", new String[] { name }, null, null, null);
while (cursor.moveToNext())
{
TestObject obj = new TestObject(cursor.getString(cursor.getColumnIndex(NAME)),
cursor.getInt(cursor.getColumnIndex(VALUE)));
objList.add(obj);
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(cursor != null)
{
cursor.close();
}
}
return objList;
}
public boolean deleteByType()
{
return db.delete(DB_TABLE, null, null) > -1;
}
}
class TestObject{
String name = null;
int value;
public TestObject(String name, int value)
{
super();
this.name = name;
this.value = value;
}
public TestObject()
{
super();
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}