如何在SQlite数据库中保存/检索单词?

时间:2011-11-12 17:40:56

标签: android sqlite dictionary

很抱歉,如果我重复我的问题,但我仍然没有任何线索可以做什么以及如何处理这个问题。

我的应用是一本字典。我假设用户需要将他们想要记忆的单词添加到收藏夹列表中。因此,我创建了一个收藏夹按钮,分为两个阶段:

  • 单击以将当前视图词保存到收藏夹列表中;
  • 并长按以查看收藏夹列表,以便用户可以点击任何字词再次查找。

我去使用SQlite数据库来存储喜欢的单词,但我想知道如何才能完成这项任务。具体来说,我的问题是:

  1. 我应该使用当前字典SQLite数据库还是创建一个新的SQLite数据库来收藏喜欢的单词?
  2. 在每种情况下,为了应对上述任务,我必须编写哪些代码?
  3. 有人可以帮助吗?

    这是字典代码:


    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 :(得分:1)

你需要有两张桌子

  1. 收藏夹
  2. 单词(id,word,含义,......)

    收藏夹(id,word_id)

    在“收藏夹”表中有一个外键,用于指向单词表中的单词。

    我只解决了构建表格所需的方法。

    *的 EDITED *

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