androidsqlite顯示
㈠ android sqlite數據怎麼顯示到UI界面中
1 sqlite增刪改的例子圖片
2 上面使用的例子來自android學習手冊,例子、源碼、文檔全部搞定,採用androidstudo的目錄結構,360手機助手中下載。。
3 使用SQLite。
現在的主流移動設備像Android、iPhone等都使用SQLite作為復雜數據的存儲引擎,在我們為移動設備開發應用程序時,也許就要使用到SQLite來存儲我們大量的數據,所以我們就需要掌握移動設備上的SQLite開發技巧。對於Android平台來說,系統內置了豐富的API來供開發人員操作SQLite,我們可以輕松的完成對數據的存取。
下面就向大家介紹一下SQLite常用的操作方法,為了方便,我將代碼寫在了Activity的onCreate中:
[java] view plain print?
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//打開或創建test.db資料庫
SQLiteDatabasedb=openOrCreateDatabase("test.db",Context.MODE_PRIVATE,null);
db.execSQL("DROPTABLEIFEXISTSperson");
//創建person表
db.execSQL("CREATETABLEperson(_,nameVARCHAR,ageSMALLINT)");
Personperson=newPerson();
person.name="john";
person.age=30;
//插入數據
db.execSQL("INSERTINTOpersonVALUES(NULL,?,?)",newObject[]{person.name,person.age});
person.name="david";
person.age=33;
//ContentValues以鍵值對的形式存放數據
ContentValuescv=newContentValues();
cv.put("name",person.name);
cv.put("age",person.age);
//插入ContentValues中的數據
db.insert("person",null,cv);
cv=newContentValues();
cv.put("age",35);
//更新數據
db.update("person",cv,"name=?",newString[]{"john"});
Cursorc=db.rawQuery("SELECT*FROMpersonWHEREage>=?",newString[]{"33"});
while(c.moveToNext()){
int_id=c.getInt(c.getColumnIndex("_id"));
Stringname=c.getString(c.getColumnIndex("name"));
intage=c.getInt(c.getColumnIndex("age"));
Log.i("db","_id=>"+_id+",name=>"+name+",age=>"+age);
}
c.close();
//刪除數據
db.delete("person","age<?",newString[]{"35"});
//關閉當前資料庫
db.close();
//刪除test.db資料庫
//deleteDatabase("test.db");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打開或創建test.db資料庫
SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
//創建person表
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
Person person = new Person();
person.name = "john";
person.age = 30;
//插入數據
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age});
person.name = "david";
person.age = 33;
//ContentValues以鍵值對的形式存放數據
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
//插入ContentValues中的數據
db.insert("person", null, cv);
cv = new ContentValues();
cv.put("age", 35);
//更新數據
db.update("person", cv, "name = ?", new String[]{"john"});
Cursor c = db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
c.close();
//刪除數據
db.delete("person", "age < ?", new String[]{"35"});
//關閉當前資料庫
db.close();
//刪除test.db資料庫
// deleteDatabase("test.db");
}
在執行完上面的代碼後,系統就會在/data/data/[PACKAGE_NAME]/databases目錄下生成一個「test.db」的資料庫文件,如圖:
上面的代碼中基本上囊括了大部分的資料庫操作;對於添加、更新和刪除來說,我們都可以使用
[java] view plain print?
db.executeSQL(Stringsql);
db.executeSQL(Stringsql,Object[]bindArgs);//sql語句中使用佔位符,然後第二個參數是實際的參數集
db.executeSQL(String sql);
db.executeSQL(String sql, Object[] bindArgs);//sql語句中使用佔位符,然後第二個參數是實際的參數集
除了統一的形式之外,他們還有各自的操作方法:
[java] view plain print?
db.insert(Stringtable,StringnullColumnHack,ContentValuesvalues);
db.update(Stringtable,Contentvaluesvalues,StringwhereClause,StringwhereArgs);
db.delete(Stringtable,StringwhereClause,StringwhereArgs);
db.insert(String table, String nullColumnHack, ContentValues values);
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
db.delete(String table, String whereClause, String whereArgs);
以上三個方法的第一個參數都是表示要操作的表名;insert中的第二個參數表示如果插入的數據每一列都為空的話,需要指定此行中某一列的名稱,系統將此列設置為NULL,不至於出現錯誤;insert中的第三個參數是ContentValues類型的變數,是鍵值對組成的Map,key代表列名,value代表該列要插入的值;update的第二個參數也很類似,只不過它是更新該欄位key為最新的value值,第三個參數whereClause表示WHERE表達式,比如「age > ? and age < ?」等,最後的whereArgs參數是佔位符的實際參數值;delete方法的參數也是一樣。
下面來說說查詢操作。查詢操作相對於上面的幾種操作要復雜些,因為我們經常要面對著各種各樣的查詢條件,所以系統也考慮到這種復雜性,為我們提供了較為豐富的查詢形式:
[java] view plain print?
db.rawQuery(Stringsql,String[]selectionArgs);
db.query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy);
db.query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit);
db.query(Stringdistinct,Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit);
db.rawQuery(String sql, String[] selectionArgs);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
上面幾種都是常用的查詢方法,第一種最為簡單,將所有的SQL語句都組織到一個字元串中,使用佔位符代替實際參數,selectionArgs就是佔位符實際參數集;下面的幾種參數都很類似,columns表示要查詢的列所有名稱集,selection表示WHERE之後的條件語句,可以使用佔位符,groupBy指定分組的列名,having指定分組條件,配合groupBy使用,orderBy指定排序的列名,limit指定分頁參數,distinct可以指定「true」或「false」表示要不要過濾重復值。需要注意的是,selection、groupBy、having、orderBy、limit這幾個參數中不包括「WHERE」、「GROUP BY」、「HAVING」、「ORDER BY」、「LIMIT」等SQL關鍵字。
最後,他們同時返回一個Cursor對象,代表數據集的游標,有點類似於JavaSE中的ResultSet。
下面是Cursor對象的常用方法:
[java] view plain print?
c.move(intoffset);//以當前位置為參考,移動到指定行
c.moveToFirst();//移動到第一行
c.moveToLast();//移動到最後一行
c.moveToPosition(intposition);//移動到指定行
c.moveToPrevious();//移動到前一行
c.moveToNext();//移動到下一行
c.isFirst();//是否指向第一條
c.isLast();//是否指向最後一條
c.isBeforeFirst();//是否指向第一條之前
c.isAfterLast();//是否指向最後一條之後
c.isNull(intcolumnIndex);//指定列是否為空(列基數為0)
c.isClosed();//游標是否已關閉
c.getCount();//總數據項數
c.getPosition();//返回當前游標所指向的行數
c.getColumnIndex(StringcolumnName);//返回某列名對應的列索引值
c.getString(intcolumnIndex);//返回當前行指定列的值
c.move(int offset); //以當前位置為參考,移動到指定行
c.moveToFirst(); //移動到第一行
c.moveToLast(); //移動到最後一行
c.moveToPosition(int position); //移動到指定行
c.moveToPrevious(); //移動到前一行
c.moveToNext(); //移動到下一行
c.isFirst(); //是否指向第一條
c.isLast(); //是否指向最後一條
c.isBeforeFirst(); //是否指向第一條之前
c.isAfterLast(); //是否指向最後一條之後
c.isNull(int columnIndex); //指定列是否為空(列基數為0)
c.isClosed(); //游標是否已關閉
c.getCount(); //總數據項數
c.getPosition(); //返回當前游標所指向的行數
c.getColumnIndex(String columnName);//返回某列名對應的列索引值
c.getString(int columnIndex); //返回當前行指定列的值
在上面的代碼示例中,已經用到了這幾個常用方法中的一些,關於更多的信息,大家可以參考官方文檔中的說明。
最後當我們完成了對資料庫的操作後,記得調用SQLiteDatabase的close()方法釋放資料庫連接,否則容易出現SQLiteException。
上面就是SQLite的基本應用,但在實際開發中,為了能夠更好的管理和維護資料庫,我們會封裝一個繼承自SQLiteOpenHelper類的資料庫操作類,然後以這個類為基礎,再封裝我們的業務邏輯方法。
下面,我們就以一個實例來講解具體的用法,我們新建一個名為db的項目,結構如下:
其中DBHelper繼承了SQLiteOpenHelper,作為維護和管理資料庫的基類,DBManager是建立在DBHelper之上,封裝了常用的業務方法,Person是我們的person表對應的JavaBean,MainActivity就是我們顯示的界面。
下面我們先來看一下DBHelper:
[java] view plain print?
packagecom.scott.db;
importandroid.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
{
_NAME="test.db";
privatestaticfinalintDATABASE_VERSION=1;
publicDBHelper(Contextcontext){
//CursorFactory設置為null,使用默認值
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
//資料庫第一次被創建時onCreate會被調用
@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL("CREATETABLEIFNOTEXISTSperson"+
"(_,nameVARCHAR,ageINTEGER,infoTEXT)");
}
//如果DATABASE_VERSION值被改為2,系統發現現有資料庫版本不同,即會調用onUpgrade
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
db.execSQL("");
}
}
package com.scott.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
//CursorFactory設置為null,使用默認值
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//資料庫第一次被創建時onCreate會被調用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person" +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age INTEGER, info TEXT)");
}
//如果DATABASE_VERSION值被改為2,系統發現現有資料庫版本不同,即會調用onUpgrade
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
}
}
正如上面所述,資料庫第一次創建時onCreate方法會被調用,我們可以執行創建表的語句,當系統發現版本變化之後,會調用onUpgrade方法,我們可以執行修改表結構等語句。
為了方便我們面向對象的使用數據,我們建一個Person類,對應person表中的欄位,如下:
㈡ android怎麼把sqlite里的數據用TextView顯示
TextView只是負責顯示數據,跟取數據沒關系。從資料庫查詢數據要自己實現,一般用SqliteDatabase類來打開資料庫並查詢,返回一個Cursor對象,再用Cursor對象去獲取你要查詢的值。
㈢ Android sqlite資料庫輸出顯示問題
安卓對SQLite表中的主鍵欄位要求比較苛刻,必須使用 _id 算是比較霸道吧。不過我們也沒辦法。。呵呵 你改改試一試, 我上次也是遇到這樣的問題,調了半天都沒解決。查API才發現的。希望能幫到你
㈣ 怎麼查看安卓sqlite資料庫
打開android項目的調試模式,然後找到顯示DDMS 選擇DDMS 切換到DDMS,顯示File Explorer窗口,找到/data/data/ 啰嗦一句,你可能在你自己的eclipse沒找到,File Explorer ,如果找不到的話,就去網上下載,"easyExplorer",放在eclipse的plugins目錄下:就OK了,重啟一下。 然後找到自己用的程序包的文件夾,打開databases,就看到sqlite資料庫文件了,然後到處就可以了。步驟上面標注好了,1,2,3。這樣就把sqlite資料庫文件以文件的方式導出來了,然後使用sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager等打開就可以了。 說一下另外一種方法,運行cmd,切換到android-sdk目錄,運行adb.exe,加上參數shell,出現#號就代表進入了shell命令模式,注意adb要在Android模擬器運行時才能進入shell:(必須要用root許可權,如果不是root許可權,去查詢別的資料,一般都是root許可權。OK了) 上面的不走還算詳細吧,大家應該了解了吧,我也是菜鳥,被逼著走過來的,加油。YES,我也可以的。 Android開發怎麼查看和管理sqlite資料庫
㈤ android怎麼查看sqlite
安裝SQLite Expert Professional 可以在網上下載,我下載的是試用版,沒有找注冊碼,但是試用不影響使用,反正用幾次查看到資料庫操作沒有錯誤就不用這個工具了。當然也可以使用Eclipse插件DDMS來查看,也可以使用Android工具包中的adb工具來查看。android項目中的sqlite資料庫位於/data/data/項目包/databases中。先介紹使用DDMS導出sqlite資料庫的操作和使用adb工具訪問sqlite資料庫。
首先打開android項目的調試模式,然後找到顯示DDMS
切換到DDMS,顯示File Explorer窗口,找到/data/data/ 如下圖1 ,
然後找到程序包的文件夾,打開databases,就能看到sqlite資料庫文件了。選擇將其導出。如下圖2.
這樣就把sqlite資料庫文件以文件的方式導出來了,然後使用sqlite界面管理工具如SQLite Expert Professional可以打開該資料庫了。其他 sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager也可以打開該資料庫。
使用adb工具訪問sqlite資料庫
Android Debug Bridge(ADB)是Android的一個通用調試工具,它可以更新設備或模擬器中的代碼,可以管理預定埠,可以在設備上運行shell命令,我們 知道android是基於linux內核,它的內部文件結構也是採用linux文件組織方式,因此訪問它的文件結構需要使用shell。這次我們就會用 shell來訪問android應用中的sqlite資料庫文件。
1、運行cmd,切換到android-sdk目錄,運行adb.exe,加上參數shell,出現#號就代表進入了shell命令模式,注意adb要在Android模擬器運行時才能進入shell:如下圖
進入資料庫所在目錄:
shell命令記住兩個基本命令ls和cd,類似windows命令提示行中的dir和cd,代表列出當前目錄下文件列表和進入到指定目錄。了解這兩個命令之後,就可以找到data/data/項目包名/databases 如下圖1, 找到資料庫文件如下圖2。
使用sqlite管理工具來進行資料庫操作
鍵入sqlite3 資料庫名就進入了sqlite管理模式了。
如下圖
設置sqlite環境變數:
在android的sdk中自帶了sqlite3.exe,這是sqlite的官方管理工具,它是一個命令行工具。為了使用方便,將其路徑注冊到系 統環境變數path中,即將;%Android_Home%加在Path中,這樣只樣運行sqlite3,就能直接打開sqlite管理工具了。
如下圖:
使用sqlite管理資料庫:
sqlite命令行工具默認是以;結束語句的。所以如果只是一行語句,要在末尾加;,或者在下一行中鍵入;,這樣sqlite命令才會被執行。
sqlite常用命令:
.tables--查看資料庫的表列表
.exit--退出sqlite命令行
其他命令可隨時.help查看幫助。sql命令可直接在此命令行上執行即可:
㈥ android 怎麼查看sqlite資料庫
在Android中查看和管理sqlite資料庫
在Android中可以使用Eclipse插件DDMS來查看,也可以使用Android工具包中的adb工具來查看。android
項目中的sqlite資料庫位於/data/data/項目包/databases中。
使用DDMS導出sqlite資料庫。
1、首先打開android項目的調試模式,然後找到顯示DDMS:
選擇DDMS
2、切換到DDMS,顯示File Explorer窗口,找到/data/data/
然後找到程序包的文件夾,打開databases,就能看到sqlite資料庫文件了。選擇將其導出。
這樣就把sqlite資料庫文件以文件的方式導出來了,然後使用sqlite界面管理工具如
sqlite administrator、sqlite man或者firefox插件sqlite manager等打開就可以了。
使用adb工具訪問sqlite資料庫
Android Debug Bridge(ADB)是Android的一個通用調試工具,它可以更新設備或模擬器中的代碼,
可以管理預定埠,可以在設備上運行shell命令,我們知道android是基於Linux內核,它的內部
文件結構也是採用linux文件組織方式,因此訪問它的文件結構需要使用shell。這次我們就會用shell
來訪問android應用中的sqlite資料庫文件。
1、運行cmd,切換到android-sdk目錄,運行adb.exe,加上參數shell,出現#號就代表進入了shell
命令模式,注意adb要在Android模擬器運行時才能進入shell:
2、shell命令記住兩個基本命令ls和cd,類似windows命令提示行中的dir和cd,代表列出當前目錄下
文件列表和進入到指定目錄。了解這兩個命令之後,就可以找到data/data/項目包名/databases:
找到資料庫文件:
接下來就是使用sqlite管理工具來進行操作了。鍵入sqlite3 資料庫名就進入了sqlite管理模式了。
在android的sdk中自帶了sqlite3.exe,這是sqlite的官方管理工具,它是一個命令行工具。為了使用
方便,將其路徑注冊到系統環境變數path中,即將;%Android_Home%加在Path中,這樣只樣運行sqlite3
,就能直接打開sqlite管理工具了。
sqlite管理資料庫篇
sqlite命令行工具默認是以;結束語句的。所以如果只是一行語句,要在末尾加;,或者在下一行中鍵入
;,這樣sqlite命令才會被執行。
sqlite常用命令:
.tables--查看資料庫的表列表
.exit--退出sqlite命令行
其他命令可隨時.help查看幫助。sql命令可直接在此命令行上執行即可
㈦ android中怎麼將SQLite中的數據顯示在TextView中,不是用ListView !!!
public List<String> findAllDate()(){//我的一個方法
List<String> list = new ArrayList<String>();
SQLiteDatabase database = dbopenhelper.getWritableDatabase();
Cursor cursor = database.rawQuery("select date from health", new String[]{});//這邊寫上你的查詢語句
while(cursor.moveToNext()){
list.add(cursor.getString(0));
}
cursor.close();
database.close();
return list;
}
之後就是把這個LIST顯示在Listview中;
如:SimpleAdapter adapter=new SimpleAdapter(Listview.this,list
,R.layout.viewdate,new String[]{"date"},
new int[]{R.id.tdate});
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { //事件
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
....
}
});
希望對你有用
㈧ 安卓開發sqlite資料庫在列表中顯示的問題
db.close();
cursor.close();
這兩個去掉
試下
理由是:查詢時不要去關閉連接,否則緩存中的數據無法獲取
希望有作用!
㈨ android中怎麼將SQLite中的數據顯示在Listview中(用Cursor)
public List<String> findAllDate(){//我的一個方法
List<String> list = new ArrayList<String>();
SQLiteDatabase database = dbopenhelper.getWritableDatabase();
Cursor cursor = database.rawQuery("select date from health", new String[]{});//這邊寫上你的查詢語句
while(cursor.moveToNext()){
list.add(cursor.getString(0));
}
cursor.close();
database.close();
return list;
}
之後就是把這個LIST顯示在Listview中;
如:SimpleAdapter adapter=new SimpleAdapter(Listview.this,list
,R.layout.viewdate,new String[]{"date"},
new int[]{R.id.tdate});
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { //事件
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
....
}
});
希望對你有用