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

时间:2012-02-27 05:18:30

标签: android

我非常抱歉要求这个简单的疑问。我刚开始学习android,现在正在研究android中的数据库部分。

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

然后我将数据库拖放到项目的资产部分。

现在我想从数据库中获取一个值(五列中的任何值)并显示在文本视图中。任何人都可以帮我解决这个问题。

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

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>

DatabaseActivity.java

import android.app.Activity;
import android.os.Bundle;

public class DatabaseActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

}

enter image description here

希望得到你的帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

创建类并使用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();
    }

并在XyzDB中创建一个类

private static class DatabaseHelper extends SQLiteOpenHelper
    {
//create table here

}

然后放入以下方法

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

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

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

        return mCursor;
    } 

并在您的活动中创建Database helper类对象并调用此方法并从游标中获取数据

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

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

并在文本视图中设置id或任何值。

并点击此链接

http://www.vogella.de/articles/AndroidSQLite/article.html

答案 1 :(得分:3)

我将在你的帮助下给你一个例子,你可以很容易地理解我们如何在textview上显示数据库中的数据。 下面是testdata是具有用户表的数据库名称的代码,其中存在2列。我在2 diff上显示这两列的数据。 textviews。

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();
    }

您可以轻松访问此类数据