Sqlite:更新已完成,但检索时返回值为空

问题描述 投票:0回答:2

我正在使用现有的数据库。对于该数据库中的表,我通过某些用户输入(字符串)更新由“chapter”和“verse”标识的特定行的列值。更新成功,但是检索更新后的值时,显示为 null。

FragmentFour.java

public class FragmentFour extends Fragment {

    DataBaseHelper dbHelper;

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ......
        dbHelper = new DataBaseHelper(getActivity());
        ......
    }
    
    public void someFunction(){
        String notes = dbHelper.getNotes("SomeBookName",some_chapter,some_verse);
    }
}

DataBaseHelper.java

public class DataBaseHelper extends SQLiteOpenHelper{
    private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window destination path (location) of our database on device
    private static String DB_PATH = "";
    private static String DB_NAME ="zypnt.sqlite";// Database name
    private SQLiteDatabase mDataBase;
    private final Context mContext;

    public DataBaseHelper(Context context)
    {
        super(context, DB_NAME, null, 1);// 1? its Database Version
        if(android.os.Build.VERSION.SDK_INT >= 17){
            DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
        }
        else
        {
            DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
        }
        this.mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }

    public void createDataBase() throws IOException
    {
        //If database not exists copy it from the assets

        boolean mDataBaseExist = checkDataBase();
        if(!mDataBaseExist)
        {
            this.getReadableDatabase();
            this.close();
            try
            {
                //Copy the database from assests
                copyDataBase();
                Log.e(TAG, "createDatabase database created");
            }
            catch (IOException mIOException)
            {
                throw new Error("ErrorCopyingDataBase");
            }
        }
    }
    //Check that the database exists here: /data/data/your package/databases/Da Name
    private boolean checkDataBase()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        //Log.v("dbFile", dbFile + "   "+ dbFile.exists());
        return dbFile.exists();
    }

    //Copy the database from assets
    private void copyDataBase() throws IOException
    {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        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();
    }

    //Open the database, so we can query it
    public boolean openDataBase() throws SQLException
    {
        String mPath = DB_PATH + DB_NAME;
        //Log.v("mPath", mPath);
        mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
        //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
        return mDataBase != null;
    }

    @Override
    public synchronized void close()
    {
        if(mDataBase != null)
            mDataBase.close();
        super.close();
    }

    public String getNotes(String book,String chapter,String verse){

        SQLiteDatabase mDb = this.getWritableDatabase();
        String notes = "";
        try{
            Cursor c = mDb.rawQuery("SELECT footnotes FROM " + book + " WHERE chapter="+chapter+" and verse="+verse+"", null);
            if(c.getCount()<=0)
                return notes;
            else {
                c.moveToFirst();
                notes = c.getString(0);
                c.close();
            }   
        } catch (Exception e) {
            Log.e("getCrossReferences", e.getMessage());
        }
        mDb.close();
        return notes;
    }

    public Boolean setNotes(String book,String chapter,String verse,String note){

        SQLiteDatabase mDb = this.getWritableDatabase();
        Boolean flag = false;
        try{
            Cursor c = mDb.rawQuery("UPDATE "+book+" SET footnotes='" + note + "' WHERE chapter="+chapter+" and verse="+verse+"", null);
            c.close();
            flag = true;
        } catch (Exception e) {
            Log.e("getCrossReferences", e.getMessage());
        }
        mDb.close();
        return flag;
    }

}
java android android-sqlite
2个回答
0
投票

尝试这个改变:

public Boolean setNotes(String book,String chapter,String verse,String note){

        SQLiteDatabase mDb = this.getWritableDatabase();
        Boolean flag = false;
        try{
            Cursor c = mDb.rawQuery("UPDATE "+book+" SET footnotes='" + note + "' WHERE chapter="+chapter+" and verse="+verse+"", null);
            c.moveToFirst();
            c.close();
            flag = true;
        } catch (Exception e) {
            Log.e("getCrossReferences", e.getMessage());
        }
        mDb.close();
        return flag;
    }

0
投票

试试这个

if (c != null ) {
    if  (c.moveToFirst()) {
         return c.getString(c.getColumnIndex("footnotes"));          
     }
}
c.close();
© www.soinside.com 2019 - 2024. All rights reserved.