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

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);
			}
		}
	};
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值