安卓开发Android studio学习笔记 利用SQLiteDatabase操作数据表
(资料图片)
Android studio学习笔记
第一步:配置strings.xml第二步:配置activity_main.xml第三步:配置MainActivity第四步:查看代码运行结果截图
第一步:配置strings.xml
利用SQLiteDatabase操作数据表创建或打开数据库创建表添加表记录更新表记录显示全部表记录删除全部表记录删除表删除数据库
第二步:配置activity_main.xml
第三步:配置MainActivitypackage com.example.myapp01;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;import androidx.appcompat.app.AppCompatActivity;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; // 学号 @Override protected 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 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 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 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 getNewId(String tableName) {// 判断表是否存在 if (isTableExisted(tableName)) {// 查询全部表记录,返回游标 Cursor cursor = db.query(tableName, null, null, null, null, null, null); // 移到最后一条记录 if (cursor.moveToLast()) {// 获取最后一条记录的id int id = cursor.getInt(0); // 返回新记录的id return id + 1; } } return 1; } /** * 更新表记录 * * @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 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 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) + "\n"); } // 弹出吐司显示全部学生记录 Toast.makeText(this, "全部表记录\n\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(); } } }}第四步:查看代码运行结果截图具体功能就不一 一展示了 较为繁琐
标签:
相关推荐:
最新新闻:
- 魅族20 Pro外观曝光:竖排三摄、采用直角边框:全球热讯
- 浮点保留两位小数 R语言初级教程 每日热门
- 安卓开发Android studio学习笔记 利用SQLiteDatabase操作数据表
- 小米Connectify无法连接xp怎么办?解决方法步骤|天天快报
- 【全球独家】最新证书挂靠价格行情表
- 全球首发240W快充!realme真我GT Neo5今晚零点正式开售
- 观速讯丨英伟达RTX4060桌面显卡曝光,移动版新品已上架开售
- 小米激光打印一体机 K100 发布:首发 849 元-环球速看料
- 世界今亮点!东映社长手冢治逝世 享年62岁
- 天天即时:周黑鸭今年利润大幅下滑!下跌超90%
- 世界热头条丨画质拉满 油管博主用虚幻5制作《地铁跑酷》
- 颜值担当,航天动力,小刀电动车朋克成Z世代新宠-今日播报
- 势不可挡,小贝先行,新华三小贝2023全国合作伙伴大会圆满召开
- Redmi K60大降价!3000元普及512G!|环球新动态
- 什么值得买首发科学消费纪录片,呈现优质内容价值
- 集成灶10大品牌帅丰“全渠道新增长 开新局”经销商会议精彩回顾_环球报道
- 《仙剑奇侠传7》首部DLC正式上线!N卡光追对比图公布|资讯
- 融资丨「一道新能」完成新一轮融资,华兴新经济基金、中电中金基金、金雨茂物、厚纪资本、礼瀚投资、豪尔赛、普华资本等投资
- 黑白手绘风格冒险游戏《白之旅》发布上市宣传片 明日发行
- 性价比高!新起亚K3上市,8.99万元放飞价起售
- 世界微速讯:2023 ChinaJoy展会上海浦东举办 7月28日正式开幕
- 当前快报:CDPR未经授权在《巫师3》次世代版使用玩家MOD 曾表示会给钱
- 联想新品牌广告上线 徐工挖掘机开至总部“表白”
- 环球微动态丨i9-13900H+满血4060游戏本 华硕天选4系列开始预约
- 传承经典!索尼将保持Sony Xperia 1V的设计不变:快讯
- 英飞凌通过合作伙伴生态系统,助推创新多电平D类音频放大器技术应用
- 魅族 20 Pro 定版渲染图曝光: 很像三星 S23
- 《狂野之心》武器战斗演示:打击感拉满了!
- 纸片幸存者like游戏《通神榜》Steam发售 后续更新计划公布
- 【环球快播报】《最后的生还者Part1》PC火萤版开启预购 售价100刀
- 全球球精选!《我的世界》1.20更新将添加粉丝投票新生物嗅探者
- 互动韩剧《Love Too Easily》上线Steam 支持中文
- 联想情人节发信告白合作伙伴:陪伴智能化转型每一步_当前消息
- 环球动态:吸尘器充电爆炸:威力巨大 卧室烧黑
- 【全球报资讯】魅族20系列手机壳曝光:简约设计 美绝了
- 对标百万级豪车,法拉第未来FF 91 Futurist运抵上海-世界新视野
- 世界热点!深证100etf期权分仓是什么?分仓是场内期权吗?
- 要出老年电话手表?小天才申请老天才商标:每日视点
- 【环球热闻】《海盗战记》第二季特别版6.5话公开 讲述特别剧情
- 天天最新:谷歌母公司董事长诉“苦衷”:不想推一个会说错话或说话有毒的系统
- 【时快讯】B站诉优酷侵权bilibili晚会:索赔百万元
- 一个接口不够?配备USB-C和Lightning端口的iPhone 12 Mini来了
- 【天天热闻】售价 459 元,微软 Xbox 手柄「浪漫粉」新配色开售
- 世界速看:利盟荣获2022年度绿色领跑企业大奖
- 天天最新:Commvault:2023年五大网络安全预测
- 小米新款三口 67W 氮化镓充电器上架:首发 129 元_即时
- 甘肃高考第二次志愿填报时间
- 最新消息:《帕丁顿熊》导演弗雷德·阿斯泰尔传记片 蜘蛛侠主演
- 《狂野之心》全球解锁时间公布:主机版17号凌晨开玩!
- 高启强黑化的幕后推手,小灵通的狂飙史
- 每日聚焦:《Apex英雄》四周年纪念活动 免费送英雄密客和艾许
- 日本政府提名植田和男担任央行行长,接替黑田东彦。|播报
- 全球球精选!你不在乎“爱情”了吗
- RTX 4060笔记本跑分首曝:比RTX 3060强76%
- 焦点热议:甲骨文和Uber宣布展开为期七年的战略性云合作
- 环球快消息!在线观点:蒸烤独立赛道再度领跑 森歌集成灶重塑烹饪新体验
- 三星Galaxy Z Fold4轻松定格甜蜜瞬间 让情侣照更具创意
- 郭明錤:小米手机与零部件库存共约 4000 万部,高通/联发科处理器积压严重
- 蕾哈娜亮相第57届超级碗中场秀 表演中现场补妆官宣二胎:环球简讯
- 《如龙维新极》堂岛之龙DLC演示:穿上西装变回桐生-今日最新
- 环球快讯:1月欧洲PS5销量暴增!同比增长202%:有库存即无敌
- 天天快看:《使命召唤19:现代战争2》第二赛季预告 新增日本地图:故乡的樱花开了!
- 天天快报!国行Xbox浪漫粉配色手柄已开售 官网售价459元
- 天天热议:《狂野之心》PC配置公开 2月16日23时正式解锁
- 《GT赛车7》将于2月21日升级更新 获得PS VR2支持
- 美国1月游戏总消费共43亿美元 同比下降5%:环球头条
- 桂庙新村:深大人的“后花园”,真的在拆了
- 星传新材料获紫金港资本千万级投资|天天快看
- 风语筑:截至2023年2月10日公司股东人数为43,100
- 全球今日报丨联想拯救者Y900平板官宣 14.5英寸大屏机皇来了
- RTX 4060笔记本跑分实测:超越RTX 3060 76%_独家
- OPPO Find X6曝光:刘作虎亲自操刀:环球讯息
- ChatGPT解释微信头像褪色,电子包浆是真的
- 情人节约会不能没有它,三星Galaxy A53 5G记录难忘瞬间 当前简讯
- 天天动态:《星战绝地幸存者》总监谈只登次世代原因:契合愿景