Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android開發之路09(淺談SQLite數據庫01),androidsqlite

android開發之路09(淺談SQLite數據庫01),androidsqlite

編輯:關於android開發

android開發之路09(淺談SQLite數據庫01),androidsqlite


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;

}

 

}

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved