java - 没有这样的表(代码 1)

标签 java android database sqlite

我收到一条错误消息:

android.database.sqlite.SQLiteException:没有这样的表:DATABASE_TABLE(代码1):,编译时:从DATABASE_TABLE中选择KEY_HOURS,其中KEY_ROWID = 0

当另一个 Activity 调用 upDateUser(String Money)

时,会出现此问题

我尝试卸载并重新安装该应用程序,就像在其他类似问题中提到的那样,但该解决方案对我自己不起作用。

我的数据库类代码:

package com.example.parkangel;

public class UDbHelper extends SQLiteOpenHelper
{
    private static UDbHelper instance;
    private SQLiteDatabase ourDatabase;

    private static final String DATABASE_NAME = "UserData.db";
    private static final String DATABASE_TABLE = "UserTable";
    private static final int DATABASE_VERSION = 1;

    public static final String KEY_ROWID = "_id";
    public static final String KEY_PFNAME = "payeeFname";
    public static final String KEY_PSNAME = "payeeSname";
    public static final String KEY_CARD = "card";
    public static final String KEY_CREDITS = "credits";
    public static final String KEY_ADDMONEY = "addmoney";

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

    public static UDbHelper getInstance(Context context)
    {
        if (instance == null)
        {
            instance = new UDbHelper(context);  
        }
        return instance;
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "   
                                    + KEY_PFNAME + " TEXT NOT NULL, " + KEY_PSNAME + "  
                                    TEXT NOT NULL, " + KEY_CARD + " INTEGER NOT NULL, "  
                                    + KEY_CREDITS + " INTEGER NOT NULL, " + 
                                    KEY_ADDMONEY + " INTEGER NOT NULL);");  

        ContentValues values = new ContentValues();
        values.put(KEY_PFNAME, "Tutku"); 
        values.put(KEY_PSNAME, "Erbil");
        values.put(KEY_CARD, 12345678); 
        values.put(KEY_CREDITS, 5);
        values.put(KEY_ADDMONEY, 1);
        db.insert(DATABASE_TABLE, null, values);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }

    public synchronized UDbHelper open() throws SQLException
    {
        System.out.println ("running open");
        if(ourDatabase == null || !ourDatabase.isOpen())
        ourDatabase = getWritableDatabase();
        return this;
    }   

    public String getData() 
    {
        // TODO Auto-generated method stub
        String[] columns = new String[] {KEY_ROWID, KEY_PFNAME, KEY_PSNAME,
                        KEY_CARD, KEY_CREDITS};
        Cursor  c = ourDatabase.query(DATABASE_TABLE, columns, null, null, 
                                                   null, null, null);
        String result = " ";

        int iRow = c.getColumnIndexOrThrow(KEY_ROWID);
        int iPFname = c.getColumnIndexOrThrow(KEY_PFNAME);
        int iPSname = c.getColumnIndexOrThrow(KEY_PSNAME);
        int iCard = c.getColumnIndexOrThrow(KEY_CARD);
        int iCredits = c.getColumnIndexOrThrow(KEY_CREDITS);

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = result + c.getString(iRow) + " " + 
                            c.getString(iPFname) + " " + c.getString(iPSname) + " " + 
                            c.getString(iCard) + " " + c.getString(iCredits) + "\n";
        }
        return result;
    }

    public List<Integer> getMoneytoadd()
    {  
        List<Integer> list = new ArrayList<Integer>();  

        // Select All Query  
        String selectQuery = "SELECT  * FROM " + DATABASE_TABLE;  

        SQLiteDatabase db = this.getReadableDatabase();  
        Cursor cursor = db.rawQuery(selectQuery,    
                                    null);//selectQuery,selectedArguments  

        // looping through all rows and adding to list  
        if (cursor.moveToFirst()) {  
            do {  
                list.add(cursor.getInt(5));//adding 2nd column data  
            } while (cursor.moveToNext());  
    }  
        // return hours  
        return list;  
} 

          /* public int getcurrentmoney() 
    {
        // TODO Auto-generated method stub
        String[] columns = new String[] {KEY_CREDITS};
        Cursor  c = ourDatabase.query(DATABASE_TABLE, columns, null, null, 
                                                  null, null, null);
        int result = 0;

        int iCredits = c.getColumnIndexOrThrow(KEY_CREDITS);

        for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = c.getInt(iCredits);
        }
        return result;
    }*/

    public void upDateUser(String money) 
    {
        String selectQuery = "SELECT KEY_CREDITS from DATABASE_TABLE where 
                                  KEY_ROWID = " + 0;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);
        int oldMoney = 0;
        if (c.moveToFirst()) 
        {         
            oldMoney = Integer.parseInt(c.getString(4));
        }
        ContentValues cvUpdate = new ContentValues();
        cvUpdate.put(KEY_CREDITS, oldMoney + money);
        String filter = "KEY_ROWID" + "=" + 0;
        db.update(DATABASE_TABLE, cvUpdate, filter, null);
    }

最佳答案

在这里,您应该从带引号的字符串文字中取出KEY_CREDITSDATABASE_TABLEKEY_ROWID,以便使用这些常量变量的值相反:

String selectQuery = "SELECT KEY_CREDITS from DATABASE_TABLE where 
                              KEY_ROWID = " + 0;

更改为

String selectQuery = "SELECT " + KEY_CREDITS + " from " + DATABASE_TABLE + " where " +
                              KEY_ROWID + " = " + 0;

关于java - 没有这样的表(代码 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23046570/

相关文章:

java - 是否有可能从 java 获得 os x 中连接显示器的最大支持分辨率?

java - (Java) 在 Mac OS X 上以编程方式访问 "System Roots"下的 SSL 证书

java - 如何在 jnr ffi 中使用结构体和结构体

mysql - 如何将 mySql 数据库导出到嵌入式数据库(例如 H2)?

sql - 有没有办法改善这个查询的计算成本?

java - 强制顶部 JPanel 调整大小至其子 JPanel 的高度

android - 将 Paging 3 alpha 更新为稳定导致索引问题 Android

android - 在 MediaCodec 生成的用于 lockCanvas() 的表面上应用 fragment 着色器

mysql - 用于跟踪事件的数据库设计

Android - 唤醒锁未正确获取,应用程序需要在待机状态下保持运行