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