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