Android的頁面顯示的數據主要是從數據庫中獲取數據的,android開發中使用的是SQLite數據庫。
SQLite的優點:
-
輕量級
使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能, 而且那個動態庫的尺寸想當小。 -
獨立性
SQLite 數據庫的核心引擎不需要依賴第三方軟件,也不需要所謂的“安裝”。 -
隔離性
SQLite 數據庫中所有的信息(比如表、視圖、觸發器等) 都包含在一個文件夾內,方便管理和維護。 -
跨平台
SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統 也是能夠運行,比如:Android。 -
多語言接口
SQLite 數據庫支持多語言編程接口。 -
安全性
SQLite 數據庫通過數據庫級上的獨占性和共享鎖來實現獨立事務處理。 這意味着多個進程可以在同一時間從同一數據庫讀取數據, 但只能有一個可以寫入數據。
在Android中連接SQLite需要先創建一個類,並且這個類extends SQLiteOpenHelper,代碼如下:
package com.example.sql; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MySQLDatabase extends SQLiteOpenHelper { private static final String db_name = "myDatabse";//自定義的數據庫名; private static final int version =1;//版本號 public MySQLDatabase(Context context) { super(context, db_name, null, version); } //該方法會自動調用,首先系統會檢查該程序中是否存在數據庫名為‘myDatabase’的數據庫,如果存在則不會執行該方法,如果不存在則會執行該方法。 @Override public void onCreate(SQLiteDatabase arg0) { String sql ="create table wx_user(" + "id int primary key," + "name varchar(30)," + "tou varchar(20)," + "content varchar(50)," + "dateTime varchar(30)" + ")"; arg0.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }
SQLiteOpenHelper是SQLiteDatabase的一個幫助類, 用來管理數據庫的創建和版本的更新。 一般是建立一個類繼承它,並實現它的onCreate和onUpgrade方法。 常用的方法有:
onCreate(SQLiteDatabase db)
創建數據庫時調用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
版本更新時調用
getReadableDatabase()
創建或打開一個只讀數據庫
getWritableDatabase()
創建或打開一個讀寫數據庫
這里創建了數據庫類,接下來是往數據庫中插入數據;
//實例化剛才上面我們創建的那個類 MySQLDatabase mySQLDatabase = new MySQLDatabase(MainActivity.this); /*在通過getReadableDatabase()方法 或者通過getWritableDatabase() 獲得SQLDatabse類的對象;通過SQLDatabase類的對象來對數據進行操作;*/ SQLiteDatabase sqlDatabase = mySQLDatabase.getReadableDatabase();
SQLDatabase類的常用方法:
-
(long) insert(String table,String nullColumnHack,ContentValues values)
-
(int) delete(String table,String whereClause,String[] whereArgs)
刪除數據行的便捷方法 -
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新數據行的便捷方法
-
(void) close()
關閉數據庫 -
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
查詢指定的數據表返回一個帶游標的數據集 -
(Cursor) rawQuery(String sql, String[] selectionArgs)
運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL注入) -
(void) execSQL(String sql)//這個是執行SQL語句(sql字符串可以是select,delete,或者insert,update中的任意語句)
//往數據庫中插入數據的代碼,在這里我使用的是execSQL(sql); for(int i=0;i<20;i++){ String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'張校花"+i+"','aa','你今天會被打','11月19日')"; sqlDatabase.execSQL(sql);
}
往數據庫中參入數據之后,我們再將數據庫中的數據取出來看看;我們需要先創建一個實體類;
package com.example.entiy; public class unserInFo { private int id; private String name; private String dateTime; private String tou; private String content; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDateTime() { return datetime; } public void setDateTime(String dateTime) { this.dateTime= dateTime; } public String getTou() { return tou; } public void setTou(String tou) { this.tou = tou; } @Override public String toString() { return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou=" + tou+ "]"; } public unserInFo() { super(); // TODO Auto-generated constructor stub } }
獲取數據
//定義一個集合用來存放所有的結果 List<unserInFo> user = new ArrayList<unserInFo>(); //通過游標來獲取表wx_user的信息, Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null); //先判斷是否有第一條數據(ic.moveToFirst()將游標移到第一條數據,如果沒有第一條數據則返回false,否則返回true) if(c.moveToFirst()){ //通過getCount()來決定循環的次數getCount()是游標的總數量。 for (int i = 0; i<c.getCount();i++) { unserInFo uif = new unserInFo(); //將游標移動到下一條數據 c.moveToNext(); uif.setId(c.getInt(c.getColumnIndex("id"))); uif.setLastdate(c.getString(c.getColumnIndex("dateTime"))); uif.setName(c.getString(c.getColumnIndex("name"))); uif.setZhao(c.getString(c.getColumnIndex("tou"))); uif.setContent(c.getString(c.getColumnIndex("content"))); user.add(uif); } }
//最后數據庫中獲取到的數據就全部存放到user集合中了,我們只需要遍歷user就能顯示數據了。