Android使用SQLite数据库no such table 问题

sqlite找不到表的问题,大多出现在模拟器里,因为db文件没找到,导致报错,为了避免此问题,增加了数据库文件是否存在的判断,就可以完美解决此类问题。如果能帮到您,麻烦点个赞。

可以直接看这个方法:

databaseExists(context).

package com.wzj.chapter07.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.wzj.chapter07.entity.User;

import java.io.File;
import java.io.IOException;

/** 操作数据库的工具类·实现

* SQLiteOpenHelper
*/
public class UserDBHelper extends SQLiteOpenHelper {
private static final String DB_NAME ="user.db";
private static final String TABLE_NAME = "user_info";
private static final int DB_VERSION = 1;
private static UserDBHelper userDBHelper = null;
// * SQLiteDatabase 读写是分开的,需要创建两个实例
private SQLiteDatabase mRDB=null;
private SQLiteDatabase mWDB=null;
//单例模式,获取唯一实例
public static UserDBHelper getInstance(Context context) {
if (userDBHelper == null) {
userDBHelper = new UserDBHelper(context);
}


return userDBHelper;
}

/**
* 打开数据库的读连接
* @return
*/
public SQLiteDatabase openReadLink() {
if (mRDB == null || !mRDB.isOpen()) {
mRDB = userDBHelper.getReadableDatabase();
}
return mRDB;
}

/**
* 打开数据库的写连接
* @return
*/
public SQLiteDatabase openWriteLink() {
if (mWDB == null || !mWDB.isOpen()) {
mWDB = userDBHelper.getWritableDatabase();
}
return mWDB;
}

/**
* 关闭数据库连接
*/
private void closeLink() {
if (mRDB != null && mRDB.isOpen() ) {
mRDB.close();
mRDB = null; //方便gc回收
}
if (mWDB != null && mWDB.isOpen()) {
mWDB.close();
mWDB = null;//方便gc回收
}
}

/**
* 实现构造方法
* @param context
*/
private UserDBHelper(Context context) {

super(context, DB_NAME, null, DB_VERSION);
try {
if (databaseExists(context)) {
Log.d("wzj", "UserDBHelper: 本来就有表");
}else{
Log.d("wzj", "UserDBHelper: 建表成功");
}
}catch (Throwable e){
e.printStackTrace();
}

}

/**
* 创建数据库,执行建表语句
* @param db The database.
*/
@Override
public void onCreate(SQLiteDatabase db) {


try {
String sql="CREATE TABLE IF NOT EXISTS "+TABLE_NAME+"(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT not null," +
"name varchar(255) not null," +
"age int not null," +
"height long not null," +
"weight float not null," +
"married boolean not null);" ;
if (db!=null){

db.execSQL(sql);
}else{
System.out.println("建表失败");
}
}catch(Throwable any){
any.printStackTrace();
}


}


private boolean databaseExists(Context mContext) throws IOException {
File dbFile = mContext.getDatabasePath(DB_NAME);
if (dbFile.exists()) {
return true;
}else{
dbFile.createNewFile(); //<<<<<<<<<< creates the databases folder
return false;
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public long insert(User user){
ContentValues values = new ContentValues();
values.put("name",user.getName());
values.put("age", user.getAge());
values.put("height",user.getHeight());
values.put("weight",user.getWeight());
values.put("married",user.getMarried());
return mWDB.insert(TABLE_NAME,null,values);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子邮箱怎么注册?电子邮箱注册教程,只需要三步

电子邮箱在我们工作和生活中都是必不可少的沟通工具。电子邮箱怎么注册&#xff1f;电子邮箱的注册步骤是怎么样的&#xff1f;本文将从电子邮箱注册前的准备资料介绍&#xff0c;到具体电子邮箱注册的三个步骤进行详细讲解。 一、电子邮箱注册前的准备 电子邮箱是一个具有唯…

概率密度函数pdf的某种解释与洞察

1.一个想法实验 我在想一个数,姑且称之为X,介于0和10之间(含0和10)。如果我不告诉你别的,你会想象X = 0的概率是多少?X = 4?假设我对任何特定的数字都没有偏好,你会想象十一个整数0,1,2,.….,10也是一样。因为所有的概率加起来必须是1,所以逻辑上的结论是给11个选项…

Python上下文管理器with块及@contextmanager的用法

上下文管理器和with块 上下文管理器对象存在的目的是为了管理with块,就像迭代器的存在是为了管理for循环一样 with 语句存在的意义是对一些常用的 try/finally 结构予以简化。这种结构能够保障一段代码在运行完成后实施某项操作,就算该段代码因为 return 语句、异常或者 sy…

联丰策略炒股官网分析地产链条中的家电,一个不能再忽视的板块

查查配“上涨放量,盘整缩量”是近期市场的一个重要特征,这说明空头衰竭、新的做多力量或正在蓄力。昨天我们也以调查问卷的方式与大家进行了讨论,对于市场未来将会如何演绎?近一半投票认为“牛在路上,逢低加仓”。与此同时,当前市场中,多条主线还在发力,比如地产链条中的家电,…

Python项目——基于回合制的RPG游戏设计与实现

基于回合制的RPG游戏设计与实现 项目概述 《魔法冒险》是一款基于回合制战斗的角色扮演游戏。玩家将创建一个角色&#xff0c;探索世界&#xff0c;战斗敌人&#xff0c;收集物品并提升等级。 项目设计报告 一、引言 本项目的目标是实现一个基于回合制战斗的 RPG 游戏&…

买了个彩票,哈哈哈哈哈。

买了个彩票-双色球&#xff0c;发现挺有意思的。 索性把双色球的所有期的中奖号码的数据都爬了下来&#xff0c;03至今&#xff0c;21年了。txt文本&#xff0c;6.5MB大小。 大家有啥好的建议&#xff0c;分析一下数据呢。

刘邦痛恨的叛徒雍齿,为何后来还被封了侯?

雍齿&#xff0c;原是沛县的世族出身&#xff0c;家庭往上追溯几代&#xff0c;也曾经显赫过。 虽然比不上先祖世代为楚将的项梁、项羽&#xff0c;但雍齿这个没落的世族后代&#xff0c;身上多多少少也还讲究点贵族遗风。 战国时期&#xff0c;以秦国的军功爵制为代表&#…

亚马逊等平台有哪些风控因素,如何真正做好自养号测评

很多测评人都知道亚马逊风控是非常严的&#xff0c;想要做好亚马逊测评需要解决很多风控问题&#xff0c;但是往往很多测评工作室技术不够&#xff0c;或者根本不了解风控点&#xff0c;以为只要IP或者指纹浏览器就可以做&#xff0c;这是非常错误的&#xff0c;也导致了很多隐…

SpringBoot(三)之打包方式

SpringBoot&#xff08;三&#xff09;之打包方式 Spring Boot 提供了几种常见的打包方式&#xff0c;具体取决于你的项目需求和偏好&#xff1a; JAR&#xff08;可执行的JAR文件&#xff09;&#xff1a; 这是 Spring Boot 的默认打包方式。它将项目的所有依赖打包到一个可…

3D 生成重建009-DreamGaussian使用gaussian splatting在两分钟内生成3d

3D 生成重建009-DreamGaussian使用gaussian splatting在两分钟内生成3d 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 DreamGaussian是第一个使用gaussian splatting方法进行3d生成的工作。论文最先使用gaussian splatting替代原来用nerf表示3d。整体架构依然保留了原来的…

Jackson XML

Jackson XML 1 添加依赖2 XML转对象3 对象转XML4 根据路径读取 1 添加依赖 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.11.3</version> </de…

在Spring的try-catch块中手动实现事务回滚

在Spring应用开发中&#xff0c;Transactional注解为我们提供了强大的声明式事务管理能力&#xff0c;使得我们能够专注于业务逻辑而无需过多关注底层的事务处理细节。然而&#xff0c;在某些特定场景下&#xff0c;开发者可能需要在捕获到特定异常时手动控制事务的回滚行为。本…

VMware Workstation Pro 和 Fusion Pro 针对个人用户使用免费了

今早看到 VMware by Broadcom 官方博客 VMware Desktop Hypervisor Pro Apps Now Available for Personal Use - VMware Cloud Foundation (VCF) Blog 以及 Learn more about VMware Desktop Hypervisor Products Subscription Model 总结如下&#xff1a; 免费 Player 版本将…

python中sys和os简单样例说明

目录 一、sys模块及简单样例 1.1 访问命令行参数&#xff1a; 1.2 退出程序&#xff1a; 1.3 获取Python 解释器的版本信息 1.4 设置递归深度限制及修改默认的编码&#xff1a; 二、os模块及简单样例 2.1 获取当前工作目录&#xff1a; 2.2 更改工作目录&#xff1a; 2…

VBA 引用从SQL数据库取数据的几个方法

首先&#xff0c;要定义连接的数据集 Set objRec CreateObject("ADODB.Recordset")Set objConn CreateObject("ADODB.Connection")然后在代码中要定义SQL语句&#xff0c;以便获取数据 sqlstr sqlstr " select t1.FBillNo ,t_Item.fname type,t1…

OpenAI 重磅发布GPT 4o!可以视频聊天的AI?

OpenAI 重磅发布GPT 4o&#xff01; 前言 就在今日&#xff0c;OpenAI发布了ChatGPT-4o版本&#xff0c;技术主管 Mira Murati 在直播中表示GPT-4o对比之前版本速度更快&#xff0c;在文本、视频和音频方面的能力也都有所提高。值得注意的是它还可以让用户与 ChatGPT 进行视频聊…

通电即用,极简运维:带您10分钟零配置启动超大型园区网络

为顺应数字经济发展潮流&#xff0c;越来越多企业选择云网融合&#xff0c;这给企业园区的运维人员&#xff0c;特别是中大型企业园区的运维人员带来新的挑战&#xff1a;随着企业规模扩大&#xff0c;系统和应用程序的复杂性也在增加&#xff0c;运维人员需要不断学习新技术&a…

多维 HighChart

showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.min.js"&g…

天锐绿盾和bitlocker有啥区别?

#绿盾文档加密系统# 天锐绿盾和BitLocker是两种不同的数据加密解决方案&#xff0c;它们各自有不同的重点和应用场景&#xff0c;以下是它们之间的主要区别&#xff1a; PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 移动…

Markdown 高级表格控制 ∈ Markdown 使用笔记

文章目录 Part.I IntroductionPart.II 表格样式控制Chap.I 对齐方式Chap.II 表格中文本控制Chap.III 单元格合并Chap.IV 颜色控制 Part.III 实用技巧Chap.I Excel 转 HTML Reference Part.I Introduction 本文是 Markdown 使用笔记 的子博客&#xff0c;将介绍如何优雅地使用 …