java - 更新现有 sqlite 数据库中的列,但 android 中没有任何变化

标签 java android sqlite

抱歉发了这个帖子,但我在网上没有找到任何东西。我使用目录“assets”中的现有数据库。当我想更新列时,函数返回该列已更改,但实际上什么也没发生。我尝试使用 execSQL 但没有再出现。

任何意见将不胜感激!

这是我的 DatabaseHelper 代码:

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DBNAME = "program.db";
    public static String DBLOCATION = "";
    public static final String TableName="ProgramTable";
    private Context mContext;
    private SQLiteDatabase mDatabase;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, 1);
        this.mContext = context;
        if(android.os.Build.VERSION.SDK_INT >= 17){
            DBLOCATION = context.getApplicationInfo().dataDir + "/databases/";
        }
        else
        {
            DBLOCATION = "/data/data/" + context.getPackageName() + "/databases/";
        }

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }
    private boolean checkDataBase()
    {
        File dbFile = new File(DBLOCATION + DBNAME);

        return dbFile.exists();
    }

    //Copy the database from assets
    public void copyDataBase() throws IOException
    {
        InputStream mInput = mContext.getAssets().open(DBNAME);
        String outFileName = DBLOCATION + DBNAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer))>0)
        {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void openDatabase() {
        String dbPath = mContext.getDatabasePath(DBNAME).getPath();
        if (mDatabase != null && mDatabase.isOpen()) {
            return;
        }
        mDatabase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    public void closeDatabase() {
        if (mDatabase != null) {
            mDatabase.close();
        }
    }    
    public long Like(int id) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("Favourite",1);
        mDatabase=this.getWritableDatabase();
        openDatabase();

        long k=mDatabase.update(TableName, contentValues, "ID =" +Integer.valueOf(id),null);
        closeDatabase();
        return k;
    }
    public long Unlike(int id) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("Favourite",0);
        mDatabase=this.getWritableDatabase();
        openDatabase();
        long k =mDatabase.update(TableName, contentValues, "ID ="+Integer.valueOf(id),null);
        closeDatabase();
        return k;
    }
}

最佳答案

在调用getWritableDatabase();之前,您需要先打开数据库

尝试交换您的代码。

来自:

mDatabase=this.getWritableDatabase();
openDatabase();

致:

openDatabase();
mDatabase=this.getWritableDatabase();

关于java - 更新现有 sqlite 数据库中的列,但 android 中没有任何变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46819539/

相关文章:

Java 正则表达式转义

android - 如何删除 Android 短信收件箱中的所有消息?

java - 如何根据多个参数过滤Web服务结果?

java - 如果语句不能正常工作

java - Android View 关闭某些 View 的隐式状态保留

android - 保存在联系人中适用于 Android 10 但不适用于 Android 11

android - SQLite异常: No Such Column

javascript - for 循环设置中的 SQLite 和 jquery 变量设置为最后一个值

android - 从 Assets 文件夹复制数据库后android pie中没有这样的表错误

java - 无论如何,是否可以设置取决于流链内流的结果的值