Android错误时,使用代码从stackoverflow实现sqlite数据库



我得到这个错误:类"DataBaseHelper"必须是抽象的或实现抽象方法。

当运行代码我发现和stackoverflow,这就是我得到的代码:如何使用我自己的数据库- 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();
     }
}

您需要实现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()。参见http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

最新更新