Android之操做SQLite

1.SQLite簡介android

SQLite是一款輕型的數據庫,是遵照ACID的關聯式數據庫管理系統,它的設計目標是嵌入  式的,並且目前已經在不少嵌入式產品中使用了它,它佔用資源很是的低,在嵌入式設備中,可能只須要幾百K的內存就夠了。它可以支持 Windows/Linux/Unix等等主流的操做系統,同時可以跟不少程序語言相結合,好比Tcl、PHP、Java、C++、.Net等,還有ODBC接口,一樣比起 Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來說,它的處理速度比他們都快。sql

2.SQLite數據類型

通常數據採用的固定的靜態數據類型,而SQLite採用的是動態數據類型,會根據存入值自動判斷。SQLite具備如下五種經常使用的數據類型:

NULL: 這個值爲空值

VARCHAR(n):長度不固定且其最大長度爲 n 的字串,n不能超過 4000。

CHAR(n):長度固定爲n的字串,n不能超過 254。

INTEGER: 值被標識爲整數,依據值的大小能夠依次被存儲爲1,2,3,4,5,6,7,8.

REAL: 全部值都是浮動的數值,被存儲爲8字節的IEEE浮動標記序號.

TEXT: 值爲文本字符串,使用數據庫編碼存儲(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB數據塊,以輸入的數據格式進行存儲。如何輸入就如何存儲,不改  變格式。

DATA :包含了 年份、月份、日期。

TIME: 包含了 小時、分鐘、秒。shell

3.SQLiteDatabase的經常使用方法 數據庫

方法名稱
方法表示含義
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory  factory)
打開或建立數據庫
insert(String table,String nullColumnHack,ContentValues  values)
插入一條記錄
delete(String table,String whereClause,String[]  whereArgs)
刪除一條記錄
query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String  orderBy)
查詢一條記錄
update(String table,ContentValues values,String whereClause,String[]  whereArgs)
修改記錄
execSQL(String sql)
執行一條SQL語句
close()
關閉數據庫

下面就在代碼中查看詳細的解釋:app

SQLiteActivityide

  1 package mars.sqlite3;
  2 
  3 import mars.sqlite3.db.DatabaseHelper;
  4 import android.app.Activity;
  5 import android.content.ContentValues;
  6 import android.database.Cursor;
  7 import android.database.sqlite.SQLiteDatabase;
  8 import android.os.Bundle;
  9 import android.util.Log;
 10 import android.view.View;
 11 import android.view.View.OnClickListener;
 12 import android.widget.Button;
 13 
 14 public class SQLiteActivity extends Activity {
 15     /** Called when the activity is first created. */
 16     private Button createButton;
 17     private Button insertButton;
 18     private Button updateButton;
 19     private Button updateRecordButton;
 20     private Button queryButton;
 21     @Override
 22     public void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24         setContentView(R.layout.main);
 25         createButton = (Button)findViewById(R.id.createDatabase);
 26         updateButton = (Button)findViewById(R.id.updateDatabase);
 27         insertButton = (Button)findViewById(R.id.insert);
 28         updateRecordButton = (Button)findViewById(R.id.update);
 29         queryButton = (Button)findViewById(R.id.query);
 30         createButton.setOnClickListener(new CreateListener());
 31         updateButton.setOnClickListener(new UpdateListener());
 32         insertButton.setOnClickListener(new InsertListener());
 33         updateRecordButton.setOnClickListener(new UpdateRecordListener());
 34         queryButton.setOnClickListener(new QueryListener());
 35     }
 36     class CreateListener implements OnClickListener{
 37         @Override
 38         public void onClick(View v) {
 39             //建立一個DatabaseHelper對象
 40             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db");
 41             //只有調用了DatabaseHelper對象的getReadableDatabase()方法,或者是getWritableDatabase()方法以後,纔會建立,或打開一個數據庫
 42             SQLiteDatabase db = dbHelper.getReadableDatabase();
 43         }
 44     }
 45     class UpdateListener implements OnClickListener{
 46 
 47         @Override
 48         public void onClick(View v) {
 49             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
 50             SQLiteDatabase db = dbHelper.getReadableDatabase();
 51         }
 52         
 53     }
 54     class InsertListener implements OnClickListener{
 55 
 56         @Override
 57         public void onClick(View v) {
 58             //生成ContentValues對象
 59             ContentValues values = new ContentValues();
 60             //想該對象當中插入鍵值對,其中鍵是列名,值是但願插入到這一列的值,值必須和數據庫當中的數據類型一致
 61             values.put("id", 1);
 62             values.put("name","zhangsan");
 63             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
 64             SQLiteDatabase db = dbHelper.getWritableDatabase();
 65             //調用insert方法,就能夠將數據插入到數據庫當中
 66             db.insert("user", null, values);
 67         }
 68     }
 69     //更新操做就至關於執行SQL語句當中的update語句
 70     //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX...
 71     class UpdateRecordListener implements OnClickListener{
 72 
 73         @Override
 74         public void onClick(View arg0) {
 75             // TODO Auto-generated method stub
 76             //獲得一個可寫的SQLiteDatabase對象,這裏的version必須爲2時才能夠,由於剛開始的時候更新爲了2,若是爲1的話會出現空異常錯誤
 77             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
 78             SQLiteDatabase db = dbHelper.getWritableDatabase();
 79             ContentValues values = new ContentValues();
 80             values.put("name", "zhangsanfeng");
 81             //第一個參數是要更新的表名
 82             //第二個參數是一個ContentValeus對象
 83             //第三個參數是where子句
 84             db.update("user", values, "id=?", new String[]{"1"});
 85         }
 86     }
 87     class QueryListener implements OnClickListener{
 88 
 89         @Override
 90         public void onClick(View v) {
 91             System.out.println("aaa------------------");
 92             Log.d("myDebug", "myFirstDebugMsg");
 93             
 94             //如下是出錯的代碼
 95             DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2);
 96             SQLiteDatabase db = dbHelper.getReadableDatabase();
 97             
 98             //參數1:表名   
 99             //參數2:要想顯示的列   
100             //參數3:where子句   
101             //參數4:where子句對應的條件值   
102             //參數5:分組方式   
103             //參數6:having條件   
104             //參數7:排序方式
105             Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);
106             while(cursor.moveToNext()){
107                 String name = cursor.getString(cursor.getColumnIndex("name"));
108                 System.out.println("query--->" + name);
109             }
110             db.close();
111         }
112     }
113     
114 }

DatabaseHelper函數

 1 package mars.sqlite3.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 7 
 8 //DatabaseHelper做爲一個訪問SQLite的助手類,提供兩個方面的功能,
 9 //第一,getReadableDatabase(),getWritableDatabase()能夠得到SQLiteDatabse對象,經過該對象能夠對數據庫進行操做
10 //第二,提供了onCreate()和onUpgrade()兩個回調函數,容許咱們在建立和升級數據庫時,進行本身的操做
11 
12 public class DatabaseHelper extends SQLiteOpenHelper {
13     
14     private static final int VERSION = 1;
15     //在SQLiteOepnHelper的子類當中,必須有該構造函數
16     public DatabaseHelper(Context context, String name, CursorFactory factory,
17             int version) {
18         //必須經過super調用父類當中的構造函數
19         super(context, name, factory, version);
20         // TODO Auto-generated constructor stub
21     }
22     public DatabaseHelper(Context context,String name){
23         this(context,name,VERSION);
24     }
25     public DatabaseHelper(Context context,String name,int version){
26         this(context, name,null,version);
27     }
28 
29     //該函數是在第一次建立數據庫的時候執行,其實是在第一次獲得SQLiteDatabse對象的時候,纔會調用這個方法
30     @Override
31     public void onCreate(SQLiteDatabase db) {
32         // TODO Auto-generated method stub
33         System.out.println("create a Database");
34         //execSQL函數用於執行SQL語句
35         db.execSQL("create table user(id int,name varchar(20))");
36     }
37 
38     @Override
39     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
40         // TODO Auto-generated method stub
41         System.out.println("update a Database");
42     }
43 
44 }

效果截圖以下:this

查詢數據截圖:編碼

更新數據而後查詢數據截圖:spa

使用命令來查詢sqlite數據庫

首先打開adb調試,若是打開不成功,說明adb添加到環境變量裏面,把adb添加到環境變量裏面便可,具體的百度一下,比較簡單。

若是出現下面的說明成功:

由於Android是基於Linux內核開發的因此可使用shell命令進行操做,可是在打開此命令的時候有可能會報錯,這時最大的可能就是你的模擬機沒有開,開開模擬機就不會有這樣的錯誤:

而後開始使用Linux命令操做sqlite,首先進入data包,而後一直到顯示全部的工程名就能夠了:

而後進入包來尋找數據庫:

進入databases數據庫:

注意:這裏的ls -l是顯示包裏面的全部的包的:

而後使用sqlite3進行操做數據庫語句:

到這裏就結束了,具體的能夠本身實踐實踐。在這裏給你們推薦一個我的認爲不錯的博客:http://blog.csdn.net/codeeer/article/details/30237597

相關文章
相關標籤/搜索