2017-03-01 20 views
-1

私はアンドロイドコーディングで新しいです... アクティビティとSqliteを作成しました... データベースにデータを保存するボタンをアクティビティに追加しましたしかし、ボタンをクリックするたびに、同じデータがデータベースに追加されました... データがデータベースに既に存在するかどうかを確認するにはどうすればいいですか?お気に入りリスト、アイテムが既にSQLiteに記録されているか確認してください

私はいくつかのデータを表示するためにlistViewを作成しました。新しいアクティビティに私たちを導いた各項目をクリックすると、新しいアクティビティでデータをデータベースに保存するための新しいボタンが作成されました。 データベース:

public class PhraseDataBaseAdapter { 

private Context context; 
private SQLiteOpenHelper sqLiteOpenHelper; 

public PhraseDataBaseAdapter(Context context){ 
    this.context = context; 
    sqLiteOpenHelper = new SQLiteOpenHelper(context, "database.db", null, 1) { 
     @Override 
     public void onCreate(SQLiteDatabase db) { 
      String sql = "create table tb1_phrases (id integer primary key, eng text, per text)"; 
      db.execSQL(sql); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     } 
    }; 

} 

public long savePhrase(Phrases phrases){ 
    String eng = phrases.getEng(); 
    String per = phrases.getPer(); 
    long id = -1; 

    SQLiteDatabase database = null; 

    try{ 
     ContentValues values = new ContentValues(); 
     values.put("eng", eng); 
     values.put("per", per); 

     database = sqLiteOpenHelper.getWritableDatabase(); 
     id = database.insert("tb1_phrases", null, values); 
    }catch (Exception ex){ 
     Log.d("Database", "Exception: " + ex.getMessage()); 
    }finally { 
     if (database!=null && database.isOpen()){ 
      database.close(); 
     } 
    } 
    return id; 
} 

public Phrases readPhrase(long id){ 
    Phrases phrases = null; 
    String[] columns = new String[]{"id", "eng", "per"}; 
    String selection = "id=?"; 
    String[] selectionArgs = new String[]{String.valueOf(id)}; 
    String groupBy = null; 
    String having = null; 
    String orderBy = null; 
    String limit = null; 

    SQLiteDatabase database = null; 

    try{ 
     database = sqLiteOpenHelper.getWritableDatabase(); 
     Cursor cursor = database.query("tb1_phrases", columns, selection, selectionArgs, groupBy, having, orderBy, limit); 
     if (cursor !=null && cursor.moveToFirst()){ 
      int idIndex = 0; 
      int engIndex = 1; 
      int perIndex = 2; 

      long phraseId = cursor.getLong(idIndex); 
      String phraseEng = cursor.getString(engIndex); 
      String phrasePer = cursor.getString(perIndex); 

      phrases = new Phrases(); 
      phrases.setId(phraseId); 
      phrases.setEng(phraseEng); 
      phrases.setPer(phrasePer); 
     } 
    }catch (Exception ex){ 
     Log.d("Database", "Exception: " + ex.getMessage()); 
    }finally { 
     if (database!=null && database.isOpen()){ 
      database.close(); 
     } 
    } 
    return phrases; 
} 

public int updatePhrase(Phrases phrases){ 
    int noOfDataUpdatedRecords = 0; 
    String whereClause = "id=?"; 
    String[] whereArgs = new String[]{String.valueOf(phrases.getId())}; 

    SQLiteDatabase database = null; 

    try{ 
     ContentValues values = new ContentValues(); 
     values.put("eng", phrases.getEng()); 
     values.put("per", phrases.getPer()); 

     database = sqLiteOpenHelper.getWritableDatabase(); 
     noOfDataUpdatedRecords = database.update("tb1_phrases", values, whereClause, whereArgs); 
    }catch (Exception ex){ 
     Log.d("Database", "Exeption: " + ex.getMessage()); 
    } finally { 
     if(database!=null && database.isOpen()){ 
      database.close(); 
     } 
    } 
    return noOfDataUpdatedRecords; 
} 

public int deletePhrase(long id){ 
    int noOfDeletedRecords = 0; 
    String whereClause = "id=&"; 
    String[] whereArgs = new String[]{String.valueOf(id)}; 

    SQLiteDatabase database = null; 

    try{ 
     database = sqLiteOpenHelper.getWritableDatabase(); 
     noOfDeletedRecords = database.delete("tb1_phrases", whereClause, whereArgs); 
    }catch (Exception ex){ 
     Log.d("Database", "Exception: " + ex.getMessage()); 
    } finally { 
     if(database!=null && database.isOpen()){ 
      database.close(); 
     } 
    } 
    return noOfDeletedRecords; 
} 

public ArrayList<Phrases> readAllPhrases(){ 
    ArrayList<Phrases> phrasesArrayList = null; 
    String[] columns = new String[]{"id", "eng", "per"}; 
    String selection = null; 
    String[] selectionArgs = null; 
    String groupBy = null; 
    String having = null; 
    String orderBy = null; 
    String limit = null; 

    SQLiteDatabase database = null; 

    try{ 
     database = sqLiteOpenHelper.getWritableDatabase(); 
     Cursor cursor = database.query("tb1_phrases", columns, selection, selectionArgs, groupBy, having, orderBy, limit); 
     if (cursor !=null && cursor.moveToFirst()){ 
      phrasesArrayList = new ArrayList<>(); 

      int idIndex = 0; 
      int engIndex = 1; 
      int perIndex = 2; 

      do { 
       long phraseId = cursor.getLong(idIndex); 
       String phraseEng = cursor.getString(engIndex); 
       String phrasePer = cursor.getString(perIndex); 

       Phrases phrases = new Phrases(); 
       phrases.setId(phraseId); 
       phrases.setEng(phraseEng); 
       phrases.setPer(phrasePer); 

       phrasesArrayList.add(phrases); 
      }while (cursor.moveToNext()); 
     } 
    }catch (Exception ex){ 
     Log.d("Database", "Exception: " + ex.getMessage()); 
    }finally { 
     if (database!=null && database.isOpen()){ 
      database.close(); 
     } 
    } 
    return phrasesArrayList; 
} 

お気に入りボタン:

私のデータはまだボタンをオフにすることができ、ボタンを存在しない場合にする必要があります存在している...ここ

が私のコードで見つけます

favorite.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      PhraseDataBaseAdapter dataBaseAdapter = new PhraseDataBaseAdapter(getApplicationContext()); 
      Phrases phrases = new Phrases(); 
      phrases.setEng(mainAdviceEnglish); 
      phrases.setPer(mainAdvicePersian); 
      dataBaseAdapter.savePhrase(phrases); 
     } 
    }); 

ありがとう...

+1

あなたはすでにデータベースから何かを読む方法を知っています。 (あるいは、このコードを別の場所からコピー&ペーストしましたか?)問題は何ですか? –

+0

あなたのカラムをあなたのテーブルの一意の属性として宣言することができます。 あなたの単語が既に保存されている場合は、再度保存することはできません。 –

+0

@ CL。はい、私はデータの読み方を知っていますが、いくつかのデータが存在するかどうかチェックしたいのですが、好きなボタンが消えてしまいます... – rexo

答えて

0

私はSQLiteを使用しないで素晴らしい解決策があります。 あなたの単語を保存するためにこのクラスを使用する必要がありますまた、それらの単語が格納されているかどうかをチェックする機能があります。

WordがisWordExist(

を終了単語を確認するための方法

addWord( "")

を使用し保存するために

import android.content.Context; 
import android.content.SharedPreferences; 
import com.google.gson.Gson; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


public class WordListPref { 
public static final String PREFS_NAME = "XYZ"; 
public static final String WORD_LIST = "WordList"; 


public void storeWords(Context context, List favorites) { 
    // used for store arrayList in json format 
    SharedPreferences settings; 
    SharedPreferences.Editor editor; 
    settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    editor = settings.edit(); 
    Gson gson = new Gson(); 
    String jsonFavorites = gson.toJson(favorites); 
    editor.putString(WORD_LIST, jsonFavorites); 
    editor.commit(); 
} 

public ArrayList<String> loadWords(Context context) { 

    // used for retrieving arraylist from json formatted string 
    SharedPreferences settings; 
    List favorites; 
    settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    if (settings.contains(WORD_LIST)) { 
     String jsonFavorites = settings.getString(WORD_LIST, null); 
     Gson gson = new Gson(); 
     String[] favoriteItems = gson.fromJson(jsonFavorites, String[].class); 
     favorites = Arrays.asList(favoriteItems); 
     favorites = new ArrayList(favorites); 
    } else 
     return new ArrayList<>(); 
    return (ArrayList) favorites; 
} 

public void addWord(Context context, String beanSampleList) { 
    List favorites = loadWords(context); 
    if (favorites == null) 
     favorites = new ArrayList(); 
    favorites.add(beanSampleList); 
    storeWords(context, favorites); 
} 

public void removeUsers(Context context, String beanSampleList) { 

    ArrayList<String> favorites = loadWords(context); 
    if (favorites != null) { 
     for (int i = 0; i < favorites.size(); i++) { 
      String bean = favorites.get(i); 
      if (bean == beanSampleList) { 
       favorites.remove(i); 
       storeWords(context, favorites); 
      } 

     } 

    } 

} 

public boolean isWordExist(String bean, Context context) { 

    ArrayList<String> data = loadWords(context); 
    if (data != null) { 

     for (int i = 0; i < data.size(); i++) { 
      String beanSampleList = data.get(i); 
      if (bean == beanSampleList) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

public void flushWordPref(Context context) { 
    SharedPreferences settings; 
    SharedPreferences.Editor editor; 
    settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    editor = settings.edit(); 
    editor.clear(); 
    editor.commit(); 
} 
} 

このクラスは、同じ種類のものにsqliteを使用することはあなたの問題を解決するだろう。 運が良かったと投票するのを忘れてしまった:

+0

それは素晴らしいアイデアですが、私はデータベースに追加しようとしているいくつかの大きなデータがありますので、私のデータベースを使用したい、ありがとう... – rexo

関連する問題