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);
}
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值