一、 数据库初始化接口
数据库初始化之前我们需要建立表的对应字段,需使用KeyValueMap
类,该类解决了Java 中HashMap不能有相同建的问题,致使我们可以对数据库表中相同字段的存储。
对应的字段创建完后只需调用DBManager.InitDB(String DB_name,int DB_version,StringTableName,KeyValueMap<String, String> CreateSql);数据库和表所需的创建信息。
参数描述
参数名称 |
类型 |
意义 |
注释 |
DB_name |
String |
数据库名字 |
|
DB_version |
int |
数据库版本 |
|
TableName |
String |
表名 |
|
createSql |
KeyValueMap<K,V> |
表字段 |
|
调用示例:
// 建表参数
KeyValueMap<String,String> parmas = new KeyValueMap<String,String>();
parmas.put("TEXT", "NAME");
parmas.put("TEXT", "SCORE");
// 初始化建库建表信息
DBManager.InitDB("Student_db", 1, "PersonTab",parmas);
二、 增、删、改、查接口使用
DBManager类封装了增删改查四个接口。
(1)添加数据
数据库的数据插入接口,
AddDate(String TabelName, KeyValueMap<String,String>hashmap)
参数描述
参数名称 |
类型 |
意义 |
注释 |
TableName |
String |
表名 |
|
hashmap |
KeyValueMap<String,String> |
参数值 |
|
调用示例;
sqliteDatebase= helper.getWritableDatabase();
ContentValuesvalues = new ContentValues();
for(int index = 0; index < hashmap.getSize(); index++) {
values.put(hashmap.getKey(index),hashmap.getValue(index));
}
sqliteDatebase.insert(TabelName,null, values);;
(2) 删除数据
数据库的删除接口,DelDate(StringTabelName,String arg0,String[] arg1)
参数描述
参数名称 |
类型 |
意义 |
注释 |
TabelName |
Stirng |
表名 |
|
arg0 |
string |
查询条件 |
|
arg1 |
String[] |
查询条件的参数 |
|
调用示例:
DBManager.getIntance(IfreeDemo.this).DelDate("PersonTab","SCORE=?", new String[] { "90" });
(3) 修改数据
数据库的修改接口,Update(StringTabelName,KeyValueMap<String, String> map,String arg1,String[] arg2);
参数描述
参数名称 |
类型 |
意义 |
注释 |
TabelName |
String |
|
|
map |
KeyValueMap<K,V> |
更新的数据集 |
|
arg1 |
String |
查询条件 |
|
arg2 |
String[] |
查询条件的参数 |
|
调用示例
sqliteDatebase =helper.getWritableDatabase();
ContentValuesvalues = new ContentValues();
for (int index =0; index < map.getSize(); index++) {
values.put(map.getKey(index), map.getValue(index));
}
sqliteDatebase.update(TabelName, values, arg1,arg2);
(4) 查询数据
数据库查询接口
query(StringTableName, String[] arg0, String arg1, String[] arg2, String arg3, String arg4,String arg5);
返回类型为Cursor,使用之后需要将该游标关闭。
参数描述
参数名称 |
类型 |
意义 |
注释 |
TableName |
String |
表名 |
|
Arg0 |
String[] |
要查询的列名 |
|
Arg1 |
string |
查询条件 |
|
Arg2 |
Stirng[] |
查询条件的参数 |
|
Arg3 |
string |
对查询的结果进行分组 |
|
Arg4 |
string |
对分组的结果进行限制 |
|
Arg5 |
string |
对查询的结果进行排序 |
|
调用示例;
Cursor cursor = DBManager.getIntance(IfreeDemo.this).query"PersonTab",new String[] { "NAME", "SCORE"}, "NAME=?",new String[] { "WUWEIDONG" }, null,null, null);
while(cursor.moveToNext()) {
System.out.println(cursor.getString(cursor.getColumnIndex("NAME"))); System.out.println(cursor.getString(cursor.getColumnIndex("SCORE")));
}
cursor.close();
代码示例:
package proj.tool;
import proj.tool.R;
import Sqlite.DBManager;
import Sqlite.KeyValueMap;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
public class IfreeDemo extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ifree_demo);
// 建表参数
KeyValueMap<String, String> parmas = new KeyValueMap<String, String>();
parmas.put("TEXT", "NAME");
parmas.put("TEXT", "SCORE");
// 初始化建库建表信息
DBManager.InitDB("Student_db", 1, "PersonTab", parmas);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 所需插入的数据
KeyValueMap<String, String> msg = new KeyValueMap<String, String>();
msg.put("NAME", "WUWEIDONG");
msg.put("SCORE", "90");
DBManager.getIntance(IfreeDemo.this).AddDate("PersonTab", msg);
}
});
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("删除操作");
DBManager.getIntance(IfreeDemo.this).DelDate("PersonTab", "SCORE=?",
new String[] { "90" });
}
});
findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 查询
Cursor cursor = DBManager.getIntance(IfreeDemo.this).query("PersonTab",
new String[] { "NAME", "SCORE" }, "NAME=?",
new String[] { "WUWEIDONG" }, null, null, null);
while (cursor.moveToNext()) {
System.out.println(cursor.getString(cursor.getColumnIndex("NAME")));
System.out
.println(cursor.getString(cursor.getColumnIndex("SCORE")));
}
cursor.close();
}
});
findViewById(R.id.button4).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
KeyValueMap<String, String> msg2 = new KeyValueMap<String, String>();
msg2.put("NAME", "WUWEIDONG2");
msg2.put("SCORE", "110");
DBManager.getIntance(IfreeDemo.this).Update("PersonTab", msg2, "NAME=?",
new String[] { "WUWEIDONG" });
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_ifree_demo, menu);
return true;
}
}
package Sqlite;
import java.util.ArrayList;
public class KeyValueMap<K,V> {
class Entry{
K k;
V v;
public Entry(K k,V v){
this.k = k;
this.v = v;
}
public K getK(){
return k;
}
public V getV(){
return v;
}
public void setK(K k){
this.k = k;
}
public void setV(V v){
this.v = v;
}
}
private ArrayList<Entry> keyValue = new ArrayList<Entry>();
public boolean put(K k,V v){
if(k==null||v==null)
return false;
Entry e = new Entry(k, v);
keyValue.add(e);
return true;
}
public K getKey(int id){
Entry e = keyValue.get(id);
if(e==null)
return null;
else
return e.getK();
}
public V getValue(int id){
Entry e = keyValue.get(id);
if(e==null)
return null;
else
return e.getV();
}
public int getSize(){
return keyValue.size();
}
}
package Sqlite;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* 创建数据库和表
* @author Administrator
*
*/
public class DBHelper extends SQLiteOpenHelper{
private static String DATEBASE_NAME;
private static int DATEBASE_VERSION;
private static String TableName;
private static String sql; //建表sql语句
/*************设置数据库、表名字和版本 start************/
public static void setDATEBASE_NAME(String dATEBASE_NAME) {
DATEBASE_NAME = dATEBASE_NAME;
}
public static void setSql(String sql) {
DBHelper.sql = sql;
}
public static void setDATEBASE_VERSION(int dATEBASE_VERSION) {
DATEBASE_VERSION = dATEBASE_VERSION;
}
public static void setTableName(String tableName) {
TableName = tableName;
}
/************设置数据库、表名字和版本 end***********/
public DBHelper(Context context) {
super(context, DATEBASE_NAME, null, DATEBASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("ALTER TABLE "+TableName+" ADD COLUMN other STRING");
}
}
package Sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
* 使用规则:需先设置数据库名字、表名、版本号信息
*
* @author Administrator
*/
public class DBManager {
public static DBManager DB;
public static DBHelper helper;
public static SQLiteDatabase db;
private static String DATEBASE_NAME;
private static int DATEBASE_VERSION;
private static String TableName;
private static String sql;
private static SQLiteDatabase sqliteDatebase;
/************* 设置数据库、表名字和版本 start ************/
public static String getDATEBASE_NAME() {
return DATEBASE_NAME;
}
public static void setDATEBASE_NAME(String dATEBASE_NAME) {
DATEBASE_NAME = dATEBASE_NAME;
}
public static int getDATEBASE_VERSION() {
return DATEBASE_VERSION;
}
public static void setDATEBASE_VERSION(int dATEBASE_VERSION) {
DATEBASE_VERSION = dATEBASE_VERSION;
}
public static String getTableName() {
return TableName;
}
public static void setTableName(String tableName) {
TableName = tableName;
}
/**
* 初始化
* @param DB_name 数据库名字
* @param DB_version 数据库版本
* @param TbaleName 表名
* @param CreateSql 表字段
*/
public static void InitDB(String DB_name,int DB_version,String TableName,KeyValueMap<String, String> CreateSql){
DBManager.setDATEBASE_NAME(DB_name);
DBManager.setDATEBASE_VERSION(DB_version);
DBManager.setTableName(TableName);
DBManager.sqlTable(CreateSql);
}
/************ 设置数据库、表名字和版本 end ***********/
private DBManager(Context context) {
DBHelper.setDATEBASE_NAME(getDATEBASE_NAME());
DBHelper.setDATEBASE_VERSION(getDATEBASE_VERSION());
DBHelper.setTableName(getTableName());
DBHelper.setSql(sql);
helper = new DBHelper(context);
db = helper.getWritableDatabase();
}
public static DBManager getIntance(Context context){
if(DB==null){
DB = new DBManager(context);
}
return DB;
}
/**
* 创建表的sql语句 该法方法id自增长
*
* @param hashmap
* 字段和参数
*/
public static void sqlTable(KeyValueMap<String, String> hashmap) {
StringBuffer sb = new StringBuffer();
for (int index = 0; index < hashmap.getSize(); index++) {
String key = hashmap.getKey(index);
String value = hashmap.getValue(index);
sb.append(value).append(" ").append(key).append(",");
}
String value = sb.toString();
String result = value.substring(0, value.length() - 1);
sql = "create table " + TableName
+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT," + result + ")";
}
/**
* 创建表的sql语句
*
* @param cpysql
* 建表的sql语句
*/
public static void sqlTabel(String cpysql) {
sql = cpysql;
}
/**
* 添加数据
*
* @param TabelName
* 表名
* @param hashmap
* 参数值
*/
public void AddDate(String TabelName, KeyValueMap<String, String> hashmap) {
sqliteDatebase = helper.getWritableDatabase();
ContentValues values = new ContentValues();
for (int index = 0; index < hashmap.getSize(); index++) {
values.put(hashmap.getKey(index), hashmap.getValue(index));
}
sqliteDatebase.insert(TabelName, null, values);
}
/**
* 删除数据
* @param TabelName 第一个参数String:表名
* @param arg0 第二个参数String:查询条件
* @param arg1 第三参数String[]:查询条件的参数
*/
public void DelDate(String TabelName,String arg0,String[] arg1) {
sqliteDatebase = helper.getWritableDatabase();
sqliteDatebase.delete(TabelName, arg0, arg1);
}
/**
* 更新数据
* @param TabelName
* @param map 更新的数据
* @param arg1 查询条件
* @param arg2 查询条件的参数
*/
public void Update(String TabelName,KeyValueMap<String, String> map,String arg1,String[] arg2) {
sqliteDatebase = helper.getWritableDatabase();
ContentValues values = new ContentValues();
for (int index = 0; index < map.getSize(); index++) {
values.put(map.getKey(index), map.getValue(index));
}
sqliteDatebase.update(TabelName, values, arg1, arg2);
}
/**
* 查询数据
* @param TableName 第一个参数String:表名
* @param arg0 第二个参数String[]:要查询的列名
* @param arg1 第三个参数String:查询条件
* @param arg2 第四个参数String[]:查询条件的参数
* @param arg3 第五个参数String:对查询的结果进行分组
* @param arg4 第六个参数String:对分组的结果进行限制
* @param arg5 第七个参数String:对查询的结果进行排序
* @return
*/
public Cursor query(String TableName, String[] arg0, String arg1,
String[] arg2, String arg3, String arg4, String arg5) {
sqliteDatebase = helper.getReadableDatabase();
Cursor cursor = sqliteDatebase.query(TableName, arg0, arg1, arg2, arg3,
arg4, arg5);
return cursor;
}
}