2017-07-14 7 views
1

データベースのテーブルに保存されたオブジェクトの主キーを取得したいデータベースを処理するクラスを作成しました。 IDを取得する(私はオブジェクトにIDを与えようとしたが、うまくいきませんでしたので、私は主キーのIDを優先します)ので、この関数はどのように見えるでしょうか?また、コード内で変更が必要なものを見てください知っている。データベースのオブジェクトのPRIMARY KEY IDを取得する方法-android sqlite 3

public class DataBaseHandler extends SQLiteOpenHelper { 

private static int _ID =0; 
private int ID =0; 
private ArrayList<marker_model> markerList=new ArrayList<>(); 

public DataBaseHandler(Context context) { 
    super(context, Constans.TABLE_NAME, null, Constans.DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
db.execSQL("CREATE TABLE "+Constans.TABLE_NAME+ 
       " ("+Constans.MARKER_ID+" INTEGER PRIMARY KEY, "+ 
Constans.MARKER_TITLE+" TEXT, " +Constans.MARKER_DESCRIPTION+" TEXT ,"+Constans.My_MARKER_ID+" INT);"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
db.execSQL("DROP TABLE IF EXISTS "+Constans.TABLE_NAME); 
    onCreate(db); 
} 

public void AddMarker(marker_model marker){ 

    marker.set_Id(_ID); 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues values=new ContentValues(); 

    values.put(Constans.MARKER_TITLE,marker.getTitle()); 
    values.put(Constans.My_MARKER_ID,marker.get_Id()); 
    values.put(Constans.MARKER_DESCRIPTION,marker.getDescription()); 

    db.insert(Constans.TABLE_NAME,null,values); 
    db.close(); 

    Log.d(TAG, "AddMarker: Successfully added to DB"); 

    _ID++; 
} 

public ArrayList<marker_model> getMarkers(){ 
    markerList.clear(); 

    SQLiteDatabase db =getReadableDatabase(); 
    Cursor cursor=db.query(Constans.TABLE_NAME 
      ,new String[]{Constans.My_MARKER_ID,Constans.MARKER_TITLE, 
        Constans.MARKER_DESCRIPTION},null,null,null,null,null); 

    if (cursor.moveToFirst()){ 
     do { 
      ID=0; 
      marker_model model=new marker_model(); 
      model.set_Id(_ID); 
      model.setDescription(cursor.getString(cursor.getColumnIndex(Constans.MARKER_DESCRIPTION))); 
      model.setTitle(cursor.getString(cursor.getColumnIndex(Constans.MARKER_TITLE))); 

      markerList.add(model); 
      ID++; 
     }while(cursor.moveToNext()); 
    } 
    cursor.close(); 
    db.close(); 

    return markerList; 
} 

public int getMarkerPrimaryId(Marker marker){ 

} 


} 
+0

これは、モデルオブジェクトのフィールドの1つです。 –

答えて

0

データベースから _id(主キー)を取得したいと仮定すると、そのマーカーはmarker_modelオブジェクトのインスタンスであり、その marker_modelはして文字列を返すメソッドgetTitlegetDescriptionを持っていますそれぞれの値は、次の行に沿った何かが働くでしょう。

public long getMarkerPrimaryId(Marker marker){ 

    long rv = 0; 
    SQLiteDatabase db = getReadableDatabase(); 
    String[] columns = new String[]{Constans.My_MARKER_ID}; 
    String whereclause = Constans.MARKER_TITLE + "=?" + 
     Constans.MARKER_DESCRIPTION + "=?"; 
    String[] whereargs = new String[]{ 
     marker.getTitile, 
     marker.getDescription 
    } 
    Cursor cursor = db.query(Constans.TABLE_NAME, 
     columns, 
     whereclause, 
     whereargs, 
     null,null,null); 

    if (cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     rv = cursor.getLong(cursor.getColumnIndex(Constans.My_MARKER_ID); 
    } 
    cursor.close; 
    db.close; 
    return rv; 
} 

しかし、あなたの問題は、適切同上メンバーを設定されていないgetMarkersその後

model.set_Id(cursor.getLong(cursor.getColumnIndex(Constans.My_MARKER_ID)); 

model.set_Id(_ID);

を変更し、(つまり、データベース内のIDと一致する)ということであれば十分であろう。

_idが自動的に生成されると予想される場合は、addMarkerに多少の欠陥があります。 values.put(Constans.My_MARKER_ID,marker.get_Id());という行を削除するだけで、_idが自動的に生成されます(どの_idをどのように使用するか)。

次の(ほとんどの背景の段落)では、自動生成された一意の識別子について多く説明しています(AUTOINCREMENTについては、AUTOINCREMENTを記述したくない場合もあります)。作成カーソル、({ ....}

が簡単である) 一方(cursor.moveToNext( - :

if (cursor.moveToFirst()){ 
     do { 
     ... 
    }while(cursor.moveToNext()); 

用い - :

Idはなく、ことを示唆しています最初の行の前に配置されますmoveToPosition(-1)は同じ効果がです)、moveToNext()は最初の行に移動します。ループがない場合はwi入力しないでください(これと返された状態を考慮するといいかもしれません)markerlist)。

注!上記はテストなしで書かれているので、間違いがあるかもしれません。

関連する問題