2011-11-12 40 views
1

對不起,如果我重複我的問題,但我仍然沒有線索做什麼以及如何處理這個問題。如何保存/從SQlite數據庫中檢索單詞?

我的應用程序是一本字典。我假設用戶需要將他們想要記憶的單詞添加到收藏夾列表中。因此,我創建了一個收藏夾按鈕上兩個階段的工作:

  • 短點擊當前視圖字保存到收藏夾列表;
  • 並長按可查看收藏夾列表,以便用戶可以單擊任何單詞再次查看它們。

我去使用SQlite數據庫來存儲最喜歡的單詞,但我不知道我該怎麼做這個任務。具體來說,我的問題是:

  1. 我應該使用當前字典SQLite數據庫還是創建一個新的SQLite數據庫收藏單詞?
  2. 在每種情況下,我需要編寫哪些代碼才能處理上述任務?

有沒有人可以幫忙?

這裏是字典代碼:


package mydict.app; 

import java.util.ArrayList; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.util.Log; 

public class DictionaryEngine { 
static final private String SQL_TAG = "[MyAppName - DictionaryEngine]"; 

private SQLiteDatabase mDB = null; 

private String mDBName; 
private String mDBPath; 
//private String mDBExtension; 
public ArrayList<String> lstCurrentWord = null; 
public ArrayList<String> lstCurrentContent = null; 
//public ArrayAdapter<String> adapter = null; 

public DictionaryEngine() 
{ 
    lstCurrentContent = new ArrayList<String>(); 
    lstCurrentWord = new ArrayList<String>(); 
} 

public DictionaryEngine(String basePath, String dbName, String dbExtension) 
{ 
    //mDBExtension = getResources().getString(R.string.dbExtension); 
    //mDBExtension = dbExtension; 
    lstCurrentContent = new ArrayList<String>(); 
    lstCurrentWord = new ArrayList<String>(); 

    this.setDatabaseFile(basePath, dbName, dbExtension); 
} 

public boolean setDatabaseFile(String basePath, String dbName, String dbExtension) 
{ 
    if (mDB != null) 
    { 
     if (mDB.isOpen() == true) // Database is already opened 
     { 
      if (basePath.equals(mDBPath) && dbName.equals(mDBName)) // the opened database has the same name and path -> do nothing 
      { 
       Log.i(SQL_TAG, "Database is already opened!"); 
       return true; 
      } 
      else 
      { 
       mDB.close(); 
      } 
     } 
    } 

    String fullDbPath=""; 

    try 
    { 
     fullDbPath = basePath + dbName + "/" + dbName + dbExtension; 
     mDB = SQLiteDatabase.openDatabase(fullDbPath, null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
    } 
    catch (SQLiteException ex) 
    { 
     ex.printStackTrace(); 
     Log.i(SQL_TAG, "There is no valid dictionary database " + dbName +" at path " + basePath); 
     return false; 
    } 

    if (mDB == null) 
    { 
     return false; 
    } 

    this.mDBName = dbName; 
    this.mDBPath = basePath; 

    Log.i(SQL_TAG,"Database " + dbName + " is opened!"); 

    return true; 
} 

public void getWordList(String word) 
{ 
    String query; 
    // encode input 
    String wordEncode = Utility.encodeContent(word); 

    if (word.equals("") || word == null) 
    { 
     query = "SELECT id,word FROM " + mDBName + " LIMIT 0,15" ; 
    } 
    else 
    { 
     query = "SELECT id,word FROM " + mDBName + " WHERE word >= '"+wordEncode+"' LIMIT 0,15"; 
    } 
    //Log.i(SQL_TAG, "query = " + query); 

    Cursor result = mDB.rawQuery(query,null); 

    int indexWordColumn = result.getColumnIndex("Word"); 
    int indexContentColumn = result.getColumnIndex("Content"); 

    if (result != null) 
    { 
     int countRow=result.getCount(); 
     Log.i(SQL_TAG, "countRow = " + countRow); 
     lstCurrentWord.clear(); 
     lstCurrentContent.clear(); 
     if (countRow >= 1) 
     { 
      result.moveToFirst(); 
      String strWord = Utility.decodeContent(result.getString(indexWordColumn)); 
      String strContent = Utility.decodeContent(result.getString(indexContentColumn)); 
      lstCurrentWord.add(0,strWord); 
      lstCurrentContent.add(0,strContent); 
      int i = 0; 
      while (result.moveToNext()) 
      { 
       strWord = Utility.decodeContent(result.getString(indexWordColumn)); 
       strContent = Utility.decodeContent(result.getString(indexContentColumn)); 
       lstCurrentWord.add(i,strWord); 
       lstCurrentContent.add(i,strContent); 
       i++; 
      } 

     } 

     result.close(); 
    } 

} 

public Cursor getCursorWordList(String word) 
{ 
    String query; 
    // encode input 
    String wordEncode = Utility.encodeContent(word); 

    if (word.equals("") || word == null) 
    { 
     query = "SELECT id,word FROM " + mDBName + " LIMIT 0,15" ; 
    } 
    else 
    { 
     query = "SELECT id,content,word FROM " + mDBName + " WHERE word >= '"+wordEncode+"' LIMIT 0,15"; 
    } 
    //Log.i(SQL_TAG, "query = " + query); 

    Cursor result = mDB.rawQuery(query,null); 

    return result;  
} 

public Cursor getCursorContentFromId(int wordId) 
{ 
    String query; 
    // encode input 
    if (wordId <= 0) 
    { 
     return null; 
    } 
    else 
    { 
     query = "SELECT id,content,word FROM " + mDBName + " WHERE Id = " + wordId ; 
    } 
    //Log.i(SQL_TAG, "query = " + query); 
    Cursor result = mDB.rawQuery(query,null); 

    return result;  
} 

public Cursor getCursorContentFromWord(String word) 
{ 
    String query; 
    // encode input 
    if (word == null || word.equals("")) 
    { 
     return null; 
    } 
    else 
    { 
     query = "SELECT id,content,word FROM " + mDBName + " WHERE word = '" + word + "' LIMIT 0,1"; 
    } 
    //Log.i(SQL_TAG, "query = " + query); 

    Cursor result = mDB.rawQuery(query,null); 

    return result;  
} 

public void closeDatabase() 
{ 
    mDB.close(); 
} 

public boolean isOpen() 
{ 
    return mDB.isOpen(); 
} 

public boolean isReadOnly() 
{ 
    return mDB.isReadOnly(); 
} 

} 

這裏是收藏夾按鈕下面的代碼保存並加載收藏夾列表:


btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite); 
btnAddFavourite.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // Add code here to save the favourite, e.g. in the db. 
       Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT); 
       toast.show(); 
      } 
     }); 

    btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View v) { 

       // Open the favourite Activity, which in turn will fetch the saved favourites, to show them. 
       Intent intent = new Intent(getApplicationContext(), FavViewFavourite.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       getApplicationContext().startActivity(intent); 

       return false; 
      } 
     }); 
} 
+1

你並不需要創建一個新的數據庫,在我看來,你只需要兩個查詢,一個獲取所有的最愛形成收藏表,一個將喜愛的東西保存到桌子上。 –

+0

我強烈建議你在android中使用DBAdaptor。鏈接:http://www.devx.com/wireless/Article/40842/0/page/1 –

+0

非常感謝。我會盡力爲你們提示。 –

回答

1

您需要有兩張桌子

  1. 收藏

字(ID,詞,意義,...)

收藏夾(ID,word_id)

在收藏表中有一個外鍵點單詞表中的單詞。

我只解決了您需要構建表格的方式。

* EDITED *

words(id, name, meaning, timestamp) 
favortie(id, word_id) 
+1

@ user998032您只需要一個包含兩個表的Harsha M V建議的數據庫。 – wannik

+0

非常感謝。這就是我一直在想的。但我需要一個例子來跟隨。你能幫我嗎? –

+0

分享你現在的桌子我會修改你的桌子 –

相關問題