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.pswp.cn/web/12649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12649.shtml
英文地址,請注明出處:http://en.pswp.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;將介紹如何優雅地使用 …