【发布时间】:2014-12-22 08:53:51
【问题描述】:
所以之前我用一个有 2 列的表实现了一个数据库。我改变主意,在表中再添加一列并尝试插入新值,但我遇到了这个问题,即使我正确(我相信)在下面提到的类中添加了所有正确的列声明。
包含列名和数据的 TableData 类:
public class ImageTableData {
public ImageTableData()
{
}
public static abstract class ImagesTableData implements BaseColumns
{
public static final String ImageID = "imid";
public static final String PID = "pid";
public static final String URL = "url";
public static final String DATABASE_NAME = "jezza_db";
public static final String TABLE_NAME = "product_pics";
}
}
还有我在 DatabaseOperations 类中的查询:
public String CREATE_IMAGE_QUERY = "CREATE TABLE " + ImagesTableData.TABLE_NAME + " (" + ImagesTableData.ImageID + " VARCHAR, " + ImagesTableData.PID + " VARCHAR, " + ImagesTableData.URL + " VARCHAR);";
我的创建查询执行:
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_IMAGE_QUERY);
}
我相信这是两个声明。但是,当我添加一个新列“ImageID”时,我开始收到此错误。之前它只有 2 列时运行良好。
12-22 14:13:25.345: E/SQLiteLog(21777): (1) table product_pics has no column named imid
12-22 14:13:25.345: E/SQLiteDatabase(21777): Error inserting pid=77153628 imid=imablack3jpg url=http://storage.googleapis.com/bucketjezza/black3.jpg
12-22 14:13:25.345: E/SQLiteDatabase(21777): android.database.sqlite.SQLiteException: table product_pics has no column named imid (code 1): , while compiling: INSERT INTO product_pics(pid,imid,url) VALUES (?,?,?)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1121)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:694)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1589)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1461)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at function.DBOps.insertImages(DBOps.java:138)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at activity.classes.HomeActivity.commitToDatabase(HomeActivity.java:287)
12-22 14:13:25.345: E/SQLiteDatabase(21777): at activity.classes.HomeActivity$2.onSuccess(HomeActivity.java:235)
我的 SELECT 查询也崩溃了,返回了这个错误:
12-22 14:13:25.355: E/SQLiteLog(21777): (1) no such column: ImageID
12-22 14:13:25.355: E/DB ERROR(21777): android.database.sqlite.SQLiteException: no such column: ImageID (code 1): , while compiling: SELECT ImageID FROM product_pics WHERE ImageID=imaimablack3jpg
我的 SELECT 查询和代码块:
public boolean isImageAdded(DBOps dop, String id)
{
try
{
String idmod = "ima" + id;
boolean isAdded = false;
Log.d("URL Recieved: ", id);
SQLiteDatabase SQ = dop.getReadableDatabase();
String sqlQuery = "SELECT ImageID FROM "+ ImagesTableData.TABLE_NAME +" WHERE ImageID="+idmod;
Cursor cursor = SQ.rawQuery(sqlQuery, null);
Log.d("Cursor Count : ", String.valueOf(cursor.getCount()));
if(cursor.getCount() > 0)
{
cursor.close();
isAdded = true;
}
else
{
cursor.close();
isAdded = false;
}
}
catch(Exception ex)
{
Log.e("DB ERROR", ex.toString());
}
return false;
}
为什么会这样?我已经正确添加了新列,不是吗?请帮忙:)
【问题讨论】:
标签: java android sql sqlite insert