Android 数据库之sqllite详解

本文详细介绍了SQLite作为轻量级数据库在Android中的使用,包括其ACID事务、零配置等特性。文章通过一个实际的Android应用示例,展示了如何进行用户登录验证以及在SQLite中进行CRUD操作,涉及DBHelper、DBManager类的设计以及多个活动和布局文件的配合使用。
摘要由CSDN通过智能技术生成

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

功能特性

1. ACID事务 [1] 

2. 零配置 – 无需安装和管理配置

3.储存在单一磁盘文件中的一个完整的数据库

4.数据库文件可以在不同字节顺序的机器间自由的共享

5.支持数据库大小至2TB

6. 足够小, 大致13万行C代码, 4.43M

7. 比一些流行的数据库在大部分普通数据库操作要快

8. 简单, 轻松的API

9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

11. 独立: 没有额外依赖

12. 源码完全的开源, 你可以用于任何用途, 包括出售它

13. 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

 

 

我们通过一个实例在android里如何操作sqllite。

我们通过先验证用户登录,并显示用户对应的行程单,并对行程单进行CRUD操作。

我们先看文件大体结构:

DBHelper类:继承于SQLiteOpenHelper,管理数据库操作的辅助类。

package com.example.project2.control;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper{

	private static final int DATABASE_VERSION = 1;
	private static final String DATABASE_NAME = "16201327.db";

	public DBHelper(Context context) {
	
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
		// TODO Auto-generated constructor stub
	}
	//数据库第一次被创建时onCreate会被调用,然后创建表
	@Override
	public void onCreate(SQLiteDatabase db) {
		
		// TODO Auto-generated method stub
		String sql = "CREATE TABLE IF NOT EXISTS user"+"(id INTEGER PRIMARY KEY AUTOINCREMENT,username VARCHAR, password VARCHAR)";	
		db.execSQL(sql);
		
		db.execSQL("CREATE TABLE IF NOT EXISTS sedualling"+"(sedid INTEGER PRIMARY KEY AUTOINCREMENT,id INTEGER, sedname VARCHAR, sedtext VARCHAR, sedtime DATE, FOREIGN KEY (id) REFERENCES user(id))");
	}
	//若版本发生变化即newVersion > oldVersion会调用此方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS user");  
        db.execSQL("DROP TABLE IF EXISTS sedualling");  
        onCreate(db);  

	}
	
}

DBManager类:数据库的CRUD实现操作。

package com.example.project2.dao;

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.util.Log;

import com.example.project2.control.DBHelper;
import com.example.project2.pojo.Sedualling;
import com.example.project2.pojo.User;

public class DBManager {
	private DBHelper helper;
	private SQLiteDatabase db;
	
	public DBManager(Context context){
		helper = new DBHelper(context);
		db = helper.getWritableDatabase();//这个方法会帮我们创建数据库
	}
	/**
	 * 增加用户
	 *  @param users
	 */
	
	public void addUser(List<User> users){
		db.beginTransaction();	//事务开始
		try{
			for(User user: users){
				String sql = "INSERT INTO user(username, password) VALUES(?,?)";
				db.execSQL(sql,new Object[]{user.getUserName(), user.getPassword()});
				
			}
			db.setTransactionSuccessful();
		}finally{
			db.endTransaction();
		}
	}
	/**
	 * 增加行程表
	 * @param seduallings
	 */
	public void addSedulling(List<Sedualling> seduallings){
		db.beginTransaction();	//事务开始
		try{
			for(Sedualling sedualling: seduallings){
				String sql = "INSERT INTO  sedualling(id,sedname, sedtext, sedtime) VALUES(?,?,?,?)";
				db.execSQL(sql,new Object[]{sedualling.getId(),sedualling.getSedName(), sedualling.getSedText(), sedualling.getSedTime()});
				
			}
			db.setTransactionSuccessful();
		}finally{
			db.endTransaction();
		}
	}
	
	/**
	 * 更新行程表
	 * @param sedualling
	 */
	public int update(Sedualling sedualling){
		ContentValues cv = new ContentValues();
		cv.put("sedname", sedualling.getSedName());
		cv.put("sedtext", sedualling.getSedText());
		cv.put("sedtime", sedualling.getSedTime());
		//表名+ContentValue+条件+String[]
		int result = db.update("sedualling", cv,"sedid=?" , new String[]{sedualling.getSedid()+""});
		return result;
	}
	/*
	 * 删除行程表
	 */
	public int delete(int sedid) {
		int result = db.delete("sedualling","sedid = ?",new String[]{sedid+""});
		return result;
	}
	/*
	 * 根据用户名查询id
	 */
	public User queryId(User user){
		String userName = user.getUserName();
		if(userName != null){
			Cursor c = db.rawQuery("select id,password from user where username=?", new String[]{user.getUserName()});
			if(c.moveToNext()){
				user.setPassword(c.getString(c.getColumnIndex("password")));
				Log.i("id", "id");
				user.setId(c.getInt(c.getColumnIndex("id")));
			}
		}
		return user;
	}
	
	/*
	 * 根据用户id查询行程表
	 */
	public List<Sedualling> querySed(int id){
		List<Sedualling> list = new ArrayList<Sedualling>();
		Cursor c = db.rawQuery("sele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值