SQLite简介:
SQLite是用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。
--支持高达2TB大小的数据库
--以单个文件的形式存在
--以B-Tree的数据结构形式存储在磁盘
特点主要包括:
1.轻量级 一个动态库 单文件
2.独立性 没有依赖,无需安装
3.隔离性 全部在一个文件夹中
4.跨平台 支持众多操作系统
5.多语言接口 支持众多编程语言
6.安全性 事务
关于事务处理的安全性问题:
--通过数据库上的独占性和共享锁来实现独立事务处理。
--多个进程可以再同一时间从同一数据库读取数据,但只有一个可以写入数据。
关于SQLite的数据类型:
--SQLite支持 NULL,INTEGER,REAL,TEXT和BLOB数据类型
--依次代表:空值,整型值,浮点值,字符串值,二进制对象
动态数据类型(弱引用)
--当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。
在Android中如何使用SQLite:
--SQLiteDataBase
--SQLiteOpenHelper
public class MainActivity extends Activity {
private static final String TABLENAME ="stutb";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
db.execSQL("create table if not exists stutb (_id integer primary key autoincrement, name text not null,sex text not null, age integer not null)");
ContentValues values = new ContentValues();
values.put("name", "張三");
values.put("sex", "男");
values.put("age", 18);
long rowId = db.insert("stutb", null, values);
values.clear();
values.put("name", "張三feng");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("name", "張三丰");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("name", "張三feng");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("sex", "女");
db.update("stutb", values, "_id>?", new String[]{"3"});//將全部id>3的人的性別改成女
db.delete("stutb", "name like?", new String[]{"%丰%"});//删除所有名字中带丰的人
Cursor c = db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "name");
if (c != null) {
String[] columns = c.getColumnNames();
while (c.moveToNext()) {
for (String columnName:columns) {
Log.i("info", c.getString(c.getColumnIndex(columnName)));
}
}
c.close();
}
}
SQLiteOpenHelper:
>SQLiteDatabase的帮助类,用于管理数据库的创建和版本更新
>一般是建立一个类继承它,并重写onCreate()和onUpgrade()方法
>方法说明:
* onCreate(SQLiteDataBase db) 创建数据库时调用
*onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 版本更新时调用
*getReadableDatabase() 创建或打开一个只读数据库
*getWritableDatabase() 创建或打开一个读写数据库
代码示例:
public class DBOpenHelper extends SQLiteOpenHelper{
public DBOpenHelper(Context context, String name) {
super(context, name, null, 1);
// TODO Auto-generated constructor stub
}
public DBOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
//首次创建数据库的时候调用 可以建库,建表的操作
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
db.execSQL("insert into stutb(name, sex, age)values('张三','女',18)");
}
//当数据库的版本发生变化的时候,会自动执行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
========================
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBOpenHelper helper = new DBOpenHelper(MainActivity.this, "stu.db");
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.rawQuery("select*from stutb", null);
if (c!= null) {
String[] cols = c.getColumnNames();
while (c.moveToNext()) {
for (String ColumnName:cols) {
Log.i("info", ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
}
}
c.close();
}
db.close();
}
}