Android==》数据篇=》SQLite

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();
}


}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。