国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android SQLite數據庫基本操作方法

2019-10-23 19:48:10
字體:
來源:轉載
供稿:網友

程序的最主要的功能在于對數據進行操作,通過對數據進行操作來實現某個功能。而數據庫就是很重要的一個方面的,Android中內置了小巧輕便,功能卻很強的一個數據庫–SQLite數據庫。那么就來看一下在Android程序中怎么去操作SQLite數據庫來實現一些需求的吧,仍然以一個小例子開始:

在創建Android項目之前,我們應該想一下我們要定義的數據庫的相關信息和里面的表格的相關信息,為了日后數據庫的更新更加方便 ,我們可以用一個專門的類保存數據庫的相關信息,以后如果要更新數據庫的話只需要該動這個類就行了。這樣使得日后的操作更加方便。

新建一個Android工程:

在Src文件夾下新建一個包com.example.databaseHelper:

在這個包中創建兩個類,首先我們來看第一個類DatabaseStatic.Java:

package com.example.databaseHelper;public class DatabaseStatic { public final static String DATABASE_NAME = "BookStore.db"; public final static int DATABASE_VERSION = 1; public final static String TABLE_NAME = "book"; public final static String BOOK_NAME = "bookName"; public final static String ID = "_id"; public final static String AUTHOR = "author"; public final static String PRICE = "price"; public final static String DATE = "sellData";}

這個類中定義了數據庫名稱、版本、還有里面有一個名為“book”的表的相關信息,實現我們上面的意圖,接下來是這個包里面的另外一個類MyHelper.java:

package com.example.databaseHelper;import android/131394.html">android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;import android.widget.Toast;/* * 在這個類的構造函數里面我們調用了父類的構造方法用來創建數據庫文  * 件,第二個構造方法只是為了方便構造(不用些那么多的參數) * 這個類繼承了 SQLiteOpenHelper 類,并且重寫了父類里面的 onCreate方法和 onUpgrade方法, * onCreate方法當數據庫文件不存在的時候會被調用來創建一個新的數 * 據庫文件(不懂的小伙伴可以百度一下) */public class MyHelper extends SQLiteOpenHelper{ public static String CREATE_TABLE = "create table "+ DatabaseStatic.TABLE_NAME +"(" +    DatabaseStatic.BOOK_NAME + " varchar(30), " +    DatabaseStatic.ID + " Integer primary key autoincrement, " +    DatabaseStatic.AUTHOR + " varchar(20) not null, " +    DatabaseStatic.PRICE + " real)"; // 用于創建表的SQL語句 private Context myContext = null; public MyHelper(Context context, String name,   CursorFactory factory, int version) {  super(context, DatabaseStatic.DATABASE_NAME, null, DatabaseStatic.DATABASE_VERSION); } public MyHelper(Context context) {  super(context, DatabaseStatic.DATABASE_NAME, null, DatabaseStatic.DATABASE_VERSION);  myContext = context; } @Override public void onCreate(SQLiteDatabase db) {  Log.i("UseDatabase", "創建數據庫");  Toast.makeText(myContext, "創建數據庫", Toast.LENGTH_SHORT).show();  db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }

當要獲取數據庫對象時(通過SQLiteOPenHelper中自帶的方法getWriteableDatabase或者getReadableDatabase),如果數據庫文件不存在,這個類里面的onCreate方法會被調用來創建一個新的數據庫文件,如果數據庫文件已經存在,那么onCreate方法將不會被調用

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" tools:context=".MainActivity" > <Button  android:id="@+id/buttonCreateDatabase"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="創建數據庫" /> <Button   android:id="@+id/buttonInsertDatabase"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="插入數據"/> <Button   android:id="@+id/buttonUpdateDatabase"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="更新數據"/> <Button   android:id="@+id/buttonDeleteDatabase"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="刪除數據"/> <Button   android:id="@+id/buttonQueryDatabase"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="顯示數據庫中 Book表中的所有數據"/></LinearLayout>

一段布局代碼,主要是5個按鈕對應5中對數據庫的操作:創建數據庫、插入數據、更新數據、刪除數據、顯示(查詢)數據。
那么最后是MainActivity.java:

import com.example.databaseHelper.DatabaseStatic;import com.example.databaseHelper.MyHelper;import android.os.Bundle;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.graphics.Color;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private MyHelper myHelper = null; private Button button = null; private SQLiteDatabase database = null; private static int bookSum = 0; TextView textView = null; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  textView = new TextView(this);  LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);  layout.addView(textView);  button = (Button) findViewById(R.id.buttonCreateDatabase);  button.setOnClickListener(listener);  button = (Button) findViewById(R.id.buttonInsertDatabase);  button.setOnClickListener(listener);  button = (Button) findViewById(R.id.buttonUpdateDatabase);  button.setOnClickListener(listener);  button = (Button) findViewById(R.id.buttonDeleteDatabase);  button.setOnClickListener(listener);  button = (Button) findViewById(R.id.buttonQueryDatabase);  button.setOnClickListener(listener); } private View.OnClickListener listener = new View.OnClickListener() {  @Override  public void onClick(View v) {   switch(v.getId())   {   case R.id.buttonCreateDatabase:    createDatabase();    break;   case R.id.buttonInsertDatabase:    insertDatabase();    break;   case R.id.buttonUpdateDatabase:    updateDatabase();    break;   case R.id.buttonDeleteDatabase:    deleteDatabase();    break;   case R.id.buttonQueryDatabase:    searchDatabase();    break;   }  } }; private void createDatabase() // 創建或者打開數據庫 {  myHelper = new MyHelper(this);   /*   * 調用getWritabelDatabase方法或者   * getReadableDatabase方法時,如果數據庫文   * 件中不存在(注意一個數據庫中可以存在多個表格),   * 那么會回調MyHelper類的onCreate方法新建一個數據庫文   * 件并且在這個數據庫文件中新建一   * 個book表格   */  myHelper.getWritableDatabase();  } private void insertDatabase() // 向數據庫中插入新數據 {  if(myHelper == null)  {   myHelper = new MyHelper(this);  }  database = myHelper.getWritableDatabase();  ContentValues cV = new ContentValues();  cV.put(DatabaseStatic.BOOK_NAME, "C Language");  cV.put(DatabaseStatic.ID, ++bookSum);  cV.put(DatabaseStatic.AUTHOR, "zhidian");  cV.put(DatabaseStatic.PRICE, 42.6);  /*   * 這個方法是留給不熟悉SQL語句的小伙伴用的,Android把   * SQLite的插入語句封裝了起來,   * 通過 ContentValues 類的對象來保存數據庫中的數據,   * 于HashMap   */  database.insert(DatabaseStatic.TABLE_NAME, null, cV);   /*   * 對應的SQL語句:   * database.execSQL("insert into " + DatabaseStatic.TABLENAME + " values(?, ?, ?, ?)",   * new Object[]{"C Language", ++bookSum, "zhidian", 42.6});   * 或者是這個:   * database.execSQL("insert into " + DatabaseStatic.TABLENAME + "(" +    *  DatabaseStatic.BOOKNAME + ", " + DatabaseStatic.ID + ", " +    *  DatabaseStatic.AUTHOR + ", " + DatabaseStatic.PRICE +    *  ") values(?, ?, ?, ?)", new Object[]{"C Language", ++bookSum, "zhidian", 42.6});   * 這里將 ? 號理解成一個C語言里面的占位符,然后通過 Object[] 數組中的內容補全,下同   * 參數中的 Object[] 數組是一個通用的數組,里面的數據可以轉換為任意類型的數據,通過這個完成不同數據類型變量之間的儲存  */  Toast.makeText(this, "插入數據成功", Toast.LENGTH_SHORT).show(); } private void updateDatabase() // 更新數據 {  if(myHelper == null)  {   myHelper = new MyHelper(this);  }  database = myHelper.getWritableDatabase();  ContentValues cV = new ContentValues();  cV.put(DatabaseStatic.AUTHOR, "xiaoming");  /*   * 調用 update 方法,將書名為"C Language" 的書作者更新為 "xiaoming   */  database.update(DatabaseStatic.TABLE_NAME, cV,     DatabaseStatic.BOOK_NAME + "= ?", new String[]{"C Language"});  /*   * 對應的SQL語句:   * database.execSQL("update " + DatabaseStatic.TABLENAME + " set " + DatabaseStatic.AUTHOR +    *  "= ? where " + DatabaseStatic.BOOKNAME + " = ?", new String[]{"xiaoming", "C Language"});   */  Toast.makeText(this, "數據更新成功", Toast.LENGTH_SHORT).show(); } private void deleteDatabase() // 數據庫中刪除數據 {  if(myHelper == null)  {   myHelper = new MyHelper(this);  }  database = myHelper.getWritableDatabase();  /*   * 調用 delete 方法刪除數據庫中的數據   * 對應的SQL語句:   * database.execSQL("delete from " +    * DatabaseStatic.TABLE_NAME + " where " +    * DatabaseStatic.BOOK_NAME + " = ?", new    * String[]{"C Language"});   */  database.delete(DatabaseStatic.TABLE_NAME, DatabaseStatic.BOOK_NAME + " = ? ",    new String[]{"C Language"});  Toast.makeText(this, "數據刪除成功", Toast.LENGTH_SHORT).show(); } private void searchDatabase() // 查詢數據庫中的數據 {  if(myHelper == null)  {   myHelper = new MyHelper(this);  }  database = myHelper.getWritableDatabase();  /*   * 調用database的query方法,第一個參數是要查詢的表名,   * 后面的參數是一些查詢的約束條件,對應于SQL語句的一些參   * 數, 這里全為null代表查詢表格中所有的數據   * 查詢的結果返回一個 Cursor對象   * 對應的SQL語句:   * Cursor cursor = database.rawQuery("select * from book", null);   */  Cursor cursor = database.query(DatabaseStatic.TABLE_NAME, null, null, null, null, null, null);  StringBuilder str = new StringBuilder();  if(cursor.moveToFirst()) // 顯示數據庫的內容  {   for(; !cursor.isAfterLast(); cursor.moveToNext()) // 獲取查詢游標中的數據   {    str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.ID)) + " ");    str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.BOOK_NAME)) + " ");    str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.AUTHOR)) + " ");    str.append(cursor.getString(cursor.getColumnIndex(DatabaseStatic.PRICE)) + "/n");   }  }  cursor.close(); // 記得關閉游標對象  if(str.toString().equals(""))  {   str.append("數據庫為空!");   textView.setTextColor(Color.RED);  }  else   {   textView.setTextColor(Color.BLACK);  }  textView.setText(str.toString()); } @Override public boolean onCreateOptionsMenu(Menu menu) {  getMenuInflater().inflate(R.menu.main, menu);  return true; }}

MainActivity.java里面主要是實現了5個按鈕對應的操作

SQLiteDatabase 類里面提供了對數據庫表格進行插入、更新、刪除、查詢 的對應API,用于給對SQL語句不熟悉的開發者使用,當然我們還可以調用這個類里面的 execSQL 方法來直接執行SQL語句中的插入、更改、刪除操作,用rawQuery 方法來執行SQL語句的查詢語句。

Ok,整個工程的項目視圖(可能有些多余。。。):

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

好了,運行一下:

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

先點擊“創建數據庫”按鈕:

程序中的數據庫文件都儲存在 /data/data/<包名>/databases文件中

運行cmd(windows系統)運行abd調試工具(如果沒有將adb.exe加入環境變量中則需要寫出adb.exe的完整路徑)

輸入 adb shell

再輸入 cd /data/data/com.example.UseDataBase/databases進入對應儲存文件目錄

再輸入 ls 顯示文件中的子文件目錄,接下來我們就可以對數據庫文件進行操作了:

輸入 sqlite3 數據庫名稱, 就可以對數據庫進行操作了:

輸入 .table 來查看當前數據庫文件中的表格目錄, 結果如下:

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

我們可以看到我們要創建的表格確實存在,證明我們的代碼確實創建了數據庫文件和里面對應的表。

而我們注意到這里面還有另外一個android_metadata表,這個表是每個數據庫文件都會自動生成的,不需要管。

接下來單擊“插入數據”按鈕:

之后 在控制臺中輸入 “select * from book;”,這個是查詢數據庫文件中的數據的SQL語句,不熟悉的小伙伴可以在網上查到一些教程

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

我們可以看到我們確實在book這張表中成功的插入了一條新的數據。

接下來單擊“更新數據”按鈕:

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

Ok,確實把書名為“C Language”的書的作者改為了 “xiaowei”,繼續單擊“刪除”按鈕:

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

使用 “select * from”語句查詢表中的所有數據,并沒有看到有數據,我們再單擊一下“顯示數據庫中book表中的所有數據”按鈕:

android,sqlite數據庫,androidsqlite數據庫,SQLite數據庫操作

這樣看來,數據庫中book表中的數據確實已經被我們刪除了。

這里提一下SQLite數據庫操作的時候主要用到的數據類型:
整形:Integer、字符數組:varchar(10)、浮點數:real、字符串文本:text。當然SQLite還有很多的操作和支持的數據類型。

最后給出一些常用的SQL語句:

1、創建數據庫表:

create table 表名(參數1 數據類型 約數條件, 參數2 數據類型 約束條件…) 

例:

 

復制代碼 代碼如下:

create table person(_id Integer primary key autoincrement, name varchar(20), sex varchar(5) not null, age Integer)

 

2、插入數據:

insert into 表名(參數1, 參數2…) values(參數1的值, 參數2的值…) 

或者:

insert into 表名 values(參數1的值, 參數2的值) 

例:

insert into person(_id, name, sex, age) values(1, “指點”, “男”, 19) insert into person values(1, “指點”, “男”, 19)

3、更新數據:

update 表名 set 參數1 = 值, 參數2 = 值… where 條件1 and 條件2 or 條件3… 

更新符合條件的所有數據

where后面的條件用 “and” 或者 “or”連接

例:

 

復制代碼 代碼如下:

update person set _id = 0, age = 18 where _id = 1 and age<>19 // “<>”符號代表“不等于”

 

4、刪除數據:

delete from 表名 where 條件1 and 條件2 or 條件3… 

刪除符合條件的所有數據

例:

delete from person where _id > 0 and name = “指點”

前四個操作的SQL語句可用 execSQL 方法帶入參數執行

5、查詢數據:

select 參數1, 參數2… from 表名 where 條件1 and 條件2… 

返回的是符合條件的所有的數據中的參數1、參數2…

例:

select _id, name, sex from person where name = “指點” or _id = 1 

返回的是: 1、“指點”、“男”

注意查詢操作的SQL語句要用 rawQuery方法執行,詳見代碼

Ok, 終于把SQLite 的基礎操作總結完了。這里所說的只是SQLite操作的冰山一角,日后還得多多學習。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南乐县| 湖南省| 阿荣旗| 溧水县| 铜川市| 比如县| 聊城市| 南江县| 甘泉县| 兰州市| 武宁县| 湄潭县| 夹江县| 雷波县| 汝阳县| 铁力市| 民乐县| 时尚| 紫云| 星座| 郴州市| 蛟河市| 长顺县| 张北县| 濮阳县| 安新县| 乌海市| 仙桃市| 故城县| 五台县| 玉环县| 虎林市| 武功县| 昆明市| 佳木斯市| 禄丰县| 隆林| 平果县| 白朗县| 灵丘县| 巴青县|