1

我有这个 DatabaseCreator Java 文件。

数据库创建者

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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseCreator extends SQLiteOpenHelper {
    private static String DB_PATH = "/GetInspiredAndHaveFun/assets/Jokes.db";
    private static String DB_NAME = "Jokes.db";
    private static int DB_VERSION = 1;
    public static String DATABASE_TABLE = "myjoke";

    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public DataBaseCreator(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;

    }

    public void openDatabase() throws IOException {
        boolean dbe = checkDataBase();
        if (dbe) {
            Log.i("Tag", "dbe" + dbe);

        } else {
            Log.i("Tag", "dbdoesnotexist" + dbe);
            this.getReadableDatabase();
            copyDataBase();

        }

    }

    private void copyDataBase() throws IOException {
        InputStream inp = myContext.getAssets().open(DB_NAME);
        String ofn = DB_PATH + DB_NAME;
        OutputStream oup = new FileOutputStream(ofn);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inp.read(buffer)) > 0) {
            oup.write(buffer, 0, length);
        }

        oup.flush();
        inp.close();
        oup.close();

    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;

            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        }

        catch (SQLiteException e) {

        }

        return checkDB != null ? true : false;
    }
    public void openDataBase() throws SQLException{
         
        //Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
 
    }

    @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

    }
    
}

这是我要访问它的内容的地方。

我的笑话活动

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;




public class Jokes extends Activity {
    {

        DataBaseCreator myDbHelper = new DataBaseCreator(this);
     myDbHelper = new DataBaseCreator(this);
        try{
            myDbHelper.copyDataBase();
        } 
        catch (IOException ioe) {
            throw new Error("Unable to create database");
        }

        myDbHelper.openDataBase();
    }
    }

我的 Jokes.java 文件中有一个它的实例。如何访问存储在笑话中的笑话并将其显示在文本视图中(一个接一个)任何不错的编程方式?

4

1 回答 1

0

首先,您的数据库应该有任何内容。所以给它添加列。我建议一个id那个autoincrement,也许一个name开始。
您需要在数据库中查询它并遍历游标。
一个简单的查询就是从数据库中获取所有元素。它看起来像这样:

Cursor cursor = database.query(TABLE_NAME,allColumns, null, null, null, null,null);

它确实返回一个游标。这是一个列表,您可以使用moveToNext(). 您可以从每个游标中获取值。因此,如果您开始查询,您可能希望到达最后一个 id。首先cursor.moveToFirst()。它确实指向查询中的第一个元素。现在,您可以使用指向它的给定游标从第一行获取值。
如果您有 ID 和名称,您可以从查询的第一个元素中获取名称cursor.getString(1)。整数代表您从光标所在行获得的列。

我希望它是可以理解的。我今天的英语不是最好的。(请随时改进!)小迭代示例

    String temp = "";
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        temp += curso.getString(1);
        cursor.moveToNext();
    }
于 2013-04-30T07:46:19.867 回答