ユーザーが入力したテキストがすでにデータベースにあるかどうかを確認しようとしていますが、これをどのように行うべきかわかりません。
したがって、データベースヘルパークラスで次のコマンドを呼び出すことにより、データベースからデータをフェッチできます。
public Cursor fetchDamagedComponentsForLocation(long damagedComponentId) {
Cursor mCursor =
rmDb.query(true, DAMAGED_COMPONENTS_TABLE, new String[] {
COMPONENT_ID, LOCATION_LINK, RUN_LINK, AREA_LINK, INSPECTION_LINK, LOCATION_REF, RACKING_SYSTEM, COMPONENT, POSITION, RISK, ACTION_REQUIRED, NOTES_GENERAL, MANUFACTURER, TEXT1, TEXT2, TEXT3, TEXT4, NOTES_SPEC},
LOCATION_LINK + "=" + damagedComponentId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
データベースエントリごとに、2つのユーザー入力が、ユーザーが保存ボタンをクリックしたときにスピナーから取得する2つのデータベースフィールド(この場合はCOMPONENTとPOSITION)と一致するかどうかを確認する必要があります。
String component = ((Cursor)componentSpinner.getSelectedItem()).getString(2).toString();
String position = ((Cursor)positionSpinner.getSelectedItem()).getString(1).toString();
これは基本的に、そのコンポーネントがまだ保存されていないことを確認するためです。
これは非常に簡単だと思いますが、どうすればよいかわかりません。
編集-Samsのアドバイスに従って、データベース化されたヘルパークラスに次のクラスを追加しました。
public boolean checkIfComponentAlreadySaved(long locationId, String component, String position) {
Cursor mCursor = rmDb.query(DAMAGED_COMPONENTS_TABLE, new String[] {"1"},
LOCATION_LINK + " = " + locationId + " AND " + COMPONENT + " = " + component + " AND " + POSITION + " = " + position, null, null, null, null, null);
boolean result = mCursor.moveToFirst();
mCursor.close();
return result;
}
ただし、次のエラーが発生します。
android.database.sqlite.SQLiteException:near "pin":構文エラー:、コンパイル中:SELECT 1 FROM Damaged_components_table WHERE location_link = 3 AND component = Locking pin AND position = Not Applicable
これは文字列を比較しているためだと思いますが、何か提案はありますか?