2012-02-27 21 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(); 
    } 

您可以輕鬆地訪問這樣

相關問題