gpt4 book ai didi

java - Sqlite 'no such table' 将值插入数据库时​​出错

转载 作者:行者123 更新时间:2023-12-01 12:06:04 25 4
gpt4 key购买 nike

向 Sqlite 数据库中的表添加数据时出现此错误。

    12-21 17:31:19.345: E/SQLiteLog(24127): (1) no such table: accessory_data
12-21 17:31:19.345: E/DB ERROR(24127): android.database.sqlite.SQLiteException:
no such table: accessory_data (code 1): ,
while compiling: SELECT aid, name, image, url, price
FROM accessory_data

请注意,数据库之前是通过另一种方法创建的,以便将数据添加到另一个表中。我在这里所做的只是将数据添加到同一数据库中的不同表中。这是问题的根源吗?

DBOperations 类:

public class DBOps extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;

private static final String DATABASE_NAME = "jezzadb";


public String CREATE_ACC_QUERY = "CREATE TABLE " + AccessoriesTableInfo.TABLE_NAME + " (" + AccessoriesTableInfo.AID + " VARCHAR, " +
AccessoriesTableInfo.NAME + " VARCHAR, " + AccessoriesTableInfo.IMAGE + " VARCHAR, " + AccessoriesTableInfo.PRICE + " VARCHAR, " +
AccessoriesTableInfo.URL + " VARCHAR);";

public DBOps(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_ACC_QUERY);
}


public void insertAccessories(DBOps dop, Accessories a)
{
SQLiteDatabase SQ = dop.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(AccessoriesTableInfo.AID, a.ID);
cv.put(AccessoriesTableInfo.NAME, a.Name);
cv.put(AccessoriesTableInfo.URL, a.URL);
cv.put(AccessoriesTableInfo.IMAGE, a.Image);
cv.put(AccessoriesTableInfo.PRICE, a.PRICE);
SQ.insert(AccessoriesTableInfo.TABLE_NAME, null, cv);
Log.d("Database Operations", "Inserted Accessories succesfully!");
}


public ArrayList<Accessories> getAccessories(DBOps dop)
{
ArrayList<Accessories> arr = new ArrayList<Accessories>();

SQLiteDatabase SQ = dop.getReadableDatabase();
String[] columns = {AccessoriesTableInfo.AID,AccessoriesTableInfo.NAME,AccessoriesTableInfo.IMAGE,AccessoriesTableInfo.URL,
AccessoriesTableInfo.PRICE};
Cursor CR = SQ.query(AccessoriesTableInfo.TABLE_NAME, columns, null, null, null, null, null);
CR.moveToFirst();

for(int i=0;i<CR.getCount();i++)
{
while (!CR.isAfterLast()) {
Accessories a= new Accessories();
a.ID = CR.getString(0);
a.Name = CR.getString(1);
a.URL = CR.getString(2);
a.Image = CR.getString(3);
a.PRICE = CR.getString(4);

arr.add(a);
CR.moveToNext();
}
CR.close();
break;
}
return arr;
}

AccessoriesTableInfo 类:

public class AccessoriesTableData {

public AccessoriesTableData()
{

}
public static abstract class AccessoriesTableInfo implements BaseColumns
{
public static final String AID = "aid";
public static final String NAME = "name";
public static final String IMAGE = "image";
public static final String URL = "url";
public static final String PRICE = "price";
public static final String TABLE_NAME = "accessory_data";
}
}

我做错了什么?

最佳答案

Note that the Database is previously created by another method in order to add data to another table. What I'm doing here is simply adding data to a different table in the same database. Is that the root of the problem?

是的,这就是问题所在。每个数据库文件仅使用一个 SQLiteOpenHelper 子类。

所发生的情况是,所请求版本 1 的数据库文件已经存在,因此不会调用 onCreate()onUpgrade() 等数据库助手生命周期回调。

进一步阅读:When is SQLiteOpenHelper onCreate() / onUpgrade() run?

关于java - Sqlite 'no such table' 将值插入数据库时​​出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com