標籤:
在寫文章的核心的部分時我想簡單的提一個小技巧:
大家通常在布局的使用中可能經常性的發現一個頭部或者尾部的一個整體會被經常性的使用,在通常的java程式中這樣重複的部分一般考慮用類進行封裝,在android中xml式的檔案中會怎麼樣處理?這裡考慮用xml檔案進行組件的封裝。
先看我寫的一個實際的xml檔案
可以看出這樣的xml檔案中包含很多的圖片檔案,我們在定義一個drawable的時候可以通過xml定義的drawable對象。它使得一個圖片能在不同的狀態下顯示不同的圖案,比如一個Button,它有pressed,focused,或者其它狀態,通過使用state list drawable,你就可以為每種狀態提供不同的圖片。
drawable對象還有一些其他的屬性:
android:drawable 放一個drawable資源
android:state_pressed 是否按下,如一個按鈕觸摸或者點擊。
android:state_focused 是否取得焦點,比如使用者選擇了一個文字框。
android:state_hovered 游標是否懸停,通常與focused state相同,它是4.0的新特性
android:state_selected 被選中,它與focus state並不完全一樣,如一個list view 被選中的時候,它裡面的各個子組件可能通過方向鍵,被選中了。
android:state_checkable 組件是否能被check。如:RadioButton是可以被check的。
android:state_checked 被checked了,如:一個RadioButton可以被check了。
android:state_enabled 能夠接受觸摸或者點擊事件
android:state_activated 被啟用
android:state_window_focused 應用程式是否在前台,當有通知欄被拉下來或者一個對話方塊彈出的時候應用程式就不在前台了
下面將進入文章的整體:sqlite的一些操作可sqlite的資料庫訪問(包括命令訪問和可視化DDMS訪問)
問題的開始:我最近需要完成一個關於android的小項目,項目採用原型開發的方式,到開始階段我們已經劃分好需要的模組和一些簡單的功能的設想。
但是最起碼還需要使用者的登入和註冊的功能模組的實現。(其實這已經有了兩種方式一種是調用sqlite和通過網頁servlet的驗證)
為了有初期的體驗和現有android的基礎,所以在初期選擇Android的使用者註冊和登入選擇的是sqlite資料庫進行驗證。
下面是我對sqlite的一些簡單的認識:
SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入 式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低。
好了到這裡我已經明白為什麼要使用他,那麼下面就是去使用他,然後再和其他的資料庫進行比較:
Sqlite的操作必須的明白幾個對象,然後明白調用關係,其後就可以進行開發:
1.首先是SQLiteDatabase,所有的資料庫開發都是基於SQLiteDatabase的開發。而sqlite提供了這個API我們只要使用這個資料庫開發,在程式中只要開啟SQLiteDatabase就可以進行讀寫操作。
2.SQLiteOpenHelper類的使用
其實通過SQLiteDatabase我們已然可以對其進行資料庫的增刪改查,但是我們通常不直接在此基礎上,而是通過一個工具——SQLiteOpenHelper
Android 為了讓我們能夠更加方便地管理資料庫,專門提供了一個 SQLiteOpenHelper幫
助類,藉助這個類就可以非常簡單地對資料庫進行建立和升級。
SQLiteOpenHelper 是一個抽象類別,我們通常需要繼承它,並且實現裡面的3個函數:
該類是SQLiteDatabase一個輔助類。這個類主要產生一 個資料庫,並對資料庫的版本進行管理。當在程式當中調用這個類的方法getWritableDatabase()或者 getReadableDatabase()方法的時候,如果當時沒有資料,那麼Android系統就會自動產生一個資料庫。 SQLiteOpenHelper 是一個抽象類別,我們通常需要繼承它,並且實現裡面的3個函數(在接下來的程式中會有體現)。
1.onCreate(SQLiteDatabase)
在資料庫第一次產生的時候會調用這個方法,也就是說,只有在建立資料庫的時候才會調用,當然也有一些其它的情況,一般我們在這個方法裡邊產生資料庫表。
2. onUpgrade(SQLiteDatabase,int,int)
當資料庫需要升級的時候,Android系統會主動的調用這個方法。一般我們在這個方法裡邊刪除資料表,並建立新的資料表,當然是否還需要做其他的操作,完全取決於應用的需求。
3. onOpen(SQLiteDatabase):
這是當開啟資料庫時的回呼函數,一般在程式中不是很常使用。
3.是一個查詢中Cursor的使用:
這也是在登入時查詢資料庫必須用到的一個對象
Cursor指向的就是每一條資料。它提供了很多有關查詢的方法,具體方法如下:
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各個參數的意義說明:
參數table:表名稱
參數columns:列名稱數組
參數selection:條件字句,相當於where
參數selectionArgs:條件字句,參數數組
參數groupBy:分組列
參數having:分組條件
參數orderBy:排序列
參數limit:分頁查詢限制
參數Cursor:傳回值,相當於結果集ResultSet
Cursor是一個遊標介面,提供了遍曆查詢結果的方法,如移動指標方法move(),獲得列值方法getString()等.
Cursor遊標常用方法
方法名稱 |
方法描述 |
getCount() |
獲得總的資料項目數 |
isFirst() |
判斷是否第一條記錄 |
isLast() |
判斷是否最後一條記錄 |
moveToFirst() |
移動到第一條記錄 |
moveToLast() |
移動到最後一條記錄 |
move(int offset) |
移動到指定記錄 |
moveToNext() |
移動到下一條記錄 |
moveToPrevious() |
移動到上一條記錄 |
getColumnIndexOrThrow(String columnName) |
根據列名稱獲得列索引 |
getInt(int columnIndex) |
獲得指定列索引的int類型值 |
getString(int columnIndex) |
獲得指定列縮影的String類型值 |
因為這個講解很抽象所以通過實際的例子來瞭解Sqlite的增刪改查CRUD操作(以下是部分):
1 package com.lingdududu.testSQLiteDb; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteDatabase.CursorFactory; 6 import android.database.sqlite.SQLiteOpenHelper; 7 import android.util.Log; 8 9 public class StuDBHelper extends SQLiteOpenHelper {10 11 private static final String TAG = "TestSQLite";12 public static final int VERSION = 1;13 14 //必須要有建構函式15 public StuDBHelper(Context context, String name, CursorFactory factory,16 int version) {17 super(context, name, factory, version);18 }19 20 // 當第一次建立資料庫的時候,調用該方法 21 public void onCreate(SQLiteDatabase db) {22 String sql = "create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10))";23 //輸出建立資料庫的日誌資訊24 Log.i(TAG, "create Database------------->");25 //execSQL函數用於執行SQL語句26 db.execSQL(sql);27 }28 29 //當更新資料庫的時候執行該方法30 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {31 //輸出更新資料庫的日誌資訊32 Log.i(TAG, "update Database------------->");33 }34 }
在查詢中rawQuery()方法繼承Query的第一個參數為select語句;第二個參數為select語句中預留位置參數的值,如果select語句沒有使用預留位置,該參數可以設定為null。
下面是:sqlite的資料庫訪問(包括命令訪問和可視化DDMS訪問)的解決:
在網上可以發現有很多例子:
我總結如下:
連上你的手機和PC端
將電腦中android sdk下的
和
加入到系統內容變數中
在命令視窗中敲入命令:
adb shell -可以通過命令的方式來查看手機的檔案,而命令基本都是linux命令,可以看出android其實核心就是linux.
cd data
cd data
這樣就進入了安卓工程所在的檔案可以用ls命令查看
cd -com.example.test1(你的工程檔案名稱)
這時如果是
說明沒有root許可權所以需要在手機上安裝root精靈之類的東西獲得root許可權之後
su -進入管理員模式
cd -com.example.test1(你的工程檔案名稱)
進去後在查看所有,會看到有databases,進入databases,顯示所有就會發現你的資料庫名字,這裡使用的是"Info.db"。
cd databases
sqlite3 Info.db
如果出現:
那麼說明很有可能沒有手機檔案system/xbin 中沒有sqlite3檔案 這樣就需要匯入了 具體可以參看網上教程。
可視化操作具體步驟如下:
但是發現很麻煩同時對於資料的可視化操作並不好
所以我選用另一種編輯方式:(底層還是命令列只是基礎上的封裝)
在Android中可以使用Eclipse外掛程式DDMS來查看
需要下載
- RE管理器和SQLite Expert Personal 3
RE檔案管理工具增加對檔案的讀寫權限
在eclipse中
下載RE管理器http://shouji.baidu.com/soft/item?docid=6865576&from=web_alad_6 到安卓手機,安裝好後開啟
找到data檔案夾,長按以開啟選項,找到許可權設定
最後是將需要的資料庫檔案的匯入匯出:
同樣涉及許可權問題:
無法從匯入匯出
當我在命令列裡都賦予最大許可權後,點擊pull a file from the device時還是報同樣的錯誤,繼續網路找問題
最後發現,在cmd裡使用命令pull複製檔案就沒問題了,終於解決。
將移出的db檔案可以匯入sqlite的視覺化檢視這個:
這樣完成了sqlite的基本操作
參考:
http://blog.csdn.net/leasystu/article/details/7250885
http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html
http://fruithardcandy.iteye.com/blog/1880672
http://jingyan.baidu.com/article/6b97984d9b1bed1ca3b0bf4a.html
http://blog.csdn.net/codeeer/article/details/30237597
希望我的部落格能幫到大家
日進一小步,月過一大步~~加油!!!
Android開發-Sqlite操作