Android-----創建SQLite數據庫


簡單介紹一下Android系統內置輕便又功能強大的嵌入式數據庫--SQLite。

 

  SQLite是D.Richard Hipp用C語言編寫的開源嵌入式數據庫引擎,它是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它的設計目標是嵌入式的,而且由於其占用資源低(占用內存只需幾百K)、處

理速度快等特點,目前許多嵌入式產品中都使用了它,其中就包括大名鼎鼎的iOS和Android移動操作系統。SQLite能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、

C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。

 

SQLite數據庫的特點:

   1.輕量級:使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。

        2.獨立性:SQLite 數據庫的核心引擎不需要依賴第三方軟件,也不需要所謂的“安裝”。

        3.隔離性:SQLite 數據庫中所有的信息(比如表、視圖、觸發器等)都包含在一個文件夾內,方便管理和維護。

        4.跨平台:SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統也是能夠運行,比如:Android和IOS。

        5.多語言接口: SQLite 數據庫支持多語言編程接口。

        6.安全性:SQLite 數據庫通過數據庫級上的獨占性和共享鎖來實現獨立事務處理。這意味着多個進程可以在同一時間從同一數據庫讀取數據,但只能有一個可以寫入數據。

 

接下來就在Android中創建一個自己的SQLite數據庫,完整代碼如下:

 

DBHelper.java:

 1 public class DBHelper extends SQLiteOpenHelper {
 2 
 3     private static final String DATABASE_NAME = "test.db";  //數據庫名字
 4     private static final int DATABASE_VERSION = 1 ;         //數據庫版本號
 5 
 6     public DBHelper(Context context){
 7         super(context,DATABASE_NAME,null,DATABASE_VERSION);
 8     }
 9 
10 
11     /**
12      * 創建數據庫表:person
13      * _id為主鍵,自增
14      * **/
15     @Override
16     public void onCreate(SQLiteDatabase sqLiteDatabase) {
17         Log.i("TAG:","創建person數據庫表!");
18         sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
19                 " name VARCHAR,info TEXT)");
20     }
21 
22     @Override
23     public void onUpgrade(SQLiteDatabase sqLiteDatabase,int oldVersion,int newVersion) {
24 
25     }
26 
27     @Override
28     public void onOpen(SQLiteDatabase sqLiteDatabase){
29         super.onOpen(sqLiteDatabase);
30     }
31 }

 

DBManager.java:

 

 1 public class DBManager {
 2 
 3     DBHelper helper;
 4     SQLiteDatabase sqLiteDatabase;
 5 
 6     public DBManager(Context context){
 7         helper = new DBHelper(context);
 8         sqLiteDatabase = helper.getReadableDatabase();
 9     }
10 
11     /**
12      * execSQL()方法可以執行insert,update,delete語句
13      * 實現對數據庫的 增,刪,改 功能
14      * sql為操作語句 , bindArgs為操作傳遞參數
15      * **/
16     public boolean updateSQLite(String sql , Object [] bindArgs){
17         boolean isSuccess = false;
18         try {
19             sqLiteDatabase.execSQL( sql , bindArgs );
20             isSuccess = true;
21         }catch (Exception e){
22             e.printStackTrace();
23         }finally {
24             if (sqLiteDatabase!=null){
25                 sqLiteDatabase.close();
26             }
27             Log.i("TAG:","數據插入數據庫中狀態:" + isSuccess);
28         }
29         return isSuccess;
30     }
31 
32     /**
33      * rawQuery()方法可以執行select語句
34      * 實現查詢功能
35      * sql為操作語句 , bindArgs為操作傳遞參數
36      * **/
37     public ArrayList<HashMap<String , String>> querySQLite(String sql , String [] bindArgs){
38         ArrayList<HashMap<String ,String>> list = new ArrayList<HashMap<String, String>>();
39 
40         /**Cursor是結果集游標,使用Cursou.moveToNext()方法可以從當前行移動到下一行**/
41         Cursor cursor = sqLiteDatabase.rawQuery(sql , bindArgs);
42         int clos_len = cursor.getColumnCount();                 //獲取數據所有列數
43 
44         Log.i("TAG:","querySQLite()方法中獲得總列數clos_len:" + clos_len);
45 
46         boolean isfals = cursor.moveToNext();
47         Log.i("TAG:","isfals值為:" + isfals);
48 
49         while(cursor.moveToNext()) {                            //循環表格中的每一行
50             Log.i("TAG:","進入到while循環中");
51 
52             HashMap<String , String> map = new HashMap<>();
53             for(int i = 0;i<clos_len;i++){                      //循環表格中的每一列
54                 String clos_name = cursor.getColumnName(i);     //從給定的索引i返回列名
55                 String clos_value = cursor.getString(cursor.getColumnIndex(clos_name));//返回指定的名稱,沒有就返回-1
56                 if(clos_value==null){
57                     clos_value = "";
58                 }
59 
60                 Log.i("TAG:","while循環下面的for循環拿到的數據clos_value為:"
61                         + cursor.getString(cursor.getColumnIndex(clos_name)));
62 
63                 map.put(clos_name , clos_value);
64             }
65             list.add(map);
66         }
67         return list;
68     }
69 }

 

SQLFunction.java:

 

 1 public class SQLFunction {
 2 
 3     static DBHelper helper;
 4 
 5 
 6     public static void initTable(Context context){
 7         helper = new DBHelper(context);
 8         helper.getReadableDatabase();
 9     }
10 
11     /**【插入數據】**/
12     public static void insert(Context context , Object [] data){
13 
14         Log.i("TAG:","插入數據到數據庫表:person中:"+data.toString());
15 
16         DBManager sqlManager = new DBManager(context);
17         helper = new DBHelper(context);
18         helper.getWritableDatabase();
19         String sql = "insert into person ( name , info ) values ( ? , ?)";
20         Object [] bindArgs = data;
21         sqlManager.updateSQLite( sql , bindArgs );
22     }
23 
24 
25     /**【模糊查詢】**/
26     public static ArrayList<HashMap<String ,String>>query(Context context,String where1 ,String where2){
27         DBManager sqlManager = new DBManager(context);
28         ArrayList<HashMap<String ,String>> list = new ArrayList<>();
29         String sql = "select * from person where name like ? and info like ?";
30         if(where1 == null){
31             list = sqlManager.querySQLite(sql,new String[] {"%","%"});
32         }else{
33             where1 = "%" + where1 + "%";
34             where2 = "%" + where2 + "%";
35             list = sqlManager.querySQLite(sql,new String [] { where1 , where2 } );
36         }
37 
38         Log.i("TAG:","查詢完畢,返回數據:" + list.size());
39 
40         return list;
41     }
42 
43     /**【刪除數據】**/
44     public static void delete(Context context , Object[] data){
45         DBManager sqlmanager = new DBManager(context);
46         String sql = "delete from person where _id =  ? ";
47         sqlmanager.updateSQLite(sql , data);
48     }
49 
50     /**【更新數據】**/
51     public static void update(Context context , Object[]data){
52         helper = new DBHelper(context);
53         helper.getReadableDatabase();
54         DBManager sqlManager = new DBManager(context);
55         String sql = "update person set name=? , info=? where _id=?";
56         sqlManager.updateSQLite(sql,data);
57     }
58 
59 }

 

我這里的數據都是用Log.i();方式輸出,布局文件簡單加載個button按鈕:

 

 1 <LinearLayout
 2     xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="wrap_content"
 7     android:orientation="vertical"
 8     android:layout_gravity="center"
 9     android:gravity="center"
10     tools:context="com.hs.example.exampleapplication.MainActivity">
11 
12     <LinearLayout
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:orientation="horizontal"
16         android:gravity="center">
17 
18         <Button
19             android:id="@+id/btn_sql"
20             android:layout_width="0dp"
21             android:layout_weight="1"
22             android:layout_height="match_parent"
23             android:text="數據庫操作"/>
24     </LinearLayout>
25 
26 </LinearLayout>

 

MainActivity.java:

 

 1 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 2     Button btn_sql;
 3 
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8 
 9         /**【初始化數據庫】**/
10         SQLFunction.initTable(MainActivity.this);
11 
12         /**【動態申請sdCard讀寫權限】**/
13         //DocumentTool.verifyStoragePermissions(MainActivity.this);
14 
15         btn_sql = this.findViewById(R.id.btn_sql);
16         btn_sql.setOnClickListener(this);
17 
18     }
19     
20     public void onClick(View view) {
21         int id = view.getId();
22         switch (id){
23             case R.id.btn_sql:
24                 DB_i_u_d_s();
25                 break;
26         }
27     }
28     
29     /**【操作數據庫的方法】**/
30     private void DB_i_u_d_s(){
31         SQLFunction function = new SQLFunction();
32 
33         /**
34         Log.i("TAG:","插入數據!");
35         Object[] data = {"root","123456"};
36         function.insert(MainActivity.this,data);
37          */
38 
39         /**
40          * Log.i("TAG:","通過id來修改數據!");
41          *String name = "sale";
42          *String info = "TestSale";
43          *int _id = 7;
44          *Object[]data = {name,info,_id};
45          *function.update(MainActivity.this,data);
46          * */
47 
48         /**
49          * Log.i("TAG:","通過id來刪除數據!");
50          *int d_id = 2;
51          *Object[] did = {d_id};
52          *function.delete(MainActivity.this,did);
53          * */
54         Log.i("TAG:","查詢數據!");
55         String where1 = null;
56         String where2 = null;
57         ArrayList<HashMap<String ,String>> list = new ArrayList<>();
58         list = function.query(MainActivity.this,where1,where2);
59         if(list!=null){
60             for(int i = 0 ; i<list.size();i++){
61                 Log.i("TAG:","從數據庫中拿到的數據 _ID為:" +list.get(i).get("_id"));
62                 Log.i("TAG:","從數據庫中拿到的數據name為:" + list.get(i).get("name"));
63                 Log.i("TAG:","從數據庫中拿到的數據info為:" + list.get(i).get("info"));
64             }
65         }else {
66             Log.i("TAG:","從數據庫中沒有拿到數據!");
67         }
68     }
69 }

 

執行效果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM