Android - öffnen der SQLite-Datenbank

Ich möchte beim öffnen einer Datenbank und abrufen von Daten aus es. Ich lese ein tutorial über diese und einen Antrag gestellt. Ich bin versucht, um zu überprüfen, ob die Datenbank existiert, wenn nicht, erstellen Sie eine neue db in der Android-Standard-system-Pfad der Anwendung, die Datenbank und kopieren Sie die Daten aus einer db gibt (was ist in dem Ordner "assets"). Aber wenn ich die Anwendung ausführen, bekam ich die Fehlermeldung:

SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase$CursorFactory, String, String[], String) line: 1568   

Kann jemand geben Sie mir einige Ratschläge über das, was habe ich falsch gemacht? Hier ist der code:

package thesis.app.quiz;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelperForQuiz extends SQLiteOpenHelper {

    //The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/thesis.app.quiz/databases/";
    private static String DB_NAME = "QuizDB";
    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public DBHelperForQuiz(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }

    public void openDataBase() {


        String myDbPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myDbPath, null,
                SQLiteDatabase.OPEN_READONLY);
    }

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

    public List<Question> getQuestionsList(int difficulty, int numberOfQuestions) {



        List<Question> questionsList = new ArrayList<Question>();

        Cursor c = myDataBase.rawQuery("SELECT * FROM questions", null);

        while (c.moveToNext()) {
            Question q = new Question();
            q.setQuestionText(c.getString(1));
            q.setRightAnswer(c.getString(2));
            q.setAnswerOption1(c.getString(3));
            q.setAnswerOption2(c.getString(4));
            q.setAnswerOption3(c.getString(5));
            q.setQuestionDiffLevel(difficulty);
            questionsList.add(q);
        }

        return questionsList;

    }

    public void createDataBase() throws IOException {

        if (!checkIfDBAlredyExist()) {

            this.getReadableDatabase(); 

            try {
                InputStream myInput = myContext.getAssets().open(DB_NAME);

                String newDbPath = DB_PATH + DB_NAME; 
                OutputStream myOutput = new FileOutputStream(newDbPath);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }

                myOutput.flush();
                myOutput.close();
                myInput.close();

            } catch (IOException e) {

                e.printStackTrace();
                throw new Error("Error copying database");
            }

        }

    }

    public boolean checkIfDBAlredyExist() {


        SQLiteDatabase tmpDb = null;
        String dbPath = DB_PATH + DB_NAME;
        try {
            tmpDb = SQLiteDatabase.openDatabase(dbPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        if (tmpDb != null) {
            tmpDb.close();
            //return true;
        }

        return tmpDb != null ? true : false;
    }
}
Dieser sieht nicht wie der tatsächliche Fehler, können Sie die post mehr von der stacktrace?
Poste bitte LogCat Ausgabe
Sorry, für die späte Antwort. Ich bin gerettet die LogCat-Ausgabe, und ich bin etwas bemerkt, so dass ich versuche herauszufinden, etwas. Vielleicht kann ich dieses problem lösen. Ich will nicht Ihre Zeit verschwenden. Wenn ich wieder scheitern, werde ich kopiere das log hier.
Ich scheiterte wieder. Ich update das problem.

InformationsquelleAutor user1036555 | 2012-03-06

Schreibe einen Kommentar