从SqLITe数据库中读取并在Textview中显示[One By One]

时间:2013-04-30 07:33:54

标签: android android-sqlite textview

我有这个DatabaseCreator Java文件。

DatabseCreator

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

    }

}

这是我想要访问它的内容。

myJokes活动

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文件中有一个实例。如何访问存储在笑话中的笑话并将其显示在textview(逐个)Any Nice编程方式中?

1 个答案:

答案 0 :(得分:0)

首先,您的数据库应该包含任何内容。所以添加Columns到它。我建议使用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();
    }