使用SQLite数据库

编程入门 行业动态 更新时间:2024-10-12 08:22:34

使用SQLite<a href=https://www.elefans.com/category/jswz/34/1771350.html style=数据库"/>

使用SQLite数据库

文章目录

    • 使用SQLiteDatabase类操作数据库
      • 1、创建安卓应用
      • 2、准备图片素材
      • 3、字符串资源文件
      • 4、主布局资源文件
      • 5、主界面类实现功能
      • 6、启动应用,查看效果
    • 使用SQLiteDatabase类操作数据表
      • 1、创建安卓应用
      • 2、准备背景图片
      • 3、字符串资源文件
      • 4、主布局资源文件
      • 5、主界面类实现功能
      • (1)编写代码创建或打开数据库
      • (2)编写代码创建表
      • (3)编写代码添加表记录
      • (4)编写代码更新表记录
      • (5)编写代码显示全部表记录
      • (6)编写代码删除全部表记录
      • (7)编写代码删除表
      • (8)编写代码删除数据库
    • 使用SQLiteDatabaseHelper类操作数据库与表
      • 1、创建安卓应用
      • 2、准备图片素材
      • 3、字符串资源文件
      • 4、主布局资源文件
      • 5、创建自定义数据库助手类
      • (1)构造方法
      • (2)重写onCreate方法
      • (3)重写onUpgrade方法
      • (4)编写query方法
      • (5)编写delete方法
      • (6)编写update方法
      • (7)编写insert方法
      • (8)查看数据库助手类完整代码
      • 6、主界面类实现功能
      • 7、启动应用,查看效果

使用SQLiteDatabase类操作数据库

1、创建安卓应用

基于Empty Activity模板创建安卓应用 - CreateDeleteDB

单击【Finish】按钮

2、准备图片素材

将背景图片拷贝到drawable目录

3、字符串资源文件

字符串资源文件 - strings.xml

<resources><string name="app_name">创建和删除数据库</string><string name="create_db">创建数据库</string><string name="delete_db">删除数据库</string>
</resources>

4、主布局资源文件

主布局资源文件 - activity_main.xml\

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:gravity="center"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_create_db"android:layout_width="200dp"android:layout_height="wrap_content"android:onClick="doCreateDB"android:text="@string/create_db"android:textSize="20dp" /><Buttonandroid:id="@+id/btn_delete_db"android:layout_width="200dp"android:layout_height="wrap_content"android:onClick="doDeleteDB"android:text="@string/delete_db"android:textSize="20dp" />
</LinearLayout>

查看预览效果

5、主界面类实现功能

主界面类 - MainActivity
声明常量和变量
获取应用当期数据库个数
编写代码创建数据库
编写代码删除数据库

查看完整源代码

package net.hw.create_delete_db;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private static final String DB_NAME_PREFIX = "student"; // 数据库名前缀private static final int MODE = Context.MODE_PRIVATE; // 文件访问模式private int count; // 数据库计时器private SQLiteDatabase db; // SQLite数据库对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 获取应用当前数据库个数count = databaseList().length;}/*** 创建数据库* 数据库位置:/data/data/net.hw.create_delete_db/databases* @param view*/public void doCreateDB(View view) {// 数据库计数器累加count++;// 定义数据库名String dbname = DB_NAME_PREFIX + count + ".db";try {// 打开或创建数据库db = openOrCreateDatabase(dbname, MODE, null);// 提示用户创建成功Toast.makeText(this, "恭喜,数据库【" + dbname + "】创建成功!", Toast.LENGTH_SHORT).show();} catch (Exception e) {// 提示用户创建失败Toast.makeText(this, "遗憾,数据库【" + dbname + "】创建失败!", Toast.LENGTH_SHORT).show();}}/*** 删除数据库(删除全部数据库)** @param view*/public void doDeleteDB(View view) {// 获取数据库名数组String[] dbnames = databaseList();// 判断是否有数据库可删除if (dbnames.length > 0) {// 遍历数组,按名称删除数据库for (String dbname: dbnames) {// 删除数据库deleteDatabase(dbname);}// 数据库计数器归零count = 0;// 提示用户删除成功Toast.makeText(this, "恭喜,数据库全部被删除!", Toast.LENGTH_SHORT).show();} else {// 提示用户没有数据库可删除Toast.makeText(this, "遗憾,没有数据库可删除!", Toast.LENGTH_SHORT).show();}}
}

6、启动应用,查看效果

创建5个数据库,然后全部删除,最后又创建了三个数据库

使用SQLiteDatabase类操作数据表

1、创建安卓应用

基于Empty Activity模板创建安卓应用 - OperateTable

单击【Finish】按钮

2、准备背景图片

将背景图片拷贝到drawable目录

3、字符串资源文件

字符串资源文件 - strings.xml

<resources><string name="app_name">利用SQLiteDatabase操作数据表</string><string name="create_or_open_db">创建或打开数据库</string><string name="create_table">创建表</string><string name="add_record">添加表记录</string><string name="update_record">更新表记录</string><string name="display_all_records">显示全部表记录</string><string name="delete_all_records">删除全部表记录</string><string name="delete_table">删除表</string><string name="delete_db">删除数据库</string>
</resources>

4、主布局资源文件

主布局资源文件 - activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:gravity="center"android:orientation="vertical"android:padding="10dp"><Buttonandroid:id="@+id/btn_create_or_open_db"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doCreateOrOpenDB"android:text="@string/create_or_open_db"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_create_table"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doCreateTable"android:text="@string/create_table"android:textSize="20sp" /><Buttonandroid:id="@+id/btnAddRecord"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doAddRecord"android:text="@string/add_record"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_update_record"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doUpdateRecord"android:text="@string/update_record"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_display_all_records"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doDisplayAllRecords"android:text="@string/display_all_records"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_delete_all_records"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doDeleteAllRecords"android:text="@string/delete_all_records"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_delete_table"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doDeleteTable"android:text="@string/delete_table"android:textSize="20sp" /><Buttonandroid:id="@+id/btn_delete_db"android:layout_width="220dp"android:layout_height="wrap_content"android:onClick="doDeleteDB"android:text="@string/delete_db"android:textSize="20sp" />
</LinearLayout>

查看预览效果

5、主界面类实现功能

主界面类 - MainActivity

声明常量与变量

(1)编写代码创建或打开数据库

数据库不存在就创建,存在就打开
启动应用,查看效果

(2)编写代码创建表

编写代码判断表是否存在
编写代码创建表
启动应用,查看效果
创建表得先打开数据库,创建表成功之后,再次创建表,吐司提示表已经存在

(3)编写代码添加表记录

编写代码获取新记录的学号
编写代码添加表记录
启动应用,查看效果
添加表记录得先打开数据库,添加6条记录

(4)编写代码更新表记录

编写代码获取记录数

启动应用,查看效果

(5)编写代码显示全部表记录

判断表存在后,才能显示全部记录

启动应用,查看效果

(6)编写代码删除全部表记录

判断数据库是否存在,判断表是否存在
启动应用,查看效果

(7)编写代码删除表

判断数据库是否存在,判断表是否存在
启动应用,查看效果

(8)编写代码删除数据库

判断数据库是否存在
启动应用,查看效果

package net.hw.operate_table;import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private final String DB_NAME = "student.db"; // 数据库名private final String TABLE_NAME = "student"; // 表名private final int MODE = Context.MODE_PRIVATE; // 访问模式private SQLiteDatabase db; // SQLite数据库private int id; // 学号@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);}/*** 创建或打开数据库** @param view*/public void doCreateOrOpenDB(View view) {// 判断数据库是否存在if (databaseList().length == 0) {// 创建数据库db = openOrCreateDatabase(DB_NAME, MODE, null);// 提示用户数据库创建成功Toast.makeText(this, "恭喜,数据库【" + DB_NAME + "】创建成功!", Toast.LENGTH_LONG).show();} else {// 打开数据库db = openOrCreateDatabase(DB_NAME, MODE, null);// 提示用户数据库打开成功Toast.makeText(this, "恭喜,数据库【" + DB_NAME + "】打开成功!", Toast.LENGTH_LONG).show();}}/*** 判断表是否存在** @param tableName* @return true 表存在;false 表不存在*/private boolean isTableExisted(String tableName) {// 定义SQL字符串String strSQL = "SELECT * FROM sqlite_master WHERE type = ? AND name = ?";// 执行SQL查询,返回游标Cursor cursor = db.rawQuery(strSQL, new String[]{"table", tableName});// 判断游标里是否有记录if (cursor.getCount() > 0) {return true;} else {return false;}}/*** 创建表** @param view*/public void doCreateTable(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 弹出吐司提示用户表已存在Toast.makeText(this, "表【" + TABLE_NAME + "】已经存在!", Toast.LENGTH_LONG).show();} else {try {// 定义SQL字符串String strSQL = "CREATE TABLE " + TABLE_NAME + "(id integer, name text, gender text)";// 执行SQL语句db.execSQL(strSQL);// 提示用户创建表成功Toast.makeText(this, "创建表成功!", Toast.LENGTH_LONG).show();} catch (SQLException e) {// 提示用户创建表失败Toast.makeText(this, "创建表失败!", Toast.LENGTH_LONG).show();}}}}/*** 获取新记录的学号** @param tableName* @return*/private int getNewId(String tableName) {// 判断表是否存在if (isTableExisted(tableName)) {// 查询全部表记录,返回游标Cursor cursor = db.query(tableName, null, null,null, null, null, null);// 移到最后一条记录if (cursor.moveToLast()) {// 获取最后一条记录的idint id = cursor.getInt(0);// 返回新记录的idreturn id + 1;}}return 1;}/*** 添加表记录** @param view*/public void doAddRecord(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 获取新记录的学号id = getNewId(TABLE_NAME);// 创建内容值对象ContentValues values = new ContentValues();// 以键值对方式添加字段数据values.put("id", id);values.put("name", "学生" + id);values.put("gender", id % 2 == 1 ? "男" : "女");// 将数据插入表中long count = db.insert(TABLE_NAME, null, values);if (count != -1) {// 弹出吐司提示用户添加成功Toast.makeText(this, "恭喜,表记录添加成功!", Toast.LENGTH_LONG).show();} else {// 弹出吐司提示用户添加失败Toast.makeText(this, "恭喜,表记录添加失败!", Toast.LENGTH_LONG).show();}} else {// 提示用户先创建表Toast.makeText(this, "表【" + TABLE_NAME + "】不存在,请先创建!", Toast.LENGTH_LONG).show();}}}/*** 返回表记录数** @param tableName* @return 表记录数*/private int getRecordCount(String tableName) {// 定义SQL字符串String strSQL = "SELECT * FROM " + tableName;// 执行SQL,返回游标Cursor cursor = db.rawQuery(strSQL, null);// 返回记录数return cursor.getCount();}/*** 更新表记录** @param view*/public void doUpdateRecord(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。", Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 判断是否有表记录if (getRecordCount(TABLE_NAME) > 0) {// 定义SQL字符串String strSQL = "UPDATE " + TABLE_NAME + " SET name = ?, gender = ? WHERE id = ?";try {// 执行SQL,返回更新表记录数db.execSQL(strSQL, new Object[]{"张晓芸", "女", 1});// 提示用户更新记录成功Toast.makeText(this, "恭喜,表记录更新成功!", Toast.LENGTH_LONG).show();} catch (SQLException e) {// 提示用户更新记录失败Toast.makeText(this, "遗憾,表记录更新失败!", Toast.LENGTH_LONG).show();}} else {// 弹出吐司提示用户没有表记录Toast.makeText(this, "没有表记录可更新,请先添加表记录!", Toast.LENGTH_LONG).show();}} else {// 提示用户先创建表Toast.makeText(this, "表【" + TABLE_NAME + "】不存在,请先创建!", Toast.LENGTH_LONG).show();}}}/*** 显示全部表记录** @param view*/public void doDisplayAllRecords(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 判断表里是否有记录if (getRecordCount(TABLE_NAME) > 0) {// 定义SQL字符串String strSQL = "SELECT * FROM " + TABLE_NAME;// 执行SQL,返回游标Cursor cursor = db.query(TABLE_NAME, null, null,null, null, null, null);// 定义字符串生成器StringBuilder builder = new StringBuilder();// 遍历游标对象(记录集)while (cursor.moveToNext()) {// 将每条记录信息组合之后添加到字符串生成器builder.append(cursor.getInt(0) + " "+ cursor.getString(1) + " "+ cursor.getString(2) + " ");}// 弹出吐司显示全部学生记录Toast.makeText(this, "全部表记录\n" + builder.toString(),Toast.LENGTH_LONG).show();} else {// 弹出吐司提示用户没有表记录Toast.makeText(this, "没有表记录可显示,请先添加表记录!",Toast.LENGTH_LONG).show();}} else {// 提示用户先创建表Toast.makeText(this, "表【" + TABLE_NAME + "】不存在,请先创建!",Toast.LENGTH_LONG).show();}}}/*** 删除全部表记录(三个层面的判断)** @param view*/public void doDeleteAllRecords(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 判断是否有表记录if (getRecordCount(TABLE_NAME) > 0) {// 定义SQL字符串String strSQL = "DELETE FROM " + TABLE_NAME;try {// 执行SQL,删除表记录db.execSQL(strSQL);// 提示用户删除表记录成功Toast.makeText(this, "全部表记录已删除!", Toast.LENGTH_LONG).show();} catch (SQLException e) {// 提示用户删除表记录失败Toast.makeText(this, "删除表记录失败!", Toast.LENGTH_LONG).show();}} else {// 弹出吐司提示用户没有表记录Toast.makeText(this, "没有表记录可删除,请先添加表记录!",Toast.LENGTH_LONG).show();}} else {// 提示用户先创建表Toast.makeText(this, "表【" + TABLE_NAME + "】不存在,请先创建!",Toast.LENGTH_LONG).show();}}}/*** 删除表** @param view*/public void doDeleteTable(View view) {// 判断数据库对象是否为空if (db == null) {// 判断数据库是否存在if (databaseList().length == 0) {Toast.makeText(this, "请创建数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();} else {Toast.makeText(this, "请打开数据库【" + DB_NAME + "】。",Toast.LENGTH_LONG).show();}} else {// 判断表是否存在if (isTableExisted(TABLE_NAME)) {// 定义SQL字符串String strSQL = "DROP TABLE " + TABLE_NAME;try {// 执行SQL,删除表db.execSQL(strSQL);// 提示用户表删除成功Toast.makeText(this, "表删除成功!", Toast.LENGTH_LONG).show();} catch (SQLException e) {// 提示用户表删除失败Toast.makeText(this, "表删除失败!", Toast.LENGTH_LONG).show();}} else {// 提示用户先创建表Toast.makeText(this, "表【" + TABLE_NAME + "】不存在,请先创建!",Toast.LENGTH_LONG).show();}}}/*** 删除数据库** @param view*/public void doDeleteDB(View view) {// 判断数据库是否存在if (databaseList().length == 0) {// 提示用户没有数据库Toast.makeText(this, "没有数据库可删除!", Toast.LENGTH_LONG).show();} else {// 判断数据库删除是否成功if (deleteDatabase(DB_NAME)) {// 提示用户删除成功Toast.makeText(this, "数据库【" + DB_NAME + "】删除成功!",Toast.LENGTH_LONG).show();} else {// 提示用户删除失败Toast.makeText(this, "数据库【" + DB_NAME + "】删除失败!",Toast.LENGTH_LONG).show();}}}
}

使用SQLiteDatabaseHelper类操作数据库与表

1、创建安卓应用

基于Empty Actiivity模板创建安卓应用 - SQLiteContacts
单击【Finish】按钮

2、准备图片素材

将背景图片拷贝到drawable目录

3、字符串资源文件

字符串资源文件 - strings.xml

<resources><string name="app_name">联系人(采用SQLite数据库)</string>
</resources>

4、主布局资源文件

主布局资源文件 - activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:orientation="vertical"android:padding="10dp"tools:context=".MainActivity"><ListViewandroid:id="@+id/lv_contact"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView>
</LinearLayout>

查看预览效果

5、创建自定义数据库助手类

自定义数据库助手类 - DBHelper
继承SQLiteOpenHelper类
声明变量与常量

(1)构造方法

创建单参构造方法 - DBHelper(Context context)

(2)重写onCreate方法

编写createTable()方法

编写addRecords()方法
重写onCreate()方法,创建数据表并添加表记录

(3)重写onUpgrade方法

升级数据库时会调用

(4)编写query方法

对外提供表记录查询服务,返回游标对象

(5)编写delete方法

对外提供表记录删除服务,返回删除记录数

(6)编写update方法

对外提供表记录更新服务,返回更新记录数

(7)编写insert方法

对外提供表记录插入服务,返回插入记录数

(8)查看数据库助手类完整代码

package net.hw.sqlite_contacts;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;import androidx.annotation.Nullable;/*** 功能:数据库助手类* 作者:华卫* 日期:2022年12月14日*/
public class DBHelper extends SQLiteOpenHelper {private Context context; // 上下文环境private static final String DB_NAME = "contact.db"; // 数据库名private static final int DB_VERSION = 1; // 数据库版本号private static final String TABLE_NAME = "contact"; // 表名/*** 构造方法(上下文、数据库名、游标工厂、数据库版本号)** @param context*/public DBHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}/*** 创建数据表** @param db* @param tableName*/private void createTable(SQLiteDatabase db, String tableName) {// 定义SQL字符串String strSQL = "create table " + tableName+ "(_id text, name text, gender text, age integer, telephone text)";try {// 执行SQL,创建数据表db.execSQL(strSQL);} catch (SQLException e) {Toast.makeText(context, "遗憾,建表失败!", Toast.LENGTH_SHORT).show();}}/*** 添加表记录** @param db* @param tableName*/private void addRecords(SQLiteDatabase db, String tableName) {// 创建内容值对象ContentValues values = new ContentValues();// 将第1条记录信息放入内容值对象values.put("_id", "2021001");values.put("name", "李小文");values.put("gender", "男");values.put("age", 19);values.put("telephone", "15878786780");// 利用数据库对象的插入方法,插入第1条记录db.insert(tableName, null, values);// 将第2条记录信息放入内容值对象values.put("_id", "2021002");values.put("name", "韩玉玲");values.put("gender", "女");values.put("age", 20);values.put("telephone", "15845678907");// 利用数据库对象的插入方法,插入第2条记录db.insert(tableName, null, values);// 将第3条记录信息放入内容值对象values.put("_id", "2021003");values.put("name", "唐语涵");values.put("gender", "女");values.put("age", 18);values.put("telephone", "13978789089");// 利用数据库对象的插入方法,插入第3条记录db.insert(tableName, null, values);// 将第4条记录信息放入内容值对象values.put("_id", "2021004");values.put("name", "董翔宇");values.put("gender", "男");values.put("age", 20);values.put("telephone", "15823234567");// 利用数据库对象的插入方法,插入第4条记录db.insert(tableName, null, values);// 将第5条记录信息放入内容值对象values.put("_id", "2021005");values.put("name", "郑文佳");values.put("gender", "女");values.put("age", 18);values.put("telephone", "13978781234");// 利用数据库对象的插入方法,插入第5条记录db.insert(tableName, null, values);// 将第6条记录信息放入内容值对象values.put("_id", "2021006");values.put("name", "伍子胥");values.put("gender", "男");values.put("age", 20);values.put("telephone", "15878786780");// 利用数据库对象的插入方法,插入第6条记录db.insert(tableName, null, values);// 将第7条记录信息放入内容值对象values.put("_id", "2021007");values.put("name", "南怀瑾");values.put("gender", "男");values.put("age", 18);values.put("telephone", "13956567862");// 利用数据库对象的插入方法,插入第7条记录db.insert(tableName, null, values);// 将第8条记录信息放入内容值对象values.put("_id", "2021008");values.put("name", "李文华");values.put("gender", "女");values.put("age", 18);values.put("telephone", "15956567845");// 利用数据库对象的插入方法,插入第8条记录db.insert(tableName, null, values);// 将第9条记录信息放入内容值对象values.put("_id", "2021009");values.put("name", "吴文渊");values.put("gender", "男");values.put("age", 20);values.put("telephone", "13978784560");// 利用数据库对象的插入方法,插入第8条记录db.insert(tableName, null, values);// 将第10条记录信息放入内容值对象values.put("_id", "2021010");values.put("name", "陈燕文");values.put("gender", "女");values.put("age", 18);values.put("telephone", "15890903456");// 利用数据库对象的插入方法,插入第10条记录db.insert(tableName, null, values);}/*** 创建回调方法,只有当数据库不存在时才会被调用* @param db*/@Overridepublic void onCreate(SQLiteDatabase db) {// 创建数据表createTable(db, TABLE_NAME);// 添加表记录addRecords(db, TABLE_NAME);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 暂时不升级,不需要写代码}/*** 查询方法** @param tableName* @param columns* @param selection* @param selectionArgs* @return 游标对象*/public Cursor query(String tableName, String[] columns,String selection, String[] selectionArgs) {// 获取只读数据库SQLiteDatabase db = getReadableDatabase();// 执行数据库查询方法,返回游标对象return db.query(tableName, columns, selection, selectionArgs,null, null, null, null);}/*** 删除方法** @param tableName* @param whereClause* @param whereArgs* @return 删除记录数*/public int delete(String tableName, String whereClause, String[] whereArgs) {// 获取可写数据库SQLiteDatabase db = getWritableDatabase();// 执行数据库删除方法,返回删除记录数return db.delete(tableName, whereClause, whereArgs);}/*** 更新方法** @param tableName* @param values* @param whereClause* @param whereArgs* @return 更新记录数*/public int update(String tableName, ContentValues values,String whereClause, String[] whereArgs) {// 获取可写数据库SQLiteDatabase db = getWritableDatabase();// 执行数据库更新方法,返回更新记录数return db.update(tableName, values, whereClause, whereArgs);}/*** 插入方法** @param tableName* @param values* @return 插入记录数*/public long insert(String tableName, ContentValues values) {// 获取可写数据库SQLiteDatabase db = getWritableDatabase();// 执行数据库插入方法,返回插入记录数return db.insert(tableName, null, values);}
}

6、主界面类实现功能

主界面类 - MainActivity
声明变量与常量
通过资源标识符获取控件实例
实例化数据库助手
查询全部联系人,返回游标,作为数据源
创建简单游标适配器
给列表控件设置适配器

给列表控件注册监听器
给列表控件添加上下文菜单
创建上下文菜单
上下文菜单项选择事件处理
查看主界面完整源代码

package net.hw.sqlite_contacts;import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private static final int EDIT_MENU_ITEM = 1; // 编辑菜单项private static final int DELETE_MENU_ITEM = 2; // 删除菜单项private ListView lvContact; // 联系人列表控件private SimpleCursorAdapter adapter; // 简单游标适配器private Cursor cursor; // 游标(数据源)private DBHelper dbHelper; // 数据库助手private int position; // 当前列表项位置@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过资源标识符获取控件实例lvContact = findViewById(R.id.lv_contact);// 实例化数据库助手dbHelper = new DBHelper(this);// 查询全部联系人,返回游标,作为数据源cursor = dbHelper.query("contact",null, null, null);// 创建简单游标适配器adapter = new SimpleCursorAdapter(this, // 参数1:上下文android.R.layout.simple_expandable_list_item_2, // 参数2:列表项模板cursor, // 参数3:游标(数据源)new String[]{"name", "telephone"}, // 参数4:字段列表new int[]{android.R.id.text1, android.R.id.text2}, // 参数5:控件标识列表SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER // 参数6:简单游标适配标识);// 给列表控件设置适配器lvContact.setAdapter(adapter);// 给列表控件注册监听器lvContact.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {// 将游标指针定位到选定记录cursor.moveToPosition(position);// 获取游标当前记录各个字段值String _id = cursor.getString(0);String name = cursor.getString(1);String gender = cursor.getString(2);int age = cursor.getInt(3);String telephone = cursor.getString(4);// 创建字符串生成器StringBuilder builder = new StringBuilder();// 将各个字段值添加到字符串生成器中builder.append("\n\n").append("编号:" + _id + "\n").append("姓名:" + name + "\n").append("性别:" + gender + "\n").append("年龄:" + age + "\n").append("电话:" + telephone + "\n");// 生成当前联系人记录信息String contactInfo = builder.toString();// 通过警告对话框显示当前联系人详情AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);dialogBuilder.setTitle("联系人详情").setIcon(getResources().getDrawable(R.mipmap.ic_launcher)).setMessage(contactInfo).setCancelable(false).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {//finish();}}).create().show();}});// 给列表控件注册上下文菜单registerForContextMenu(lvContact);}/*** 创建上下文菜单** @param menu* @param v* @param menuInfo*/@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);// 获取适配器上下文菜单信息AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) menuInfo;// 通过适配器上下文菜单获取当前位置position = acmi.position;// 将游标指针移到用户指定位置cursor.moveToPosition(position);// 获取当前联系人姓名String name = cursor.getString(1);// 创建上下文菜单项menu.add(1, EDIT_MENU_ITEM, 1, "编辑【" + name + "】记录");menu.add(1, DELETE_MENU_ITEM, 2, "删除【" + name + "】记录");// 设置上下文菜单标题行menu.setHeaderTitle("表记录操作");}/*** 上下文菜单项选择事件处理** @param item* @return*/@Overridepublic boolean onContextItemSelected(@NonNull MenuItem item) {// 判断用户选择了哪个菜单项switch (item.getItemId()) {case EDIT_MENU_ITEM:// 课后作业Toast.makeText(this, "此功能尚待完成!",Toast.LENGTH_SHORT).show();break;case DELETE_MENU_ITEM:// 创建警告对话框生成器AlertDialog.Builder builder = new AlertDialog.Builder(this);// 设置、创建并显示警告对话框builder.setIcon(R.mipmap.ic_launcher) // 设置图标.setTitle("删除表记录") // 设置标题.setMessage("您真要删除当前记录吗?") // 设置消息正文.setPositiveButton("是", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 将游标指针移到当前选定位置cursor.moveToPosition(position);// 获取当前联系人的编号String _id = cursor.getString(0);// 按编号删除联系人int count = dbHelper.delete("contact","_id = ?", new String[] {_id});// 判断是否删除成功if (count > 0) {// 提示用户删除成功Toast.makeText(MainActivity.this,"恭喜,记录删除成功!",Toast.LENGTH_SHORT).show();// 刷新列表控件,显示删除之后的联系人记录cursor.requery();// 通知列表控件数据源已发生变化lvContact.deferNotifyDataSetChanged();} else {// 提示用户删除失败Toast.makeText(MainActivity.this,"遗憾,记录删除失败!",Toast.LENGTH_SHORT).show();}}}) // 设置肯定按钮.setNegativeButton("否", null) // 设置否定按钮.create() // 创建警告对话框.show(); // 显示警告对话框break;}return true;}
}

7、启动应用,查看效果

单击列表项,弹出警告对话框,显示联系人详情;长按列表项,弹出警告对话框,让用户选择编辑和删除当前记录

更多推荐

使用SQLite数据库

本文发布于:2024-02-06 20:46:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751357.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   SQLite

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!