我有一个现有的SQLite数据库但无法在我的应用程序中使用它

时间:2015-09-28 12:19:57

标签: android sqlite android-cursoradapter

我已经阅读了几个关于我的问题的教程,例如ThisThis没有人让我清楚整个过程。每个人都讲述了DataBaseHelper类,但没有人展示过如何使用MainActivity实现。我们还应使用什么游标来提取数据并将这些数据保存在每列的字符串中。

这是我的DataBaseHelper.java代码,但它不会将数据复制到我的应用程序中。

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 ="SBLdata.db";// 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);

        return mDataBase != null;
    }

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


    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

我应该在MainActivity.java上添加什么内容?

public class MainActivity extends Activity {

    private SQLiteDatabase database;
    DataBaseHelper SBLdataCreate;
    private static final String DB_NAME = "SBLdata.db";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DataBaseHelper dbOpenHelper = new DataBaseHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();
    }

}

2 个答案:

答案 0 :(得分:2)

您应该在尝试打开数据库并进行查询之前创建数据库。 在您的代码中,我没有看到您在打开数据库之前创建数据库。

例如:

>>> l = ["0.txt", "1.txt", "33.txt", "2.txt", "10.txt", "11.txt"]
>>> sorted([(int(i.replace(".txt", "")), i) for i in l ])
[(0, '0.txt'), (1, '1.txt'), (2, '2.txt'), (10, '10.txt'), (11, '11.txt'), (33, '33.txt')]
>>> [i[1] for i in sorted([(int(i.replace(".txt", "")), i) for i in l ])]
['0.txt', '1.txt', '2.txt', '10.txt', '11.txt', '33.txt']

答案 1 :(得分:0)

以下是一种更适合您的方式:)

DataBaseHelper dbOpenHelper = new DataBaseHelper(this, DB_NAME);

  try {
    database = dbOpenHelper.createDataBase();
  } catch (IOException e) {
    e.printStackTrace();
  }
database = dbOpenHelper.openDataBase();