私はアンドロイドコーディングで新しいです... アクティビティと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);
}
});
ありがとう...
あなたはすでにデータベースから何かを読む方法を知っています。 (あるいは、このコードを別の場所からコピー&ペーストしましたか?)問題は何ですか? –
あなたのカラムをあなたのテーブルの一意の属性として宣言することができます。 あなたの単語が既に保存されている場合は、再度保存することはできません。 –
@ CL。はい、私はデータの読み方を知っていますが、いくつかのデータが存在するかどうかチェックしたいのですが、好きなボタンが消えてしまいます... – rexo