如何在android中从数据库中获取值并在文本视图中显示

如何在android中从数据库中获取值并在文本视图中显示,android,Android,我很抱歉提出这个简单的疑问。我刚开始学习android,现在正在学习android中的数据库部分 我创建了一个名为“books”和表名为“titles”的数据库 然后将数据库拖放到project中的assets部分 现在,我想从数据库中获取一个值(五列中的任何值)并显示在文本视图中。有人能帮我怎么做吗 下面是我用来读取数据库的代码 import android.content.ContentValues; import android.content.Context; import androi

我很抱歉提出这个简单的疑问。我刚开始学习android,现在正在学习android中的数据库部分

我创建了一个名为“books”和表名为“titles”的数据库

然后将数据库拖放到project中的assets部分

现在,我想从数据库中获取一个值(五列中的任何值)并显示在文本视图中。有人能帮我怎么做吗

下面是我用来读取数据库的代码

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
    public static final String KEY_ROWID = "_id";
    public static final String KEY_ISBN = "isbn";
    public static final String KEY_TITLE = "title";
    public static final String KEY_PUBLISHER = "publisher";
    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "books";
    private static final String DATABASE_TABLE = "titles";
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_CREATE =
    "create table titles (_id integer primary key autoincrement, "
    + "isbn text not null, title text not null, "
    + "publisher text not null);";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;
    public DBAdapter(Context ctx)
    {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
    }
    private static class DatabaseHelper extends SQLiteOpenHelper
    {
    DatabaseHelper(Context context)
    {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db)
    {
    db.execSQL(DATABASE_CREATE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,
    int newVersion)
    {
    Log.w(TAG, "Upgrading database from version " + oldVersion
    + " to "
    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS titles");
    onCreate(db);
    }
    }
    //---opens the database---
    public DBAdapter open() throws SQLException
    {
    db = DBHelper.getWritableDatabase();
    return this;
    }
    //---closes the database---
    public void close()
    {
    DBHelper.close();
    }
    //---insert a title into the database---
    public long insertTitle(String isbn, String title, String publisher)
    {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_ISBN, isbn);
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_PUBLISHER, publisher);
    return db.insert(DATABASE_TABLE, null, initialValues);
    }
    //---deletes a particular title---
    public boolean deleteTitle(long rowId)
    {
    return db.delete(DATABASE_TABLE, KEY_ROWID +
    "=" + rowId, null) > 0;
    }
    //---retrieves all the titles---
    public Cursor getAllTitles()
    {
    return db.query(DATABASE_TABLE, new String[] {
    KEY_ROWID,
    KEY_ISBN,
    KEY_TITLE,
    KEY_PUBLISHER},
    null,
    null,
    null,
    null,
    null);
    }
    //---retrieves a particular title---
    public Cursor getTitle(long rowId) throws SQLException
    {
    Cursor mCursor =
    db.query(true, DATABASE_TABLE, new String[] {
    KEY_ROWID,
    KEY_ISBN,
    KEY_TITLE,
    KEY_PUBLISHER
    },
    KEY_ROWID + "=" + rowId,
    null,
    null,
    null,
    null,
    null);
    if (mCursor != null) {
    mCursor.moveToFirst();
    }
    return mCursor;
    }

    //---updates a title---
    public boolean updateTitle(long rowId, String isbn,
    String title, String publisher)
    {
    ContentValues args = new ContentValues();
    args.put(KEY_ISBN, isbn);
    args.put(KEY_TITLE, title);
    args.put(KEY_PUBLISHER, publisher);
    return db.update(DATABASE_TABLE, args,
    KEY_ROWID + "=" + rowId, null) > 0;
    }
    }
Main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>


希望得到您的帮助。提前感谢。

创建类并使用contentProvider扩展它,然后像这样使用它

public class XyzDB extends ContentProvider {

    static Context context;
    private SQLiteOpenHelper mOpenHelper;

    public XyzDB() {}


    public XyzDB(Context context) 
    {

        XyzDB.context = context;
        mOpenHelper = new DatabaseHelper(context);
        mOpenHelper.getWritableDatabase();
    }
private static class DatabaseHelper extends SQLiteOpenHelper
    {
//create table here

}
Cursor c = jDB.fetchDataByID(id); 
        if(c.moveToFirst())
        {
            do
            {
                id = c.getInt(0);

            }while(c.moveToNext());
        }
        c.close();
并在XyzDB中创建一个类,如下所示

public class XyzDB extends ContentProvider {

    static Context context;
    private SQLiteOpenHelper mOpenHelper;

    public XyzDB() {}


    public XyzDB(Context context) 
    {

        XyzDB.context = context;
        mOpenHelper = new DatabaseHelper(context);
        mOpenHelper.getWritableDatabase();
    }
private static class DatabaseHelper extends SQLiteOpenHelper
    {
//create table here

}
Cursor c = jDB.fetchDataByID(id); 
        if(c.moveToFirst())
        {
            do
            {
                id = c.getInt(0);

            }while(c.moveToNext());
        }
        c.close();
然后把下面的方法

您必须从数据库助手类中的游标获取数据。您必须创建这样的方法并返回游标值

public Cursor fetchData()
    {
        SQLiteDatabase mDB = mOpenHelper.getWritableDatabase();

        Cursor mCursor;
        mCursor = mDB.rawQuery("Select * from table, null);

        return mCursor;
    } 
并在活动中创建数据库帮助器类对象,调用此方法并像下面这样从游标中获取数据

public class XyzDB extends ContentProvider {

    static Context context;
    private SQLiteOpenHelper mOpenHelper;

    public XyzDB() {}


    public XyzDB(Context context) 
    {

        XyzDB.context = context;
        mOpenHelper = new DatabaseHelper(context);
        mOpenHelper.getWritableDatabase();
    }
private static class DatabaseHelper extends SQLiteOpenHelper
    {
//create table here

}
Cursor c = jDB.fetchDataByID(id); 
        if(c.moveToFirst())
        {
            do
            {
                id = c.getInt(0);

            }while(c.moveToNext());
        }
        c.close();
并在文本视图中设置id或任何值

然后点击这个链接


我将给你举一个例子,帮助你轻松理解如何在文本视图上显示数据库中的数据。 下面是代码,其中testdata是数据库的名称,该数据库具有用户表,其中有两列。我在两个不同的文本视图中显示了这两列的数据

public class high_score extends Activity{
SQLiteDatabase mydatabase=null;
String Data="";
String Data1="";
String TableName="users";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.high_score);

    RelativeLayout main=(RelativeLayout)findViewById(R.id.main);

    try
    {
        mydatabase=this.openOrCreateDatabase("testdata", MODE_PRIVATE, null);

        Cursor c=mydatabase.rawQuery("SELECT DISTINCT name,score FROM "+TableName+" , null);
        int column1=c.getColumnIndex("name");
        int column2=c.getColumnIndex("max_score");
        c.moveToFirst();
        if(c!=null)
        {   
            do
            {
                String Name=c.getString(column1);
                int Score=c.getInt(column2);
                Data=Data+Name+"\n";
                Data1=Data1+Score+"\n";
                System.out.println("name"+Name+" score"+Score);
            }while(c.moveToNext());
            TextView tv=(TextView)findViewById(R.id.tv);
            TextView points=(TextView)findViewById(R.id.points);
            tv.setText(Data);
            points.setText(Data1);
            setContentView(main);

            }

         /*TextView tv=(TextView)findViewById(R.id.tv);
        tv.setText(Data);
        setContentView(tv);*/

    }catch(Exception ex)
    {
        Log.e("ERROR","ERROR" ,ex);
    }
    finally
    {
        if(mydatabase!=null)
            mydatabase.close();
    }

您可以很容易地访问像这样的数据,我必须在其中添加这些步骤。当我在DBAdapter.java中添加这些步骤时,我得到了一个错误“创建一个局部变量mOpenHelper”,就像这个公共游标fetchData(){SQLiteDatabase mDB=mOpenHelper.getwriteabledatabase();Cursor mCursor;mCursor=mDB.rawQuery(“Select*from table,null”,null);返回mCursor;}您能帮我删除这个吗
public class XyzDB extends ContentProvider {

    static Context context;
    private SQLiteOpenHelper mOpenHelper;

    public XyzDB() {}


    public XyzDB(Context context) 
    {

        XyzDB.context = context;
        mOpenHelper = new DatabaseHelper(context);
        mOpenHelper.getWritableDatabase();
    }
private static class DatabaseHelper extends SQLiteOpenHelper
    {
//create table here

}
Cursor c = jDB.fetchDataByID(id); 
        if(c.moveToFirst())
        {
            do
            {
                id = c.getInt(0);

            }while(c.moveToNext());
        }
        c.close();