1.SQLite資料庫: SQLite 是一個開源的嵌入式關係資料庫,實現自包容、零配置、支持事務的SQL資料庫引擎。 其特點是高度便攜、使 用方便、結構緊湊、高效、可靠。 與其他資料庫管理系統不同,SQLite 的安裝和運行非常簡單,在大多數情況下 - 只要確保 SQLite的二進位文件存在即可開
1.SQLite資料庫:
SQLite 是一個開源的嵌入式關係資料庫,實現自包容、零配置、支持事務的SQL資料庫引擎。 其特點是高度便攜、使
用方便、結構緊湊、高效、可靠。 與其他資料庫管理系統不同,SQLite 的安裝和運行非常簡單,在大多數情況下 - 只要確保
SQLite的二進位文件存在即可開始創建、連接和使用資料庫。
對於SDK來講,已經內置了SQLite的程式,因此我們不需要在SQLite官網上下載。一般資料庫採用的都是靜態的數據類
型,而我們的SQLite資料庫採用的是動態資料庫,會根據存入值自動判斷。SQLite 資料庫相對於其他資料庫最大的特點是我們
可以把各種類型的數據保存到任何欄位中,而不用關心欄位聲明的類型是什麼。有一種特殊的情況是,定義為INTEGER PRIMARY
KEY 的欄位只能存儲64位整數。SQLite具有以下五種類型:
1.NULL:空值;
2.INTEGER:帶符號的整形,具體取決於存入數字的範圍大小;
3.REAL:浮點數字;
4.TEXT:字元串文本;
5.BLOB:二進位對象;
2.相關操作
①創建資料庫:sqlite3 test.db;
②創建表:create table userInfo(userId integer primary key autoincrement,name varchar(20));
SQLite資料庫可以解析大部分標準SQL語句:
①查詢語句:select * from 表名 where 條件子句 group by 分組子句 having...order by 排序子句
例如:select * from userInfo order by id desc;
select * from userInfo group by name having count(*)>1
②插入語句:insert into 表名(欄位列表) values(值列表)
例如:insert into userInfo(name,age) values('張三',20)
③更新語句:update 表名 set 欄位名=值 where 條件子句
例如:update person set name = '張三' where id = 10
④刪除語句:delete from 表名 where 條件子句
例如:delete from userInfo where id = 10
實例代碼:
1.創建一個JavaBean
public class Student {
private int sid;
private String name;
private short age;
public Student() {
super();
}
public Student(int sid, String name, short age) {
super();
this.sid = sid;
this.name = name;
this.age = age;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", name=" + name + ", age=" + age + "]";
}
}
2.創建一個用於創建SQLite資料庫的類DBOpenHelper .java
public class DBOpenHelper extends SQLiteOpenHelper{
private static final String DBNAME="data.db";
private static CursorFactory factory=null;
private static final int VERSION=1;
public DBOpenHelper(Context context) {
super(context, DBNAME, factory, VERSION);
}
//當資料庫第一次被創建的時候,執行該方法
@Override
public void onCreate(SQLiteDatabase db) {
//sql語句中的欄位名與Student.java的成員變數對應
String sql="create table t_student (sid integer primary key,"
+ "name varchar(20),age integer)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
3.創建一個操作資料庫的類StudentDAO .java
public class StudentDAO {
private DBOpenHelper helper;
private SQLiteDatabase db;
public StudentDAO(Context context) {
// 創建DBOpenHelper的實例
helper = new DBOpenHelper(context);
}
public void add(Student student) {
/**
* Android使用getWritableDatabase()和getReadableDatabase()方法都可以獲取一個用於操作資料庫的SQLiteDatabase實例。
* (getReadableDatabase()方法中會調用getWritableDatabase()方法)
* 1.getWritableDatabase() 方法以讀寫方式打開資料庫,一旦資料庫的磁碟空間滿了,資料庫就只能讀而不能寫.
* 2.getReadableDatabase()方法則是先以讀寫方式打開資料庫,如果資料庫的磁碟空間滿了,就會打開失敗,當打
* 開失敗後會繼續嘗試以只讀方式打開資料庫。如果該問題成功解決,則只讀資料庫對象就會關閉,然後返回一個可讀寫的資料庫對象。
*/
db = helper.getWritableDatabase();
String sql = "insert into t_student (sid,name,age) values (?,?,?)";
db.execSQL(sql, new Object[] { student.getSid(), student.getName(),
student.getAge() });
}
public void update(Student student) {
db = helper.getWritableDatabase();
String sql = "update t_student set name = ?,age = ? where sid = ?";
db.execSQL(sql, new Object[] { student.getName(), student.getAge(),
student.getSid() });
}
public Student query(int sid) {
db = helper.getWritableDatabase();
String sql = "select sid,name,age from t_student where sid=?";
// Cursor實際上就是一種存儲數據的集合
Cursor cursor = db.rawQuery(sql, new String[] { String.valueOf(sid) });
// 在cursor查找到的結果集合中將游標移動到到下一行,也就是將游標指向查找到的下一個結果
if (cursor.moveToNext()) {
// 通過getColumnIndex()方法可以得到指定列的名稱,如果不存在返回-1
return new Student(cursor.getInt(cursor.getColumnIndex("sid")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getShort(cursor.getColumnIndex("age")));
}
return null;
}
// 這裡使用可變參數,來滿足參數個數不固定的情況
public void delete(Integer... sids) {
if (sids.length > 0) {
// StringBuffer線程安全的,多用於多線程中,用來對字元串進行複雜的操作
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sids.length; i++) {
sb.append('?').append(',');
}
sb.deleteCharAt(sb.length() - 1);
SQLiteDatabase database = helper.getWritableDatabase();
String sql = "delete from t_student where sid in (" + sb + ")";
database.execSQL(sql, (Object[]) sids);
}
}
public List<Student> getScrollData(int start, int count) {
List<Student> students = new ArrayList<Student>();
db = helper.getWritableDatabase();
String sql = "select * from t_student limit ?,?";
Cursor cursor = db.rawQuery(sql, new String[] { String.valueOf(start),
String.valueOf(count) });
while (cursor.moveToNext()) {
students.add(new Student(
cursor.getInt(cursor.getColumnIndex("sid")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getShort(cursor.getColumnIndex("age"))));
}
return students;
}
public long getCount(){
db=helper.getWritableDatabase();
String sql="select count(sid) from t_student";
Cursor cursor=db.rawQuery(sql,null);
if(cursor.moveToNext()){
return cursor.getLong(0);
}
return 0;
}
}