Android中5大数据存储(三)---SQLite数据库存储

SQLite是一个轻量级的、嵌入式的关系型数据库,它遵守ACID的关联式数据库管理系统,是主要针对于嵌入式设备专门设计的数据库,由于其本身占用的存储空间较小,所以目前已经在Android操作系统中广泛使用,而且SQLite数据库可以方便的使用SQL语句实现数据库的增、删、改、查、事务控制等操作。

在Android系统中,每一个android.database.sqlite.SQLiteDatabase类的实例都代表了一个SQLite数据库的操作,SQLiteDatabase类本身只是一个数据库的操作类,但是如果想要进行数据库的操作,还是需要android.database.sqlite.SQLiteOpenHelper类的帮助,但是其是个抽象类,使用时需要定义其自雷,并且在子类中覆写相应的抽象方法。

定义SQLiteOpenHelper的子类------MyDatabaseHelper.java

package cn.norysn.createdb;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabaseHelper extends SQLiteOpenHelper {

	//数据库名称
	private static final String DATABASE_NAME = "norysn.db";
	//数据库版本
	private static final int DATABASE_VERSION = 1;
	//数据表名称
	private static final String TABLE_NAME = "mytab";
	public MyDatabaseHelper(Context context) {
		//调用父类构造
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		//创建数据表
		String sql = "CREATE TABLE "+TABLE_NAME+"("+
				"id       INTEGER	     PRIMARY KEY,"+
				"name      VARCHAR(50)   NOT NULL,"+
				"birthday  DATE          NOT NULL)";
		try {
			db.execSQL(sql);
		} catch (SQLiteException e) {
			//e.printStackTrace();
		}
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql = "DROP TABLE IF EXISTS "+TABLE_NAME;//SQL语句
		try {
			db.execSQL(sql);
		} catch (SQLiteException e) {
			// TODO: handle exception
		}
		//创建表
		this.onCreate(db);
	}

}
在子类中覆写了里面的onCreate()和onUpgrade()的方法,其中,onCreate()方法负责表的创建,但是此方法并不是在实例化SQLiteOpenHelper类的对象时调用,而是通过对象调用了getReadableDatabase()或getWriteableDatabase()方法时才会调用,而onUpgrade()方法负责表的删除,并且在删除之后重新创建数据表,当数据库需要升级时会调用此方法。

=======================================================================================

定义一个操作类(MytabOperate.java)来封装数据库的创建、增加、删除、修改、查询的方法

package cn.norysn.operatedb;

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

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class MyTabOperate{
	//数据表名称
	private static final String TABLE_NAME = "mytab";
	private SQLiteDatabase db = null;
	//构造方法
	public MyTabOperate(SQLiteDatabase db){
		this.db = db;
	}
	//insert operate
	public void insert(String name, String birthday){
		String sql = "insert into "+TABLE_NAME+
				" (name, birthday) values(?,?)";
		Object args[] = new Object[]{name, birthday};
		try {
			db.execSQL(sql, args);
			db.close();
		} catch (SQLiteException e) {
			// TODO: handle exception
		}
	}
	//update operate
	public void update(int id, String name, String birthday){
		String sql = "update "+TABLE_NAME+
				" set name=?,birthday=? where id=?";
		Object args[] = new Object[]{name, birthday, id};
		db.execSQL(sql, args);
		db.close();
	}
	//delete operate
	public void delete(int id){
		String sql = "delete from "+TABLE_NAME+
				" where id=?";
		Object args[] = new Object[]{id};
		db.execSQL(sql, args);
		db.close();
	}
	//query operate
	public List<String> query(){
		//定义List集合
		List<String> all = new ArrayList<String>();
		//定义sql语句
		String sql = "select * from "+TABLE_NAME;
		Cursor result = db.rawQuery(sql, null);
		//result.moveToLast()
		for(result.moveToFirst(); !result.isAfterLast(); result.moveToNext()){
			//设置集合数据
			all.add(" ["+result.getInt(0)+"] "+" "+result.getString(1)+", "
					+result.getString(2));
		}
		db.close();
		return all;
	}
}


有过JDBC学习的读者都清除,由于本程序采用的是拼凑SQL语句的形式,因此代码存在SQL注入漏洞以及无法处理一些敏感字符的问题,为了解决这个问题,在开发中往往会使用占位符的形式俩完成。

=======================================================================================

定义一个Activity(MySQLiteDemo.java)程序,通过监听按钮事件来完成相应的数据操作

package cn.norysn.sqlitedata;

import cn.norysn.createdb.MyDatabaseHelper;
import cn.norysn.operatedb.MyTabOperate;
import android.app.Activity;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;

public class MySQLiteDemo extends Activity {

	//数据库操作
	private SQLiteOpenHelper helper = null;
	//定义按钮
	private Button createBtn = null; 
	private Button insertBtn = null; 
	private Button updateBtn = null; 
	private Button deleteBtn = null; 
	private Button queryBtn = null; 
	private LinearLayout mylayout = null;
	
	//实例化对象
	private MyTabOperate myTab = null;
	
	//计数统计
	private static int count = 0;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_sqlite_demo);
        
        
        //定义数据库创建的辅助类
    	helper = new MyDatabaseHelper(this);
    	//取得可更新的数据库
    	//myTab = new MyTabOperate(helper.getWritableDatabase());
        
        //获取组件
        createBtn = (Button)findViewById(R.id.createbtn);
        insertBtn = (Button)findViewById(R.id.insertbtn);
        updateBtn = (Button)findViewById(R.id.updatebtn);
        deleteBtn = (Button)findViewById(R.id.deletebtn);
        queryBtn = (Button)findViewById(R.id.querybtn);
        mylayout = (LinearLayout)findViewById(R.id.LinearLayout1);
        //设置监听事件
        createBtn.setOnClickListener(new BtnListener());
        insertBtn.setOnClickListener(new BtnListener());
        updateBtn.setOnClickListener(new BtnListener());
        deleteBtn.setOnClickListener(new BtnListener());
        queryBtn.setOnClickListener(new BtnListener());
    }
    //设置监听类
    public class BtnListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			switch(v.getId()){
			case R.id.createbtn:
				create();
				break;
			case R.id.insertbtn:
				insert();
				break;
			case R.id.updatebtn:
				update();
				break;
			case R.id.deletebtn:
				delete();
				break;
			case R.id.querybtn:
				query();
				break;
			}
		}
    	
    }
    //设置按钮的响应方法
    public void create(){
    	
    	//以修改的方式打开数据库
    	helper.getWritableDatabase();
    }
    public void insert(){
    	//取得可更新的数据库
    	myTab = new MyTabOperate(helper.getWritableDatabase());
    	myTab.insert("Norysn"+count++, "1991-01-01");
    }
    public void update(){
    	//取得更新的数据库
    	myTab = new MyTabOperate(helper.getWritableDatabase());
    	myTab.update(1, "Norysn", "1989-02-01");
    }
    public void delete(){
    	myTab = new MyTabOperate(helper.getWritableDatabase());
    	myTab.delete(3);
    }
    public void query(){
    	myTab = new MyTabOperate(helper.getReadableDatabase());
    	//定义ListView组件
    	ListView listView = new ListView(this);
    	//将数据包装
    	//单行显示
    	listView.setAdapter(new ArrayAdapter<String>(this, 
    			android.R.layout.simple_list_item_1, myTab.query()));
    	//追加组件
    	mylayout.addView(listView);
    	//setContentView(listView);
    }
}

页面布局和查询效果截图:

    


创建的数据库文件位置截图


 源码下载   密码:w9hd




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值