android.database.sqlite.SQLiteException:没有这样的表:OrderDetails(代码1)

时间:2018-04-15 06:17:52

标签: android database sqlite android-sqlite

错误代码:1(SQLITE_ERROR)                   引起:SQL(查询)错误或缺少数据库。

这是我在android studio中的sqlite代码

public class Database extends SQLiteAssetHelper{
private static final String DB_NAME="Jerson.db";
private static final int DB_VER=1;
public Database(Context context)
{
    super(context, DB_NAME,null,DB_VER);
}
public List<Orders> getCarts()
{
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect={"MenuId","Name","Quantity","Price"};
    String sqlTable="OrderDetails";

    qb.setTables(sqlTable);
    Cursor c = qb.query(db,sqlSelect,null,null,null,null,null);

    final List<Orders> result = new ArrayList<>();
    if (c.moveToFirst())
    {
        do {
            result.add(new Orders(c.getString(c.getColumnIndex("MenuId")),
                    c.getString(c.getColumnIndex("Name")),
                    c.getString(c.getColumnIndex("Quantity")),
                    c.getInt(c.getColumnIndex("Price"))
            ));
        }while (c.moveToNext());
    }
    return  result;
}
public void addToCart(Order order)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("INSERT INTO OrderDetails(MenuId,Name,Quantity,Price)VALUES('%s','%s','%s','%s');",
            order.getMenuId(),
            order.getName(),
            order.getQuantity(),
            order.getPrice());
    db.execSQL(query);
}
public void cleanCart()
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM OrderDetails");
    db.execSQL(query);
}
}

我确信我在sqlite中有一个表我不知道为什么它没有给我这样的表

这里是我使用数据库的代码片段

 btnCart.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {
            new Database(getBaseContext()).addToCart(new Order(
                    foodId,
                    currentFood.getName(),
                    numberButton.getNumber(),
                    currentFood.getPrice()
            ));
            Toast.makeText(FoodDetail.this, "Added To Cart", Toast.LENGTH_SHORT).show();
        }

    });

1 个答案:

答案 0 :(得分:0)

找不到表的最常见原因是在创建数据库时尚未创建。这可能是由于故事创建语句中的SQL错误或从资产文件夹复制打包数据库时遇到的问题。

后者可能是一个写得很糟糕的复制过程,因此经常推荐使用 SQLiteAssetHelper ,因为它经过了尝试和测试。但是,即使使用 SQliteAssetHelper ,错误的文件也可能导致此类错误,因此在创建表之前会保存此类数据库,因为某些SQLite工具可以允许。

使用SQLiteAssethelper时,按照这个问题。修复应该是: -

  1. 删除应用程序的数据或卸载应用程序(两者都将删除现有的数据库,允许它被复制(SQLiteAssethelper检查数据库是否存在,如果是,那么它不会尝试复制资产))。

  2. 使用SQlite工具检查数据库是否正常并保存。

  3. 将保存的文件(最好在Android Studio外部完成)复制到App的资产/数据库文件夹(如果需要,可以创建资产文件夹和数据库文件夹)。

  4. 重新运行应用程序。