Android中的SQLite SQLiteOpenHelper SQLiteDatabase及其例子

本文详细介绍了Android中SQLite数据库的使用,包括四大基本操作(插入、删除、更新、查询),以及SQLiteOpenHelper和SQLiteDatabase的运用。通过一个具体的例子展示了如何在布局中设置按钮,以及如何在Activity中响应按钮点击事件,调用数据库操作接口。

总结一下最近研究的Android中SQLite的使用:参考了《Android应用开发揭秘》及其http://blog.youkuaiyun.com/xys289187120/article/details/6661099中的文章

1、SQLite

数据库最经典的四个操作添加(Insert)、删除(delete)、修改(update)、查询(select),在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据

2、SQLiteOpenHelper

实际开发中为了更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类。这个类中需要重写两个方法onCreate和onUpgrade。在构造函数时并没有真正的创建数据库,而是在通过继承自SQLiteOpenHelper类的对象调用getWritableDatabase或者getReadableDatabase方法时才真正的创建数据库,并且返回一个SQLiteDatabase类型的对象

3、SQLiteDatabase

我们可以通过SQLiteDatabase的两个接口就可以完成数据库最经典的四个操作添加(Insert)、删除(delete)、修改(update)、查询(select),这两个接口是execSQL和rawQuery,其中添加(Insert)、删除(delete)、修改(update)需要使用execSQL来执行SQL语句,而查询(select)需要使用rawQuery。其实很多教材还介绍了通过SQLiteDatabase的insert、delete、update接口来操作数据库,个人感觉如果对SQL典型的SQL语句比较熟悉的话,还是用execSQL和rawQuery比较好,因为函数的参数直接是SQL语句。

 

最后想通过一个例子更好的记录一下如何使用数据库

 1、layout的xml文件,主要是8个button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="创建数据库" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="删除数据库" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="创建表" />
    
    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="删除表" />

    <Button
        android:id="@+id/button5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="在表中添加一条数据" />

    <Button
        android:id="@+id/button6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="从表中删除一条数据" />

    <Button
        android:id="@+id/button7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="在表中修改一条数据" />

    <Button
        android:id="@+id/button8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="在表中查找一条数据" />
</LinearLayout>

2、MyDatabaseAdapter类中包含所有对数据库操作的接口,外面可以直接调用

public class MyDatabaseAdapter {

	private final static String DATABASE_NAME = "xys.db";
	private final static int DB_VERSION = 1;
	private final static String TABLE_NAME = "";
	private final static String DB_CREATE_TABLE = "CREATE TABLE test " +
			"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
			"name TEXT,hp INTEGER DEFAULT 100," +
			"mp INTEGER DEFAULT 100," +
			"number INTEGER)";
	
	public SQLiteDatabase m_SQLiteDatabase = null;
	public DatabaseHelper m_DatabaseHelper = null;
	private static class DatabaseHelper extends SQLiteOpenHelper
	{
		private static DatabaseHelper mInstance = null; 
		public DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DB_VERSION);
			// TODO Auto-generated constructor stub
		}
		static synchronized DatabaseHelper getInstance(Context context) {  
		if (mInstance == null) {  
		       mInstance = new DatabaseHelper(context);  
		}  
		return mInstance;  
		}  
		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			db.execSQL(DB_CREATE_TABLE);
		}
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
			
		}
	}
	public MyDatabaseAdapter(Context context)
	{
		m_DatabaseHelper = DatabaseHelper.getInstance(context);
		//Create database
		m_SQLiteDatabase = m_DatabaseHelper.getWritableDatabase();
	}
	public boolean deleteDatabase(Context context) 
	{  
	    return context.deleteDatabase(DATABASE_NAME);  
    }
	public void createTable(String sql)
	{
		m_SQLiteDatabase.execSQL(sql);
	}
	public void deleteTable(String sql)
	{
		m_SQLiteDatabase.execSQL(sql);
	}
	
	public void insertData(String sql)
	{
		m_SQLiteDatabase.execSQL(sql);
	}
	public void deleteData(String sql)
	{
		m_SQLiteDatabase.execSQL(sql);
	}
	public void updateData(String sql)
	{
		m_SQLiteDatabase.execSQL(sql);
	}
	//Select这个比较特殊不能通过execSQL接口执行查询,而要用rawQuery或者
	public void selectData(String sql)
	{
		Cursor cursor = m_SQLiteDatabase.rawQuery(sql, null);
		while (cursor.moveToNext()) {  
		int id = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始  
		String name = cursor.getString(1);//获取第二列的值  
		int number = cursor.getInt(2);//获取第三列的值  
		}  
		cursor.close();  
		m_SQLiteDatabase.close();  
	}
}


 3、Activity:主要是点击8个按钮时调用MyDatabaseAdapter类中的接口进行处理

public class SQLiteActivity extends Activity {
    private MyDatabaseAdapter m_MyDatabaseAdapter = null;
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
			}});
        
        Button button2 = (Button)findViewById(R.id.button2);
        button2.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				m_MyDatabaseAdapter.deleteDatabase(SQLiteActivity.this);
			}});
        
        Button button3 = (Button)findViewById(R.id.button3);
        button3.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "create table gameInfo" +
						"(_id INTEGER PRIMARY KEY," +
						"name TEXT," +
						"hp INTEGER DEFAULT 100," +
						"mp INTEGER DEFAULT 100," +
						"number INTEGER)";
				m_MyDatabaseAdapter.createTable(sql);
			}});
        Button button4 = (Button)findViewById(R.id.button4);
        button4.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "DROP TABLE gameInfo";
				m_MyDatabaseAdapter.deleteTable(sql);
			}});
        //Insert
        Button button5 = (Button)findViewById(R.id.button5);
        button5.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "INSERT INTO gameInfo (_id,name,number) values(1,'luliyuan12',12345)";
				m_MyDatabaseAdapter.insertData(sql);
			}});
        //Delete
        Button button6 = (Button)findViewById(R.id.button6);
        button6.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "DELETE FROM gameInfo where _id=1";
				m_MyDatabaseAdapter.deleteData(sql);
			}});
        //Update
        Button button7 = (Button)findViewById(R.id.button7);
        button7.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "update gameInfo set number=2381455 where _id=1";
				m_MyDatabaseAdapter.updateData(sql);
			}});
        //Select
        Button button8 = (Button)findViewById(R.id.button8);
        button8.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				m_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);
				String sql = "select * from gameInfo";
				m_MyDatabaseAdapter.selectData(sql);
			}});
        
    }
}


 注意:

封装了一个DatabaseHelper类继承SQLiteOpenHelper 使用了设计模式中的单例模式来处理这个类,单例模式是常见的代码设计模式之一,它的好处是在于避免在内存中频繁的实例化所以将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只须要通过getInstance()就可以直接拿到这个静态对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值