• 基础复习——数据库SQLite——SQL的基本语法——数据库管理器SQLiteDatabase——数据库帮助器SQLiteOpenHelper...


                                                                                                                                

    标准的SQL语句分为三类:数据定义、数据操纵和数据控制,但不同的数据库往往有自己的实现。

    SQLite是一种小巧的嵌入式数据库,由于它属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。

    SQLite的SQL语法与通用的SQL语法略有不同。

    SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据表的API,

    常用的方法有3类:

    1. 管理类,用于数据库层面的操作。

    openDatabase:打开指定路径的数据库。isOpen:判断数据库是否已打开。close:关闭数据库。getVersion:获取数据库的版本号。setVersion:设置数据库的版本号。

    2. 事务类,用于事务层面的操作。

    beginTransaction:开始事务。setTransactionSuccessful:设置事务的成功标志。endTransaction:结束事务。

    3. 数据处理类,用于数据表层面的操作。

    execSQL:执行拼接好的SQL控制语句。delete:删除符合条件的记录。update:更新符合条件的记录。insert:插入一条记录。query:执行查询操作,返回结果集的游标。rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。

    示例:

    页面布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical">
    5. <LinearLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:orientation="horizontal">
    9. <Button
    10. android:id="@+id/btn_database_create"
    11. android:layout_width="0dp"
    12. android:layout_height="wrap_content"
    13. android:layout_weight="1"
    14. android:text="创建数据库"
    15. android:textColor="@color/black"
    16. android:textSize="17sp" />
    17. <Button
    18. android:id="@+id/btn_database_delete"
    19. android:layout_width="0dp"
    20. android:layout_height="wrap_content"
    21. android:layout_weight="1"
    22. android:text="删除数据库"
    23. android:textColor="@color/black"
    24. android:textSize="17sp" />
    25. </LinearLayout>
    26. <TextView
    27. android:id="@+id/tv_database"
    28. android:layout_width="match_parent"
    29. android:layout_height="wrap_content"
    30. android:paddingLeft="5dp"
    31. android:textColor="@color/black"
    32. android:textSize="17sp" />
    33. </LinearLayout>

    代码:

    1. package com.example.myapplication;
    2. import android.content.Context;
    3. import android.database.sqlite.SQLiteDatabase;
    4. import android.os.Bundle;
    5. import android.view.View;
    6. import android.widget.TextView;
    7. import androidx.appcompat.app.AppCompatActivity;
    8. public class DatabaseActivity extends AppCompatActivity implements View.OnClickListener
    9. {
    10. private TextView tv_database;
    11. private String mDatabaseName;
    12. @Override
    13. protected void onCreate(Bundle savedInstanceState)
    14. {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_database);
    17. tv_database = findViewById(R.id.tv_database);
    18. findViewById(R.id.btn_database_create).setOnClickListener(this);
    19. findViewById(R.id.btn_database_delete).setOnClickListener(this);
    20. // 生成一个测试数据库的完整路径
    21. mDatabaseName = getFilesDir() + "/test.db";
    22. }
    23. @Override
    24. public void onClick(View v)
    25. {
    26. if (v.getId() == R.id.btn_database_create)
    27. {
    28. // 创建或打开数据库。数据库如果不存在就创建它,如果存在就打开它
    29. SQLiteDatabase db = openOrCreateDatabase(mDatabaseName, Context.MODE_PRIVATE, null);
    30. String desc = String.format("数据库%s创建%s", db.getPath(), (db!=null)?"成功":"失败");
    31. tv_database.setText(desc);
    32. } else if (v.getId() == R.id.btn_database_delete)
    33. {
    34. boolean result = deleteDatabase(mDatabaseName); // 删除数据库
    35. String desc = String.format("数据库%s删除%s", mDatabaseName, result?"成功":"失败");
    36. tv_database.setText(desc);
    37. }
    38. }
    39. }

     

     

     

     

     

     

     

     

     

    =========================================================================================================================

    SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用。

    SQLiteOpenHelper的具体使用步骤如下:

    (1)新建一个继承自SQLiteOpenHelper的数据库操作类,提示重写onCreate和onUpgrade两个方法。

    (2)封装保证数据库安全的必要方法,包括以下三种。

    获取单例对象:确保App运行时数据库只被打开一次,避免重复打开引起错误。

    打开数据库连接:读连接可调用SQLiteOpenHelper的getReadableDatabase方法获得,写连接可调用getWritableDatabase获得。

    关闭数据库连接:数据库操作完了,调用SQLiteDatabase对象的close方法关闭连接。

    (3)提供对表记录进行增加、删除、修改、查询的操作方法。

    布局:

     写:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical"
    5. android:padding="5dp" >
    6. <RelativeLayout
    7. android:layout_width="match_parent"
    8. android:layout_height="40dp" >
    9. <TextView
    10. android:id="@+id/tv_name"
    11. android:layout_width="wrap_content"
    12. android:layout_height="match_parent"
    13. android:gravity="center"
    14. android:text="姓名:"
    15. android:textColor="@color/black"
    16. android:textSize="17sp" />
    17. <EditText
    18. android:id="@+id/et_name"
    19. android:layout_width="match_parent"
    20. android:layout_height="match_parent"
    21. android:layout_marginBottom="3dp"
    22. android:layout_marginTop="3dp"
    23. android:layout_toRightOf="@+id/tv_name"
    24. android:background="@drawable/editext_selector"
    25. android:gravity="left|center"
    26. android:hint="请输入姓名"
    27. android:inputType="text"
    28. android:maxLength="12"
    29. android:textColor="@color/black"
    30. android:textSize="17sp" />
    31. </RelativeLayout>
    32. <RelativeLayout
    33. android:layout_width="match_parent"
    34. android:layout_height="40dp" >
    35. <TextView
    36. android:id="@+id/tv_age"
    37. android:layout_width="wrap_content"
    38. android:layout_height="match_parent"
    39. android:gravity="center"
    40. android:text="年龄:"
    41. android:textColor="@color/black"
    42. android:textSize="17sp" />
    43. <EditText
    44. android:id="@+id/et_age"
    45. android:layout_width="match_parent"
    46. android:layout_height="match_parent"
    47. android:layout_marginBottom="3dp"
    48. android:layout_marginTop="3dp"
    49. android:layout_toRightOf="@+id/tv_age"
    50. android:background="@drawable/editext_selector"
    51. android:gravity="left|center"
    52. android:hint="请输入年龄"
    53. android:inputType="number"
    54. android:maxLength="2"
    55. android:textColor="@color/black"
    56. android:textSize="17sp" />
    57. </RelativeLayout>
    58. <RelativeLayout
    59. android:layout_width="match_parent"
    60. android:layout_height="40dp" >
    61. <TextView
    62. android:id="@+id/tv_height"
    63. android:layout_width="wrap_content"
    64. android:layout_height="match_parent"
    65. android:gravity="center"
    66. android:text="身高:"
    67. android:textColor="@color/black"
    68. android:textSize="17sp" />
    69. <EditText
    70. android:id="@+id/et_height"
    71. android:layout_width="match_parent"
    72. android:layout_height="match_parent"
    73. android:layout_marginBottom="3dp"
    74. android:layout_marginTop="3dp"
    75. android:layout_toRightOf="@+id/tv_height"
    76. android:background="@drawable/editext_selector"
    77. android:gravity="left|center"
    78. android:hint="请输入身高"
    79. android:inputType="number"
    80. android:maxLength="3"
    81. android:textColor="@color/black"
    82. android:textSize="17sp" />
    83. </RelativeLayout>
    84. <RelativeLayout
    85. android:layout_width="match_parent"
    86. android:layout_height="40dp" >
    87. <TextView
    88. android:id="@+id/tv_weight"
    89. android:layout_width="wrap_content"
    90. android:layout_height="match_parent"
    91. android:gravity="center"
    92. android:text="体重:"
    93. android:textColor="@color/black"
    94. android:textSize="17sp" />
    95. <EditText
    96. android:id="@+id/et_weight"
    97. android:layout_width="match_parent"
    98. android:layout_height="match_parent"
    99. android:layout_marginBottom="3dp"
    100. android:layout_marginTop="3dp"
    101. android:layout_toRightOf="@+id/tv_weight"
    102. android:background="@drawable/editext_selector"
    103. android:gravity="left|center"
    104. android:hint="请输入体重"
    105. android:inputType="numberDecimal"
    106. android:maxLength="5"
    107. android:textColor="@color/black"
    108. android:textSize="17sp" />
    109. </RelativeLayout>
    110. <RelativeLayout
    111. android:layout_width="match_parent"
    112. android:layout_height="40dp" >
    113. <CheckBox
    114. android:id="@+id/ck_married"
    115. android:layout_width="wrap_content"
    116. android:layout_height="match_parent"
    117. android:gravity="center"
    118. android:checked="false"
    119. android:text="已婚"
    120. android:textColor="@color/black"
    121. android:textSize="17sp" />
    122. </RelativeLayout>
    123. <Button
    124. android:id="@+id/btn_save"
    125. android:layout_width="match_parent"
    126. android:layout_height="wrap_content"
    127. android:text="保存到数据库"
    128. android:textColor="@color/black"
    129. android:textSize="17sp" />
    130. </LinearLayout>

     写,代码:

    1. package com.example.myapplication;
    2. import android.os.Bundle;
    3. import android.text.TextUtils;
    4. import android.view.View;
    5. import android.widget.CheckBox;
    6. import android.widget.CompoundButton;
    7. import android.widget.EditText;
    8. import androidx.appcompat.app.AppCompatActivity;
    9. import com.example.myapplication.bean.UserInfo;
    10. import com.example.myapplication.database.UserDBHelper;
    11. public class SQLiteWriteActivity extends AppCompatActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener
    12. {
    13. private UserDBHelper mHelper; // 声明一个用户数据库帮助器的对象
    14. private EditText et_name;
    15. private EditText et_age;
    16. private EditText et_height;
    17. private EditText et_weight;
    18. private boolean isMarried = false;
    19. @Override
    20. protected void onCreate(Bundle savedInstanceState)
    21. {
    22. super.onCreate(savedInstanceState);
    23. setContentView(R.layout.activity_sqlite_write);
    24. et_name = findViewById(R.id.et_name);
    25. et_age = findViewById(R.id.et_age);
    26. et_height = findViewById(R.id.et_height);
    27. et_weight = findViewById(R.id.et_weight);
    28. CheckBox ck_married = findViewById(R.id.ck_married);
    29. ck_married.setOnCheckedChangeListener(this);
    30. findViewById(R.id.btn_save).setOnClickListener(this);
    31. }
    32. @Override
    33. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    34. {
    35. isMarried = isChecked;
    36. }
    37. @Override
    38. protected void onStart()
    39. {
    40. super.onStart();
    41. // 获得数据库帮助器的实例
    42. mHelper = UserDBHelper.getInstance(this, 1);
    43. mHelper.openWriteLink(); // 打开数据库帮助器的写连接
    44. }
    45. @Override
    46. protected void onStop()
    47. {
    48. super.onStop();
    49. mHelper.closeLink(); // 关闭数据库连接
    50. }
    51. @Override
    52. public void onClick(View v)
    53. {
    54. if (v.getId() == R.id.btn_save)
    55. {
    56. String name = et_name.getText().toString();
    57. String age = et_age.getText().toString();
    58. String height = et_height.getText().toString();
    59. String weight = et_weight.getText().toString();
    60. if (TextUtils.isEmpty(name))
    61. {
    62. ToastUtil.show(this, "请先填写姓名");
    63. return;
    64. }
    65. else if (TextUtils.isEmpty(age))
    66. {
    67. ToastUtil.show(this, "请先填写年龄");
    68. return;
    69. }
    70. else if (TextUtils.isEmpty(height))
    71. {
    72. ToastUtil.show(this, "请先填写身高");
    73. return;
    74. }
    75. else if (TextUtils.isEmpty(weight))
    76. {
    77. ToastUtil.show(this, "请先填写体重");
    78. return;
    79. }
    80. // 以下声明一个用户信息对象,并填写它的各字段值
    81. UserInfo info = new UserInfo();
    82. info.name = name;
    83. info.age = Integer.parseInt(age);
    84. info.height = Long.parseLong(height);
    85. info.weight = Float.parseFloat(weight);
    86. info.married = isMarried;
    87. info.update_time = DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss");
    88. mHelper.insert(info); // 执行数据库帮助器的插入操作
    89. ToastUtil.show(this, "数据已写入SQLite数据库");
    90. }
    91. }
    92. }

     

     

    UserInfo:

    1. package com.example.myapplication.bean;
    2. //用户信息
    3. public class UserInfo
    4. {
    5. public long rowid; // 行号
    6. public int xuhao; // 序号
    7. public String name; // 姓名
    8. public int age; // 年龄
    9. public long height; // 身高
    10. public float weight; // 体重
    11. public boolean married; // 婚否
    12. public String update_time; // 更新时间
    13. public String phone; // 手机号
    14. public String password; // 密码
    15. public UserInfo()
    16. {
    17. rowid = 0L;
    18. xuhao = 0;
    19. name = "";
    20. age = 0;
    21. height = 0L;
    22. weight = 0.0f;
    23. married = false;
    24. update_time = "";
    25. phone = "";
    26. password = "";
    27. }
    28. }

    UserDBHelper
    
    1. package com.example.myapplication.database;
    2. import android.annotation.SuppressLint;
    3. import android.content.ContentValues;
    4. import android.content.Context;
    5. import android.database.Cursor;
    6. import android.database.sqlite.SQLiteDatabase;
    7. import android.database.sqlite.SQLiteOpenHelper;
    8. import android.util.Log;
    9. import com.example.myapplication.bean.UserInfo;
    10. import java.util.ArrayList;
    11. import java.util.List;
    12. @SuppressLint("DefaultLocale")
    13. public class UserDBHelper extends SQLiteOpenHelper
    14. {
    15. private static final String TAG = "UserDBHelper";
    16. private static final String DB_NAME = "user.db"; // 数据库的名称
    17. private static final int DB_VERSION = 1; // 数据库的版本号
    18. private static UserDBHelper mHelper = null; // 数据库帮助器的实例
    19. private SQLiteDatabase mDB = null; // 数据库的实例
    20. public static final String TABLE_NAME = "user_info"; // 表的名称
    21. private UserDBHelper(Context context) {
    22. super(context, DB_NAME, null, DB_VERSION);
    23. }
    24. private UserDBHelper(Context context, int version) {
    25. super(context, DB_NAME, null, version);
    26. }
    27. // 利用单例模式获取数据库帮助器的唯一实例
    28. public static UserDBHelper getInstance(Context context, int version)
    29. {
    30. if (version > 0 && mHelper == null)
    31. {
    32. mHelper = new UserDBHelper(context, version);
    33. }
    34. else if (mHelper == null)
    35. {
    36. mHelper = new UserDBHelper(context);
    37. }
    38. return mHelper;
    39. }
    40. // 打开数据库的读连接
    41. public SQLiteDatabase openReadLink()
    42. {
    43. if (mDB == null || !mDB.isOpen())
    44. {
    45. mDB = mHelper.getReadableDatabase();
    46. }
    47. return mDB;
    48. }
    49. // 打开数据库的写连接
    50. public SQLiteDatabase openWriteLink()
    51. {
    52. if (mDB == null || !mDB.isOpen())
    53. {
    54. mDB = mHelper.getWritableDatabase();
    55. }
    56. return mDB;
    57. }
    58. // 关闭数据库连接
    59. public void closeLink()
    60. {
    61. if (mDB != null && mDB.isOpen())
    62. {
    63. mDB.close();
    64. mDB = null;
    65. }
    66. }
    67. // 创建数据库,执行建表语句
    68. public void onCreate(SQLiteDatabase db)
    69. {
    70. Log.d(TAG, "onCreate");
    71. String drop_sql = "DROP TABLE IF EXISTS " + TABLE_NAME + ";";
    72. Log.d(TAG, "drop_sql:" + drop_sql);
    73. db.execSQL(drop_sql);
    74. String create_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
    75. + "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
    76. + "name VARCHAR NOT NULL," + "age INTEGER NOT NULL,"
    77. + "height INTEGER NOT NULL," + "weight FLOAT NOT NULL,"
    78. + "married INTEGER NOT NULL," + "update_time VARCHAR NOT NULL"
    79. //演示数据库升级时要先把下面这行注释
    80. + ",phone VARCHAR" + ",password VARCHAR"
    81. + ");";
    82. Log.d(TAG, "create_sql:" + create_sql);
    83. db.execSQL(create_sql); // 执行完整的SQL语句
    84. }
    85. // 升级数据库,执行表结构变更语句
    86. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    87. Log.d(TAG, "onUpgrade oldVersion=" + oldVersion + ", newVersion=" + newVersion);
    88. if (newVersion > 1) {
    89. //Android的ALTER命令不支持一次添加多列,只能分多次添加
    90. String alter_sql = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + "phone VARCHAR;";
    91. Log.d(TAG, "alter_sql:" + alter_sql);
    92. db.execSQL(alter_sql);
    93. alter_sql = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + "password VARCHAR;";
    94. Log.d(TAG, "alter_sql:" + alter_sql);
    95. db.execSQL(alter_sql); // 执行完整的SQL语句
    96. }
    97. }
    98. // 根据指定条件删除表记录
    99. public int delete(String condition) {
    100. // 执行删除记录动作,该语句返回删除记录的数目
    101. return mDB.delete(TABLE_NAME, condition, null);
    102. }
    103. // 删除该表的所有记录
    104. public int deleteAll() {
    105. // 执行删除记录动作,该语句返回删除记录的数目
    106. return mDB.delete(TABLE_NAME, "1=1", null);
    107. }
    108. // 往该表添加一条记录
    109. public long insert(UserInfo info) {
    110. List<UserInfo> infoList = new ArrayList<UserInfo>();
    111. infoList.add(info);
    112. return insert(infoList);
    113. }
    114. // 往该表添加多条记录
    115. public long insert(List<UserInfo> infoList)
    116. {
    117. long result = -1;
    118. for (int i = 0; i < infoList.size(); i++)
    119. {
    120. UserInfo info = infoList.get(i);
    121. List<UserInfo> tempList = new ArrayList<UserInfo>();
    122. // 如果存在同名记录,则更新记录
    123. // 注意条件语句的等号后面要用单引号括起来
    124. if (info.name != null && info.name.length() > 0)
    125. {
    126. String condition = String.format("name='%s'", info.name);
    127. tempList = query(condition);
    128. if (tempList.size() > 0)
    129. {
    130. update(info, condition);
    131. result = tempList.get(0).rowid;
    132. continue;
    133. }
    134. }
    135. // 如果存在同样的手机号码,则更新记录
    136. if (info.phone != null && info.phone.length() > 0)
    137. {
    138. String condition = String.format("phone='%s'", info.phone);
    139. tempList = query(condition);
    140. if (tempList.size() > 0)
    141. {
    142. update(info, condition);
    143. result = tempList.get(0).rowid;
    144. continue;
    145. }
    146. }
    147. // 不存在唯一性重复的记录,则插入新记录
    148. ContentValues cv = new ContentValues();
    149. cv.put("name", info.name);
    150. cv.put("age", info.age);
    151. cv.put("height", info.height);
    152. cv.put("weight", info.weight);
    153. cv.put("married", info.married);
    154. cv.put("update_time", info.update_time);
    155. cv.put("phone", info.phone);
    156. cv.put("password", info.password);
    157. // 执行插入记录动作,该语句返回插入记录的行号
    158. result = mDB.insert(TABLE_NAME, "", cv);
    159. if (result == -1) { // 添加成功则返回行号,添加失败则返回-1
    160. return result;
    161. }
    162. }
    163. return result;
    164. }
    165. // 根据条件更新指定的表记录
    166. public int update(UserInfo info, String condition)
    167. {
    168. ContentValues cv = new ContentValues();
    169. cv.put("name", info.name);
    170. cv.put("age", info.age);
    171. cv.put("height", info.height);
    172. cv.put("weight", info.weight);
    173. cv.put("married", info.married);
    174. cv.put("update_time", info.update_time);
    175. cv.put("phone", info.phone);
    176. cv.put("password", info.password);
    177. // 执行更新记录动作,该语句返回更新的记录数量
    178. return mDB.update(TABLE_NAME, cv, condition, null);
    179. }
    180. public int update(UserInfo info)
    181. {
    182. // 执行更新记录动作,该语句返回更新的记录数量
    183. return update(info, "rowid=" + info.rowid);
    184. }
    185. // 根据指定条件查询记录,并返回结果数据列表
    186. public List<UserInfo> query(String condition)
    187. {
    188. String sql = String.format("select rowid,_id,name,age,height,weight,married,update_time," +
    189. "phone,password from %s where %s;", TABLE_NAME, condition);
    190. Log.d(TAG, "query sql: " + sql);
    191. List<UserInfo> infoList = new ArrayList<UserInfo>();
    192. // 执行记录查询动作,该语句返回结果集的游标
    193. Cursor cursor = mDB.rawQuery(sql, null);
    194. // 循环取出游标指向的每条记录
    195. while (cursor.moveToNext()) {
    196. UserInfo info = new UserInfo();
    197. info.rowid = cursor.getLong(0); // 取出长整型数
    198. info.xuhao = cursor.getInt(1); // 取出整型数
    199. info.name = cursor.getString(2); // 取出字符串
    200. info.age = cursor.getInt(3); // 取出整型数
    201. info.height = cursor.getLong(4); // 取出长整型数
    202. info.weight = cursor.getFloat(5); // 取出浮点数
    203. //SQLite没有布尔型,用0表示false,用1表示true
    204. info.married = (cursor.getInt(6) == 0) ? false : true;
    205. info.update_time = cursor.getString(7); // 取出字符串
    206. info.phone = cursor.getString(8); // 取出字符串
    207. info.password = cursor.getString(9); // 取出字符串
    208. infoList.add(info);
    209. }
    210. cursor.close(); // 查询完毕,关闭数据库游标
    211. return infoList;
    212. }
    213. // 根据手机号码查询指定记录
    214. public UserInfo queryByPhone(String phone)
    215. {
    216. UserInfo info = null;
    217. List<UserInfo> infoList = query(String.format("phone='%s'", phone));
    218. if (infoList.size() > 0) { // 存在该号码的登录信息
    219. info = infoList.get(0);
    220. }
    221. return info;
    222. }
    223. }

     

     

     

    读,布局:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical" >
    5. <Button
    6. android:id="@+id/btn_delete"
    7. android:layout_width="match_parent"
    8. android:layout_height="wrap_content"
    9. android:text="删除所有记录"
    10. android:textColor="@color/black"
    11. android:textSize="17sp" />
    12. <TextView
    13. android:id="@+id/tv_sqlite"
    14. android:layout_width="match_parent"
    15. android:layout_height="wrap_content"
    16. android:paddingLeft="5dp"
    17. android:textColor="@color/black"
    18. android:textSize="17sp" />
    19. </LinearLayout>

    读,代码:

    1. package com.example.myapplication;
    2. import android.annotation.SuppressLint;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.TextView;
    6. import androidx.appcompat.app.AppCompatActivity;
    7. import com.example.myapplication.bean.UserInfo;
    8. import com.example.myapplication.database.UserDBHelper;
    9. import java.util.List;
    10. @SuppressLint("DefaultLocale")
    11. public class SQLiteReadActivity extends AppCompatActivity implements View.OnClickListener
    12. {
    13. private UserDBHelper mHelper; // 声明一个用户数据库帮助器的对象
    14. private TextView tv_sqlite;
    15. @Override
    16. protected void onCreate(Bundle savedInstanceState)
    17. {
    18. super.onCreate(savedInstanceState);
    19. setContentView(R.layout.activity_sqlite_read);
    20. tv_sqlite = findViewById(R.id.tv_sqlite);
    21. findViewById(R.id.btn_delete).setOnClickListener(this);
    22. }
    23. @Override
    24. protected void onStart()
    25. {
    26. super.onStart();
    27. // 获得数据库帮助器的实例
    28. mHelper = UserDBHelper.getInstance(this, 1);
    29. mHelper.openReadLink(); // 打开数据库帮助器的读连接
    30. readSQLite(); // 读取数据库中保存的所有用户记录
    31. }
    32. @Override
    33. protected void onStop()
    34. {
    35. super.onStop();
    36. mHelper.closeLink(); // 关闭数据库连接
    37. }
    38. // 读取数据库中保存的所有用户记录
    39. private void readSQLite()
    40. {
    41. if (mHelper == null)
    42. {
    43. ToastUtil.show(this, "数据库连接为空");
    44. return;
    45. }
    46. // 执行数据库帮助器的查询操作
    47. List<UserInfo> userList = mHelper.query("1=1");
    48. String desc = String.format("数据库查询到%d条记录,详情如下:", userList.size());
    49. for (int i = 0; i < userList.size(); i++)
    50. {
    51. UserInfo info = userList.get(i);
    52. desc = String.format("%s\n第%d条记录信息如下:", desc, i + 1);
    53. desc = String.format("%s\n 姓名为%s", desc, info.name);
    54. desc = String.format("%s\n 年龄为%d", desc, info.age);
    55. desc = String.format("%s\n 身高为%d", desc, info.height);
    56. desc = String.format("%s\n 体重为%f", desc, info.weight);
    57. desc = String.format("%s\n 婚否为%b", desc, info.married);
    58. desc = String.format("%s\n 更新时间为%s", desc, info.update_time);
    59. }
    60. if (userList.size() <= 0)
    61. {
    62. desc = "数据库查询到的记录为空";
    63. }
    64. tv_sqlite.setText(desc);
    65. }
    66. @Override
    67. public void onClick(View v)
    68. {
    69. if (v.getId() == R.id.btn_delete)
    70. {
    71. mHelper.closeLink(); // 关闭数据库连接
    72. mHelper.openWriteLink(); // 打开数据库帮助器的写连接
    73. mHelper.deleteAll(); // 删除所有记录
    74. mHelper.closeLink(); // 关闭数据库连接
    75. mHelper.openReadLink(); // 打开数据库帮助器的读连接
    76. readSQLite(); // 读取数据库中保存的所有用户记录
    77. ToastUtil.show(this, "已删除所有记录");
    78. }
    79. }
    80. }

     

     

     

    ==============================================================================================================

     

     

     

     

     

     

     

  • 相关阅读:
    【Bug——VMware Workstation】虚拟机桥接网络没有 VMnet0
    Python学习笔记:Jupyter Notebook快速入门案例:学习时间与成绩的关系
    蓝桥杯练习笔记(十五)
    Spring学习笔记(七)SpringMVC入门
    2022牛客蔚来杯第四场 N K D H A
    node.js 用 xml2js.Parser 读 Freeplane.mm文件,生成测试用例.csv文件
    vue3.0子组件向父组件传值-发布订阅者模式
    基于 jasypt 实现spring boot 配置文件脱敏
    性能测试-基础理论知识
    Cassandra介绍(二)
  • 原文地址:https://blog.csdn.net/m0_61442607/article/details/126439447