如何从android中的sqlite数据库检索数据,并在TextView中显示

前端之家收集整理的这篇文章主要介绍了如何从android中的sqlite数据库检索数据,并在TextView中显示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习 Android我有一个问题,我无法解决.我想从现有数据库中检索数据,并在点击按钮后的TextView中显示.

我的代码DataBaseHelper如下所示:

public class DataBaseHelper extends sqliteOpenHelper {

            //The Android's default system path of your application database.    
            private static String DB_PATH = "/data/data/in.ekonomia.android/databases/";     
            private static String DB_NAME = "cytaty";     
            private sqliteDatabase myDataBase;      
            private final Context myContext;     

        /**     * Constructor     * Takes and keeps a reference of the passed context in order to access to the application assets and resources.     * @param context     */    
    public DataBaseHelper(Context context) 
    {       
        super(context,DB_NAME,null,1);        
        this.myContext = context;    

    }      
    /**     * Creates a empty database on the system and rewrites it with your own database.     * */    
    public void createDataBase() throws IOException
    {       
        boolean dbExist = checkDataBase();      
        if(dbExist){            
            //do nothing - database already exist       
            }else{          
                //By calling this method and empty database will be created into the default system path               
                //of your application so we are gonna be able to overwrite that database with our database.         
                this.getReadableDatabase();             
                try 
                {               
                    copyDataBase();             
                    } catch (IOException e) 
                    {               
                        throw new Error("Error copying database");          
                        }       
                }     
        }     
    /**     * Check if the database already exist to avoid re-copying the file each time you open the application.     * @return true if it exists,false if it doesn't     */    
    private boolean checkDataBase()
    {       sqliteDatabase checkDB = null;      
    try 
    {           
        String myPath = DB_PATH + DB_NAME;          
        checkDB = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_READONLY);      
        }catch (sqliteException e)
        {           
            //database does't exist yet.        
            }       
    if(checkDB != null)
    {           
        checkDB.close();        
        }       
    return checkDB != null ? true : false;    
    }     
    /**     * Copies your database from your local assets-folder to the just created empty database in the     * system folder,from where it can be accessed and handled.     * This is done by transfering bytestream.     * */    
    private void copyDataBase() throws IOException
    {       
        //Open your local db as the input stream        
        InputStream myInput = myContext.getAssets().open(DB_NAME);      
        // Path to the just created empty db        
        String outFileName = DB_PATH + DB_NAME;         
        //Open the empty db as the output stream        
        OutputStream myOutput = new FileOutputStream(outFileName);      
        //transfer bytes from the inputfile to the outputfile       
        byte[] buffer = new byte[1024];     
        int length;     
        while ((length = myInput.read(buffer))>0)
        {           
            myOutput.write(buffer,length);      
            }       
        //Close the streams     
        myOutput.flush();       
        myOutput.close();       
        myInput.close();     
        }     
    public void openDataBase() throws sqlException {        
        //Open the database       
        String myPath = DB_PATH + DB_NAME;      
        myDataBase = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_READONLY);     
        }     
    @Override   
        public synchronized void close() 
    {           
        if(myDataBase != null)              
        myDataBase.close();             
    super.close();  
    }   
    @Override   
    public void onCreate(sqliteDatabase db) 
    {   }   
    @Override   
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {  }         
    // Add your public helper methods to access and get content from the database.       
    // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy       
    // to you to create adapters for your views. 

    }

Cytaty.java如下所示:

package in.ekonomia.android;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class cytaty extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.galeria);


        Button bLosuj = (Button) findViewById(R.id.button1);
        bLosuj.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
            });
        }

}

我做了如上,Eclipse给了我错误.

Database name: cytaty
name of table: cytaty
columns: _id,autor,cytat

我的代码是:

public void getData() {
    public String[] getAppCategorydetail() {
        String Table_Name="cytaty";

        String selectQuery = "SELECT  * FROM " + Table_Name;
              sqliteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery,null);
                 String[] data = null;
        if (cursor.moveToFirst()) {
            do {
               // get  the  data into array,or class variable
            } while (cursor.moveToNext());
        }
        db.close();
        return data;
    }

}

和:

Button bLosuj = (Button) findViewById(R.id.button1);
    bLosuj.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            DataBaseHelper myDataBaseHelper = new DataBaseHelper(cytaty.this);
               myDataBaseHelper.openDataBase();
                String text= myDataBaseHelper.getData();//this is the method to query
               myDataBaseHelper.close(); 
            // set text to your TextView 
            TextView tekst = (TextView) findViewById(R.id.editText1);
            tekst.setText(text);
        }
        });
    }

我究竟做错了什么?
我想从数据库检索数据,并在ClickView后显示在TextView中.您的帮助将不胜感激.

解决方法

点击按钮,首先打开数据库,获取数据并关闭数据库
public class cytaty extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.galeria);

        Button bLosuj = (Button) findViewById(R.id.button1);
        bLosuj.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            myDatabaseHelper = new DatabaseHelper(cytaty.this);
            myDatabaseHelper.openDataBase();

            String text = myDatabaseHelper.getYourData(); //this is the method to query

            myDatabaseHelper.close(); 
            // set text to your TextView
            }
        });
    }
}

数据库类中的getYourData()就是这样的

public String[] getAppCategoryDetail() {

    final String TABLE_NAME = "name of table";

    String selectQuery = "SELECT  * FROM " + TABLE_NAME;
    sqliteDatabase db  = this.getReadableDatabase();
    Cursor cursor      = db.rawQuery(selectQuery,null);
    String[] data      = null;

    if (cursor.moveToFirst()) {
        do {
           // get the data into array,or class variable
        } while (cursor.moveToNext());
    }
    cursor.close();
    return data;
}

猜你在找的Android相关文章