android開發之路09(淺談SQLite資料庫01),androidsqlite

來源:互聯網
上載者:User

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;

}

 

}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.