2012-02-27 109 views
4

林很抱歉询问这个简单的疑问。我刚开始android和现在正在研究android中的数据库部分。如何从数据库中获取值并在Android的文本视图中显示它

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

然后我将数据库拖放到项目中的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> 

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

提前盼望您的help.Thanks。

回答

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

,并在您的活动创建数据库的辅助类对象和指针调用此方法并获取数据这样

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

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

,并设置标识或文本视图中的任意值。

,并按照此链接

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

+0

数据在哪个班我要补充这些steps.When我DBAdapter.java即时添加此得到一个错误“创建一个局部变量mOpenHelper”像这样公开光标fetchData() { \t \t SQLiteDatabase mDB = mOpenHelper。getWritableDatabase(); 游标mCursor; mCursor = mDB.rawQuery(“Select * from table,null”,null); return mCursor; } – suji 2012-02-27 05:53:57

+0

你能帮我一下,如何删除这个 – suji 2012-02-27 05:54:17

+0

看到编辑答案。 – Newts 2012-02-27 06:00:46

3

我将要给你用的是帮助ü可以很容易地理解我们如何能够从一个TextView数据库显示数据的例子。 以下是其中testdata是具有其中存在2列的用户表的数据库的名称的代码。我在2个差异显示这2列的数据。 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(); 
    } 

您可以轻松地访问这样

相关问题