【问题标题】:How do I fix the "no such column" in sqlite如何修复sqlite中的“没有这样的列”
【发布时间】:2019-08-15 12:09:53
【问题描述】:

在我添加 UserUid 字段之前它工作得很好,现在它一直在崩溃,我不知道为什么。它是一个数据库,我将其修复为从特定的当前用户中进行选择,但它告诉我该列不存在。

我已经重新创建了 Sqlite 数据库,没有运气

我得到的错误是在 GetCountCart() 但我认为问题不存在

public class Database extends SQLiteAssetHelper {
private static String DB_NAME="OrderMeDB.db";
private static int DB_VER=1;

public Database(Context context) {
    super(context, DB_NAME,null,DB_VER );
}

public List<OrderModel> getCarts(String userUid)
{
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = {"UserUid","DenumireProdus" , "Cantitate" , "Pret"};
    String sqlTable = "Comanda";

    qb.setTables(sqlTable);
    Cursor c = qb.query(db , sqlSelect , "UserUid=?",new String[]{userUid},null,null,null);

    final List<OrderModel> result = new ArrayList<>();
    if(c.moveToFirst())
    {
        do{
            result.add(new OrderModel(
                    c.getString(c.getColumnIndex("UserUid")),
                    c.getString(c.getColumnIndex("DenumireProdus")),
                    c.getInt(c.getColumnIndex("Cantitate")),
                    c.getInt(c.getColumnIndex("Pret"))
            ));
        }while (c.moveToNext());
    }
    return result;
}

public boolean checkFoodExists(String userUid , String denumireProdus)
{
    boolean flag = false;
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = null;
    String SQLQuery = String.format("SELECT * FROM Comanda WHERE UserUid='%s' AND DenumireProdus='%s'",userUid,denumireProdus);
    cursor = db.rawQuery(SQLQuery,null);
    if(cursor.getCount()>0)
        flag = true;
    else
        flag = false;
    cursor.close();
    return false;
}
public void addToCart(OrderModel order)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("INSERT OR REPLACE INTO Comanda(UserUid,DenumireProdus,Cantitate,Pret) VALUES('%s',%s','%s','%s');",
            order.getUserUid(),
            order.getDenumireProdus(),
            order.getCantitate(),
            order.getPret());
    db.execSQL(query);
}

public void cleanCart(String userUid)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM Comanda WHERE UserUid='%s'",userUid);
    db.execSQL(query);

}
public void removeFromCart(String userUid,String denumireProdus)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM Comanda WHERE UserUid='%s' AND DenumireProdus='%s'",userUid,denumireProdus);
    db.execSQL(query);
}
public void increaseCart(String userUid,String denumireProdus)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("UPDATE Comanda SET Cantitate= Cantitate+1 WHERE UserUid='%s' AND DenumireProdus='%s'",userUid,denumireProdus);
    db.execSQL(query);
}
public int getCountCart(String userUid) {
    int count = 0;
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("SELECT COUNT(*) FROM Comanda WHERE UserUid='%s'",userUid);
    Cursor cursor =db.rawQuery(query,null);
    if (cursor.moveToFirst())
    {
        do{
            count = cursor.getInt(0);
        }
        while (cursor.moveToNext());
    }
    return count;

}
public int getItemCount(String denumireProdus , String userUid) {
    int count = 0;
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("SELECT COUNT(*) FROM Comanda WHERE UserUid='s' AND DenumireProdus='%s' ",userUid,denumireProdus);
    Cursor cursor =db.rawQuery(query,null);
    if (cursor.moveToFirst())
    {
        do{
            count = cursor.getInt(0);
        }
        while (cursor.moveToNext());
    }
    return count;

}
}

这是我得到的错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{Food}: android.database.sqlite.SQLiteException: no such column: UserUid (code 1 SQLITE_ERROR[1]): , while compile: SELECT COUNT(*) FROM Comanda WHERE UserUid='QM9amP6CX4g24wrq7Hu2'

【问题讨论】:

  • 卸载您的应用程序,以便清除旧版本并复制新版本。
  • 与你的问题没有直接关系,但你不应该通过替换变量来构建 SQL 语句——它效率低下并且容易受到 SQL 注入的影响。改用带有绑定变量的准备好的语句:另外,UserUid='s' 中有一个错误。
  • 它只是无法识别我在数据库中的 UserUid 列,我尝试了所有方法
  • @akaMishu 从设备上卸载应用程序并重新运行,以便重新创建表。
  • 已经这样做了,不走运..

标签: java sql sqlite


【解决方案1】:

据我了解,错误消息表明您尚未将该列添加到表中。我对 Java 不太熟悉,但我会检查该列是否已创建并在正确的表中。

【讨论】:

  • 它是用 Sqlite 制作的,里面有带有 UserUid 的列,我只是不明白为什么它不能识别该列,这超出了我的理解。该列存在,但程序告诉我它不存在...
  • 只尝试SELECT * FROM comanda。如果该列没有显示在那里,您需要注意该列的创建。
  • 它在我创建 UserUid 字段之前工作,它不想创建我不明白为什么的字段...
  • 我知道,你之前说过。但只需执行SELECT * 即可检查该列是否存在。如果不尝试再次创建列。
  • 我真的不明白我应该怎么做才能看到它
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2019-09-21
  • 2022-01-05
  • 2020-06-02
  • 2019-06-01
  • 2020-08-16
  • 2017-02-09
  • 2015-09-07
相关资源
最近更新 更多