没有这样的表:table_image(代码1):,同时编译:SELECT image_data FROM table_image WHERE image_name ='一个'

时间:2015-10-11 13:04:03

标签: android sqlite

我对SQLite有点新意,所以请耐心等待。我正在创建一个表并尝试从中访问数据,但不知怎的,我收到了这个错误。

android.database.sqlite.SQLiteException: no such table: table_image (code 1): , while compiling: SELECT image_data FROM table_image WHERE image_name= ' a '

错误发生后我做的事情:

1。)卸载应用程序并重新安装。 2.)检查表创建代码中的空格。它看起来对我来说。

我不确定为什么会出现这个错误。有人可以帮帮我吗。 谢谢!!

我的DatabaseHelper类

public class DatabaseHelper extends SQLiteOpenHelper {
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "database_name";

    // Table Names
    public static final String DB_TABLE = "table_image";

    // column names
    public static final String KEY_NAME = "image_name";
    public static final String KEY_IMAGE = "image_data";

    // Table create statement
    private static final String CREATE_TABLE_IMAGE = "CREATE TABLE " + DB_TABLE + " ("+
            KEY_NAME + " TEXT, " +
            KEY_IMAGE + " BLOB"+")";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        // creating table
        db.execSQL(CREATE_TABLE_IMAGE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // on upgrade drop older tables
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);

        // create new table
        onCreate(db);
    }
}

在另一个类中向db添加内容

// Calling addEntry

addEntry(name, img);

// Function to add entry

public void addEntry( String name, byte[] image) throws SQLiteException {
        ContentValues cv = new ContentValues();
        cv.put(DatabaseHelper.KEY_NAME,    name);
        cv.put(DatabaseHelper.KEY_IMAGE,   image);
        database.insert(DatabaseHelper.DB_TABLE, null, cv);
    }

然后我想要从中获取数据。

SQLiteDatabase db = openOrCreateDatabase(DatabaseHelper.DB_TABLE, MODE_PRIVATE, null);
String selectQuery = "SELECT image_data FROM "+DatabaseHelper.DB_TABLE+" WHERE image_name= ' "+"a"+" ' ";
Cursor cursor = db.rawQuery(selectQuery,null);
byte[] image = cursor.getBlob(1);

2 个答案:

答案 0 :(得分:1)

openOrCreateDatabase()未使用SQLiteOpenHelper您拥有表创建代码的地方。

要获得由SQLiteDatabase管理的SQLiteOpenHelper,请致电,例如你的助手对象上有getWritableDatabase()

修复之后,再次卸载应用程序以删除由openOrCreateDatabase()创建的空数据库。

答案 1 :(得分:0)

您是否尝试过卸载应用并再次运行?

错误说"没有这样的表:table_image",如果您使用数量较少的数据库测试应用程序并稍后引入表格,则会出现这种情况。

一旦您使用附加表重新启动应用程序,就会出现旧版本的DB,并且不会调用DBHelper的onCreate,并且不会在您的数据库中添加新表。

卸载应用程序将清除以前的任何DB实例,并且将再次调用onCreate,您将从一个新表开始。