【问题标题】:Android errors when using code from stackoverflow to implement sqlite database使用stackoverflow中的代码实现sqlite数据库时出现Android错误
【发布时间】:2014-06-22 23:15:31
【问题描述】:

我收到此错误:“DataBaseHelper”类必须是抽象的或实现抽象方法。

在运行我找到的代码和 stackoverflow 时,这是我得到代码的地方:How to use my own database - android

这是我得到错误的第一部分,第二部分工作正常。

代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

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 ="menuStat.db.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;
    }

    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();
     }

}

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    你需要实现抽象方法onUpgradeonCreate

    public class DataBaseHelper extends SQLiteOpenHelper {
    
        // ...
    
        @Override
        public void onCreate(SQLiteDatabase db) {
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    
    }
    

    请参阅SQLiteOpenHelper 文档。

    【讨论】:

    • 那么,onCreate 和 onUpgrade 究竟会去哪里?
    • 它们将在DataBaseHelper 中声明为@Override 方法。请参阅我的答案中提供的代码。
    【解决方案2】:

    【讨论】:

    • @OscarJunker 没问题。我会给出更多,但我在回答时是移动的,我认为 Matt R 还没有回答。
    • 嗯,你能详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2012-06-13
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多