2013-05-31 245 views
1

我想編寫Android應用程序,用戶可以在EditBox中輸入內容,然後應用程序搜索SQL數據庫並在ListView中列出結果。如何通過Android中的數據庫進行搜索查詢

我有以下問題:

我媒體鏈接導入與DatabBaseHelper級的數據庫,但現在我不知道如何從輸入到編輯框的文本搜索查詢。有人可以解釋如何做到這一點?

感謝您的每一個有用的幫助!

的DataBaseHelper類:

 public class DataBaseHelper extends SQLiteOpenHelper{ 

    //The Android's default system path of your application database. 
    private static String DB_PATH = "/data/data/com.test.sql/databases/"; 

    private static String DB_NAME = "demo"; 

    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, null, 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, 0, 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, null, 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. 

    }  
+0

你必須創建一個列表視圖與遊標適配器....其中光標是從數據庫查詢得到的值... – amalBit

+0

你能解釋我該怎麼做嗎,因爲我是新來的android,我不知道如何去做 –

回答

3

textChange方法調用的方法後,創建一個的EditText和addTextWatcher,在執行類似的動作:

public void setUpSearchList() 
    { 


    items.add(new SectionItem(cTag.getString(0))); 
    Title=db.rawQuery("SELECT TITLE,EDATE,CHECKED,ID FROM Task WHERE TAG=? and TITLE LIKE ?",new String []{cTag.getString(0),text.getText()+"%"}); 
} 

獲取該記錄,並與ListView和不要將它綁定忘了通知DataSetChanged。進一步幫助去這個鏈接http://www.indiesapps.com/blog/link-up-the-list-view-with-searching-functionality-to-provide-ease-of-access/

+0

不要忘記標記爲答案,如果它幫助你 – UnderGround

相關問題