2012-02-27 2 views
4

Мне очень жаль просить этого простого сомнения. Я просто начал андроид и теперь изучал разделы базы данных в android.Как получить значение из базы данных и отобразить его в текстовом виде в android

Я создал базу данных с названием «книги» и с названием таблицы «title».

Затем я перетаскиваю базу данных в раздел активов в проекте.

Теперь я хочу получить значение из базы данных (любое значение из пяти столбцов) и отобразить в текстовом виде. Кто-нибудь, пожалуйста, помогите мне, как это сделать.

Ниже приведен код, который я использовал для чтения базы данных.

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», как эта общественность Cursor fetchData() { \t SQLiteDatabase mDB = mOpenHelper.getWritableDatabase(); Курсор mКурсор; mCursor = mDB.rawQuery («Выбрать * из таблицы, null», null); return mCursor; } – suji

+0

Не могли бы вы помочь мне, как удалить это – suji

+0

см. Отредактированный ответ. – Newts

3

Я дам у примера с помощью, что и можно легко понять, как мы можем показать данные из базы данных на TextView. Ниже приведен код, в котором testdata - это имя базы данных, в которой есть таблица пользователей, в которой присутствуют 2 столбца. Я показываю данные этих 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(); 
    } 

вы можете легко получить доступ к данным, как этот