2011-09-12 6 views
1

Android의 SQLite 데이터베이스에서 데이터를 삽입, 업데이트 및 삭제하는 세 가지 방법을 쓰려고합니다. 지금까지 데이터베이스에 데이터를 삽입 할 수 있지만 where 절을 SQL에 추가하는 방법을 이해할 수 없습니다.안드로이드 삽입/업데이트/삭제 SQLite 쿼리

갱신 방법 : 여기 내가 사용하고 코드입니다

public boolean updateSQL(String tableName,String key,String value){ 
    return updateData(tableName,key,value); 
} 

private static boolean updateData(String tableName,String key,String value){ 
    sqliteDb = instance.getWritableDatabase(); 
    String where = "id=?"; 
    ContentValues values = new ContentValues(); 
    values.put(key, value); 
    values.put(key, value); 
    sqliteDb.update(tableName, values, where, null); 
    return true; 
} 

... 그리고 나는이 같은이 방법을 호출하고 있습니다 ..

dbHelper.updateSQL("saved_codes", "code_id", "3"); 
//dbHelper is an instance to a custom DatabaseHelper class. 

방법을 삭제하십시오 :

public boolean deleteSQL(String tableName,String key,String value){ 
    return deleteData(tableName,key,value); 
} 

private static boolean deleteData(String tableName,String key,String value) { 
    sqliteDb = instance.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    String where = null; 
    String[] whereArgs = null; 
    values.put(key, value); 
    values.put(key, value); 
    sqliteDb.delete(tableName, where, whereArgs); 
    return true; 
} 

문자열 wherewhereArgsnull 인 것을 알고 있지만 실제로 어떻게 추가하는지 이해할 수 없습니다. 누군가 나를 위해 코드를 작성하지는 않지만 인터넷에서 좋은 조언, 제안 또는 샘플을 환영합니다.

sqliteDb.update(tableName, values, where, new String[] {"42"}); 

것은 42 업데이트 할 행의 _id 것 :

답변

5

당신은 같은

String where = "id=?"; 

뭔가 whereArgs이 필요합니다. 또한 BaseColumns._ID를 "id"보다 선호하십시오.

1

당신이 데이터베이스

public class DatabaseconectionApiDemo extends SQLiteOpenHelper { 

    private final Context myContext; 
    ArrayList<String> labels1; 
    // StaticValues mStaticValues; 
    private static SQLiteDatabase db; 

    @SuppressLint("SdCardPath") 
    public final static String DB_PATH = "/data/data/com....youpackagename..../databases/"; 
    public final static String DB_NAME = "DataBaseName.sqlite"; 


    public DatabaseconectionApiDemo(Context context) { 
     super(context, DB_NAME, null, 1); 
     this.myContext = context; 
    } 
    public void createDataBase() throws IOException { 
     boolean dbExist = checkDataBase(); 

     if (dbExist) { 
      // do nothing 
     } else { 
      // By calling this method and empty database will be created into the default system path 
      // of your application so we are gonna be able to overwrite that database with our database. 
      this.getReadableDatabase(); 
      try { 
       copyDataBase(); 
      } catch (IOException e) { 
       throw new Error("Error copying database"); 
      } 
     } 
    } 

    private void copyDataBase() throws IOException{ 
     InputStream myInput = myContext.getAssets().open(DB_NAME); 

     // Path to the just created empty db 
     String outFileName = DB_PATH + DB_NAME; 

     // Open the empty db as the output stream 
     OutputStream myOutput = new FileOutputStream(outFileName); 

     // transfer bytes from the inputfile to the outputfile 
     byte[] buffer = new byte[2048]; 
     int length; 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 

     // Close the streams 
     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } 

    private boolean checkDataBase() { 
     SQLiteDatabase checkDB = null; 
     try { 
      String myPath = DB_PATH + DB_NAME; 
      checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
     } catch (SQLiteException e) { 
      // database does't exist yet. 
     } 

     if (checkDB != null) { 
      checkDB.close(); 
     } 

     return checkDB != null ? true : false; 
    } 

    public void openDataBase() throws SQLException { 
     try { 
      if (db != null) { 
       if (db.isOpen()) { 
        db.close(); 
       } 
      } 

     } catch (Exception e) { 
      System.out.println("no database connected to close"); 
     } 
     // Open the database 
     String myPath = DB_PATH + DB_NAME; 
     db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
    } 

    @Override 
    public synchronized void close() { 
     if (db != null) 
      db.close(); 
     super.close(); 
    } 
    public int Update(String TableName, String cols[], String values[], String whereClause, String whereArgs[]) { 
     int id = 0; 
     openDataBase(); 
     id = db.update(TableName, getContentValues(cols, values), whereClause, whereArgs); 
     close(); 

     return id; 

    } 

    public int insertwithreturnid(String TableName, String cols[], String values[]) { 
     int id = 0; 
     openDataBase(); 

     id = (int) db.insert(TableName, null, getContentValues(cols, values)); 
     close(); 
     return id; 
    } 
    public int delete(String TableName, String where, String whereArgs[]) { 
     int id = 0; 
     openDataBase(); 
     id = db.delete(TableName, where, whereArgs); 
     close(); 
     return id; 
    } 


    public DataHolder readFromTableName(String TableName, String cols[], String where[], String keyword) { 

     openDataBase(); 
     DataHolder _holder = null; 

     Cursor c = null;  

     c = db.query(TableName, cols, where[0], null, null, null, null); 

     if (c != null) { 
      c.moveToFirst(); 
      _holder = new DataHolder(); 
      while (!c.isAfterLast()) { 
       int count = c.getColumnCount(); 
       _holder.CreateRow(); 
       for (int i = 0; i < count; i++) { 
        _holder.setmColoumn(c.getColumnName(i), c.getString(i)); 
       } 
       _holder.AddRow(); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
     close(); 
     return _holder; 
    } 

    public void exeQuery(String sql) { 
     openDataBase(); 
     try { 
      db.execSQL(sql); 
     } catch (Exception e) { 
      System.out.println(e.toString()); 
     } 
     close(); 
    } 

    public boolean InsertByValue(String table, ContentValues values) { 
     try { 
      openDataBase(); 
      db.insertOrThrow(table, null, values); 
      Log.d("InsertByValue", "Data Insert"); 
      return true; 
     } catch (Exception e) { 
      Log.d("InsertByValue", e.toString()); 
      e.printStackTrace(); 
      return false; 
     } 
    } 

    public DataHolder read(String sql) { 

     openDataBase(); 
     DataHolder _holder = null; 

     Cursor c = db.rawQuery(sql, null); 

     if (c != null) { 
      c.moveToFirst(); 
      _holder = new DataHolder(); 

      while (!c.isAfterLast()) { 

       int count = c.getColumnCount(); 

       _holder.CreateRow(); 

       for (int i = 0; i < count; i++) { 
        _holder.setmColoumn(c.getColumnName(i), c.getString(i)); 
       } 
       _holder.AddRow(); 
       c.moveToNext(); 
      } 
     } 
     c.close(); 
     close(); 
     return _holder; 
    } 

    public ContentValues getContentValues(String cols[], String values[]) { 

     ContentValues cv = new ContentValues(); 
     for (int i = 0; i < cols.length; i++) { 
      cv.put(cols[i], values[i]); 

     } 
     return cv; 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 

    } 

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

    } 

} 

연결에 대한 connetion API를 클래스를 만들 필요가 무엇보다도 당신은

public class DataHolder { 

    private ArrayList<LinkedHashMap<String, String>> mRow; 
    private LinkedHashMap<String, String> mColoumn; 

    public DataHolder() { 
     super(); 
     mRow = new ArrayList<LinkedHashMap<String, String>>(); 
    } 

    public void setmColoumn(String col, String value) { 
     this.mColoumn.put(col, value); 
    } 

    public ArrayList<LinkedHashMap<String, String>> getmRow() { 
     return mRow; 
    } 

    public void CreateRow() { 
     this.mColoumn = new LinkedHashMap<String, String>(); 

    } 

    public void AddRow() { 
     this.mRow.add(this.mColoumn); 
    } 

    public void clear() { 
     this.mRow.clear(); 
    } 

    public void add(LinkedHashMap<String, String> linkedHashMap) { 
     this.mRow.add(linkedHashMap); 
    } 
} 

에서 당신에게 데이터를 읽을 데이터 홀더 클래스를 추가하고 읽을 수 finnaly 필요 , 쿼리를 수행하여 데이터베이스 테이블 데이터 삽입, 업데이트 및 삭제

public class YourActivity extends Activity{ 

private DataHolder mDataHolder; 
private DatabaseconectionApi mDatabaseconectionApi; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 


// initialize dataholder and connectionapi class like bellow 
    mDataHolder=new DataHolder(); 
    mDatabaseconectionApi=new DatabaseconectionApi(YourActivity.this); 
    try { 
     mDatabaseconectionApi.createDataBase(); 
     mDatabaseconectionApi.openDataBase(); 
    }catch (IOException e) { 
     e.printStackTrace(); 
    } 


........... 

//now you can perform insert,update,read and delete like these 

mDataHolder = new DataHolder(); 
    mDataHolder = mDatabaseconectionApi.read("SELECT * from table_name where "+table_id 
      +" = '"+TId+"'"); 

mDatabaseconectionApi.insertwithreturnid("table_name", 
             new String[]{"column_name"}, 
             new String[]{"column_value"}); 
            mDatabaseconectionApi.Update("table_name", 
             new String[]{"column_name"}, new String[]{"column_value"}, 
             "column_id"+" = ?", new String[]{"column_id_value"}); 
            mDatabaseconectionApi.delete("table_name", null, null); 
//         or 
            mDatabaseconectionApi.delete("table_name", "column_id"+" = ?", new String[]{"column_id_value"}); 
0
,210

////// 호출하는 방법을 모든 방법 /////

public void load_custom_view(){ 

    try { 
     detail=new ArrayList<BookPojo>(); 
     database=new Database(CustomViewActivity.this); 
     database.open(); 
     Cursor c=database.getAllData(); 
     if(c.moveToFirst()) 
     { 
      do{ 
       detail.add(new BookPojo(c.getInt(0),c.getString(1), c.getString(2),c.getFloat(3))); 

      }while(c.moveToNext()); 
     } 
     c.close(); 
     database.close(); 
     messagelist.setAdapter(new CustomAdapter(detail,CustomViewActivity.this)); 




    } catch (Exception e) { 
     // TODO: handle exception 
    } 

} 


btnsubmit.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      bisdn=edtisdn.getText().toString(); 
      btitle=edttitle.getText().toString(); 
      bauthor=edtauthor.getText().toString(); 
      bprice=edtprice.getText().toString(); 

      /*Database databse=new Database(InsertActivity.this); 
      databse.open(); 
      databse.insertData(bisdn,btitle,bauthor,bprice); 
      databse.close();*/ 


     } 
}); 


public void create_dialog() { 

    builder = new AlertDialog.Builder(this); 
    builder.setTitle("Warning!"); 
    builder.setMessage("Are you sure to delete isdn="+bisdn); 
    builder.setIcon(R.drawable.ic_launcher); 
    builder.setCancelable(false); 

    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

      Database database = new Database(VUDActivity.this); 
      database.open(); 
      database.DeleteData(bisdn); 
      database.close(); 


     } 
    }); 
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

      Toast.makeText(getApplicationContext(), "Not deleted", 
        Toast.LENGTH_LONG).show(); 

     } 
    }); 
    builder.show(); 

} 
관련 문제