您的位置:首页 > 移动开发 > Android开发

android 移动开发 SQLitedatabase嵌入轻级数据库 解决方案1

2014-05-08 21:14 513 查看
SQLitedatabase

1.调用环境下的openOrCreateDataBase(name,mode,factory)返回SQLitedatabase对象

2.调用对象执行execSQL()执行sql语句。如创建表。此方法不推荐用在CRUD上,具体请看源代码

3.close方法是关闭数据库的方法,对于不同Activity之间不允许有一个库的多个实例,看源代码可知-------线程安全

4.存在于 data/data/packagename/databases目录下

一。vo包

package baidu.sqlite.vo;
public class User {
private int id;
private String name;
private int age;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}

}

package baidu.sqlite.vo;

public class EditTextInput {
private String now_name;
private int now_age;

public String getNow_name() {
return now_name;
}

public void setNow_name(String now_name) {
this.now_name = now_name;
}

public int getNow_age() {
return now_age;
}

public void setNow_age(int now_age) {
this.now_age = now_age;
}

public EditTextInput() {
super();
}

public EditTextInput(String now_name, int now_age) {
super();
this.now_name = now_name;
this.now_age = now_age;
}

}


二。service包

package baidu.sqlite.service;

import com.example.sqlite.R;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import baidu.sqlite.DBhandle.StatementHandle;

public class ServiceHelp {
public static SQLiteDatabase sqliteDB;
public static String HelpDBtableName;

/**
*
* @param con
*            传入具体的上下文环境。
* @param DBname
*            要创建数据库的名称。
* @param mode
*            context的具体模式。
* @return
*/
// 开始时加载数据库
public static void BeginLoadingDB(Context con, String DBname, int mode) {
Log.e("serviceHelp", "执行了biginloadingDB");
sqliteDB = con.openOrCreateDatabase(DBname, mode, null);
Log.e("serviceHelp", "执行了内部openOrcreatedatabase");
}

/**
*
* @param DBtableName
*            输入具体的数据库表名
* @throws Exception
*             数据实例为空抛出异常
*/
// 而后创建或者打开原有表
public static void DBCreateTable(String DBtableName) throws Exception {
if (sqliteDB != null) {

HelpDBtableName = DBtableName;
sqliteDB.execSQL("DROP TABLE IF EXISTS " + DBtableName);
sqliteDB.execSQL("CREATE TABLE  "
+ DBtableName
+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT , name VARCHAR , age INTEGER)");
} else {
new Exception("sqliteDB没有实例化,请先保证数据库被加载,参考方法BeginLoadingDB()");
}
}

// 最后插入,删除等语句的执行
/**
*
* @param DBhandleName
*            输入的动作,输入 如insert,updata,select,delete四种以判断具体想要的动作
* @param sqliteDBname
*            输入 被实例化的数据库 而后数据库对象操作具体的动作在statementHandle类中进行 处理
*/
public static void ExecSQLstatement(String DBhandleName,Context context) {
if (DBhandleName.equals("insert")) {
StatementHandle.insertData(sqliteDB, HelpDBtableName);
}
if (DBhandleName.equals("select")) {
StatementHandle.selectData(sqliteDB, HelpDBtableName,context);
}
if (DBhandleName.equals("update")) {
StatementHandle.updateData(sqliteDB, HelpDBtableName);
}
if (DBhandleName.equals("delete")) {
StatementHandle.deleteData(sqliteDB, HelpDBtableName);
}
}

public static void loadDATAeti() {
// TODO Auto-generated method stub
StatementHandle.loadDATAeti();
}

}
三。DBhandle包

package baidu.sqlite.DBhandle;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.example.sqlite.R;

public class FloatWindow {
public void inflateFacilitate(Context context, Cursor c) {
View view = LayoutInflater.from(context).inflate(R.layout.item_dalog,
null);
ListView list = (ListView) view.findViewById(R.id.item_list);
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context,
R.layout.item_layout, c, new String[] { "_id", "name", "age" },
new int[] { R.id.item_id, R.id.item_name, R.id.item_age });
list.setAdapter(cursorAdapter);

DialogHelper(view, context);
}
public void DialogHelper(View view,Context context){
new AlertDialog.Builder(context)
.setIcon(R.drawable.ic_launcher)
.setTitle("查询结果!")
.setView(view)
.setPositiveButton("确定", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
}).create().show();

}
}

package baidu.sqlite.DBhandle;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import baidu.sqlite.SqlitMainActivity;
import baidu.sqlite.vo.User;

public class StatementHandle {
private static String tidyName;
private static int tidyage;
/**
* 此方法是为了每次输入的值是不确定的,
* 如果点击按钮每次点击后写入的值是不同的所以,
* 点击按钮就要调用此方法
* 以保证数据的及时更新
*/
public static void loadDATAeti() {
tidyName = SqlitMainActivity.eti.getNow_name();
tidyage = SqlitMainActivity.eti.getNow_age();
}
/**
* @param sqliteDBname  insert方法插入要表明的数据库名
* @param table  要插入数据的表名
*/
public static void insertData(SQLiteDatabase sqliteDBname, String table) {
ContentValues cv = new ContentValues();
cv.put("name", tidyName);
cv.put("age", tidyage);
sqliteDBname.insert(table, null, cv);
}
/**
* @param sqliteDBname select方法插入要表明的数据库名
* @param table  要插入数据的表名
*/
public static void selectData(SQLiteDatabase sqliteDBname, String table,Context context) {
Cursor cursor = sqliteDBname.rawQuery("select * from " + table, null);

new FloatWindow().inflateFacilitate(context, cursor);

//		List<User> list = new ArrayList<User>();
//		while (cursor.moveToNext()) {
//			int id = cursor.getInt(cursor.getColumnIndex("_id"));
//			String name = cursor.getString(cursor.getColumnIndex("name"));
//			int age = cursor.getInt(cursor.getColumnIndex("age"));
//			User user = new User(id, name, age);
//			list.add(user);
//		}
}
/**
*@param sqliteDBname delete方法插入要表明的数据库名
* @param table  要插入数据的表名
*/
public static void deleteData(SQLiteDatabase sqliteDBname, String table) {
sqliteDBname.delete(table, "name = ?", new String[] { tidyName });
}
/**
*@param sqliteDBname  update方法插入要表明的数据库名
* @param table  要插入数据的表名
*/
public static void updateData(SQLiteDatabase sqliteDBname, String table) {
Log.e("修改", "runing");
ContentValues values = new ContentValues();
values.put("age", tidyage);
sqliteDBname.update(table, values, "name = ?",new String[] { tidyName });
}
}


四。splite包

package baidu.sqlite;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import baidu.sqlite.DBhandle.StatementHandle;
import baidu.sqlite.service.ServiceHelp;
import baidu.sqlite.vo.EditTextInput;

import com.example.sqlite.R;

public class SqlitMainActivity extends Activity {
private Button insertData, selectData, updataData, deleteData;
private EditText inputName, inputAge;
public static EditTextInput eti;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spick);
inputAge = (EditText) findViewById(R.id.age);
deleteData = (Button) findViewById(R.id.deleteData);
insertData = (Button) findViewById(R.id.insertInto);
selectData = (Button) findViewById(R.id.selectData);
updataData = (Button) findViewById(R.id.UpdataData);
inputName = (EditText) findViewById(R.id.name);

try {
ServiceHelp.BeginLoadingDB(SqlitMainActivity.this, "son.db",
Context.MODE_WORLD_READABLE);
ServiceHelp.DBCreateTable("utills");
} catch (Exception e) {
e.printStackTrace();
}
deleteData.setOnClickListener(ls);
insertData.setOnClickListener(ls);
selectData.setOnClickListener(ls);
updataData.setOnClickListener(ls);
}

OnClickListener ls = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int ages=Integer.parseInt(inputAge.getText().toString());
eti = new EditTextInput(inputName.getText().toString(),ages);
ServiceHelp.loadDATAeti();
if (v.getId() == R.id.deleteData) {
ServiceHelp.ExecSQLstatement("delete",SqlitMainActivity.this);
}
if (v.getId() == R.id.insertInto) {
ServiceHelp.ExecSQLstatement("insert",SqlitMainActivity.this);
}
if (v.getId() == R.id.selectData) {
ServiceHelp.ExecSQLstatement("select",SqlitMainActivity.this);
}
if (v.getId() == R.id.UpdataData) {
ServiceHelp.ExecSQLstatement("update",SqlitMainActivity.this);
}
}
};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐