Android SQLite小结

转载请标明出处:http://blog.csdn.net/wu_lai_314/article/details/43603787

在android应用中,对数据进行保存有很多种方式,比如通过网络上传到服务器,保存到本地自定义文件,保存到 sharedpreferences,或者保存到本地数据库。SQLite 作为一种轻量级的数据库,在移动设备(android,ios)中的表现尤为突出。麻雀虽小,五脏俱全。其他大型数据库拥有的常见功能,sqlite上也都有,sql语句的语法也大同小异。在该阶段学习使用sqlite的过程中,总结此文,作为学习笔记,也帮助入门菜鸟(PS:欢迎大牛指教)


android系统自带了很多api来帮助开发者使用sqlite, 其中最关键的需要用到两个类:SQLiteOpenHelper 和 SQLiteDatabase 类。前者是作为一个辅助类存在。下面列出


SQLiteOpenHelper
方法名方法描述
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)构造方法,一般是传递一个要创建的数据库名称那么参数
onCreate(SQLiteDatabase db)创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)版本更新时调用
getReadableDatabase()创建或打开一个只读数据库
getWritableDatabase()创建或打开一个读写数据库

附:

SQLiteOpenHelper 初始化的时候只会执行构造函数,不会执行函数onCreate(...) 和 onUpgrade(...) ,当调用getReadableDatabase或者getWritableDatabase函数时候,才会函数onCreate(...)。如果已经调用过了下次,执行getReadableDatabase或者getWritableDatabase函数时候系统不再调用onCreate函数

现在写一个小Demo 作为示例 (示例简单以至于应用程序界面上不会提示,详细过程会在logcat打印出来)


工程截图:





关键代码:

自定义 DBHelper  继承自SQLiteHelper


package com.example.sqldemo.data;

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

public class DBHelper extends SQLiteOpenHelper{
	
	private static final String TAG = "DBHelper";
	
	public DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
	}
	
	public DBHelper(Context context,String name,int version) {
		
		this(context, name, null, version);
	}
	
	public DBHelper(Context context,String name) {
		this(context, name, DBConstant.DATABASE_VERSION);
	}
	
	public DBHelper(Context context) {
		this(context, DBConstant.DATABASE_NAME);
	}
	
	@Override
	public void onCreate(SQLiteDatabase db) {
		
		String sql = "create table person(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),age int)";
		db.execSQL(sql);
		System.out.println(TAG + " 数据库 DBHelper onCreate");
	}

	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		System.out.println(TAG + " 数据库  DBHelper onUpgrade");
	}
}


onCreate函数中可以写sql语句,在第一次调用时候创建数据库,但是如果数据表比较多的话,建议在assert目录下新建一个文件写sql语句,这样只要在第一次调用onCreate函数时候读取文件内容即可


DBConstant 类,方便数据库变量的管理

package com.example.sqldemo.data;

public class DBConstant {
	
	public static final String DATABASE_NAME = "demo.db3";
	
	public static final int DATABASE_VERSION = 1;
}

自定义数据库操作类SQLDemoDatabase ,对数据库操作进行封装


package com.example.sqldemo.data;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


public class SQLDemoDatabase {
	
	private static final String TAG = "SQLDemoDatabase";
	
	private SQLiteDatabase db;
	private DBHelper dbHelper;
	
	public SQLDemoDatabase(DBHelper _dbHelper) {
		dbHelper = _dbHelper;
	}
	
	//增加数据
	public void insertData() {
	
		db = dbHelper.getReadableDatabase();
		
		//方法一:使用execSQL 插入
		db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{"zhangsan", 10});
		
		//方法二:使用insert方法插入
		//实例化一个ContentValus用来装载待插入的数据
		ContentValues cv = new ContentValues();
		cv.put("name", "lisi");
		cv.put("age", 12);
		db.insert("person", null, cv);
		
		
		System.out.println(TAG + " insertData");
		db.close();
	}
	
	//删除数据
	public void deleteData() {
		
		db = dbHelper.getReadableDatabase();

		//方法一:使用execSQL方式实现
		db.execSQL("delete from person where name='zhangsan'");
		
		
		//方法二:
		String whereClause = "name=?";//删除的条件
		String[] whereArgs = {"lisi"};//删除条件的参数
		
		db.delete("person", whereClause, whereArgs);
		
		
		System.out.println(TAG + " deleteData");
		db.close();
	}
	
	
	//修改数据
	public void updateData() {
		
		db = dbHelper.getReadableDatabase();

		//方法一:使用execSQL方式实现
		db.execSQL("update [person] set age = 5 where name = 'zhangsan'");
		
		
		//方法二:
		ContentValues cv = new ContentValues();//实例化ContentValues
		cv.put("age", 15);//添加要修改的字段及内容
		String whereClause = "name=?";//修改条件
		String[] whereArgs = {"lisi"};//添加要修改条件的参数
		db.update("person", cv, whereClause, whereArgs);
		
		
		
		System.out.println(TAG + " updateData");
		db.close();
		
	}
	
	//查询数据
	public void queryData() {
		
		db = dbHelper.getReadableDatabase();

		//方法一:使用rawQuery实现的带参数查询
		Cursor c = db.rawQuery("select * from person where name=?", new String[]{"zhangasan"});
		if(c.getCount() > 0) {
			
			while(c.moveToNext()) {
				
				String name = c.getString(c.getColumnIndex("name"));
				int age = c.getInt(c.getColumnIndex("age"));
				
				System.out.println("Person:[" + name + "," + age +"]");
			}
			
		} else {
			
			System.out.println(TAG + " 无记录");
			
		}
		
		
		//方法二
		Cursor c2 = db.query("person", null, null, null, null, null, null, null);
		if(c2.getCount() > 0) {
			
			while(c2.moveToNext()) {
				
				String name = c2.getString(c.getColumnIndex("name"));
				int age = c2.getInt(c.getColumnIndex("age"));
				
				System.out.println("Person:[" + name + "," + age +"]");
			}
			
		} else {
			
			System.out.println(TAG + " 无记录");
			
		}
		
		
		
		
		System.out.println(TAG + " queryData");
		db.close();
	}

}


MainActivity 类


package com.example.sqldemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.example.sqldemo.data.DBHelper;
import com.example.sqldemo.data.SQLDemoDatabase;


public class MainActivity extends ActionBarActivity implements OnClickListener{
	
	private static final String TAG = "MainActivity";
	
	private Context context;
	
	private DBHelper dbHelper;
	private SQLiteDatabase db;
	private SQLDemoDatabase sqlDB;
	
	private Button btnAdd;
	private Button btnDel;
	private Button btnUpdate;
	private Button btnQuery;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        init();
        
    }

    public void init() {
    	context = getApplicationContext();
    	
    	//初始化按钮
    	btnAdd = (Button)findViewById(R.id.btn_add);
    	btnDel = (Button)findViewById(R.id.btn_del);
    	btnUpdate = (Button)findViewById(R.id.btn_update);
    	btnQuery = (Button)findViewById(R.id.btn_query);
    	
    	//设置监听
    	btnAdd.setOnClickListener(this);
    	btnDel.setOnClickListener(this);
    	btnQuery.setOnClickListener(this);
    	btnUpdate.setOnClickListener(this);
    	
    	//初始化一个数据库辅助类
    	dbHelper = new DBHelper(context);
    	
    	//自定义的数据库封装类,对数据库的增删改查操作进行封装
    	sqlDB = new SQLDemoDatabase(dbHelper);
    	
    }

	@Override
	public void onClick(View view) {
		
		switch (view.getId()) {
		case R.id.btn_add:
			sqlDB.insertData();
			Toast.makeText(context, "add", Toast.LENGTH_SHORT).show();
			break;
		case R.id.btn_del:
			sqlDB.deleteData();
			Toast.makeText(context, "del", Toast.LENGTH_SHORT).show();
			break;
		case R.id.btn_update:
			sqlDB.updateData();
			Toast.makeText(context, "update", Toast.LENGTH_SHORT).show();
			break;
		case R.id.btn_query:
			sqlDB.queryData();
			Toast.makeText(context, "query", Toast.LENGTH_SHORT).show();
			break;
		default:
			break;
		}
		
	}
    
   
}

源码下载地址:http://download.csdn.net/detail/wu_lai_314/8431203


下载标明出处: http://blog.csdn.net/wu_lai_314/article/details/43603787






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值