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);
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)