2012-01-31 71 views
1

在我的應用程序中,我想爲收藏夾quote設置標誌。按鈕單擊我想爲該特定行設置該標誌。在我的數據庫中,對於引號,我採用了TEXT數據格式, boo lean BOOL.I已經設法從數據庫中檢索文本值,但是我無法在數據庫中設置布爾值。由於我是這個主題的新手,所以對此非常感激。 下面是我的代碼在android的sqlite數據庫中設置標誌

public class DatabaseHelper extends SQLiteOpenHelper{ 
    //The Android's default system path of your application database. 
    private static String DB_PATH = "/data/data/com.t4t.smspopup/databases/"; 
    private static String DB_NAME = "smspopupplus.sqlite"; 
    private static SQLiteDatabase myDataBase; 
    private final Context myContext; 
    public static String Column_Favorite="0"; 

    public DatabaseHelper(Context context) { 
     super(context, DB_NAME, null, 1); 
     this.myContext = context; 
    } 

    public void createDataBase() throws IOException 
    { 
     boolean dbExist = checkDataBase();  
     SQLiteDatabase db_Read = null; 
     if(dbExist) 
     { 

     } 
     else 
     { 
      db_Read=this.getReadableDatabase(); 
      db_Read.close(); 
      Log.i("debug++++", "databse created"); 
      try 
      { 
       copyDataBase(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
       throw new Error("Error copying database"); 
      } 
     } 
    } 

    public boolean checkDataBase() 
    { 
     SQLiteDatabase checkDB = null; 

     try 
     { 
      String myPath = DB_PATH + DB_NAME; 
      checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
     } 
     catch(SQLiteException e) 
     { 

     } 

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

     return checkDB != null ? true : false; 
    } 

    public void copyDataBase() throws IOException 
    { 
     InputStream myInput = myContext.getAssets().open(DB_NAME); 
     String outFileName = DB_PATH + DB_NAME; 
     OutputStream myOutput = new FileOutputStream(outFileName); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer))>0) 
     { 
      myOutput.write(buffer, 0, length); 
     } 

     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } 

    public void openDataBase() throws SQLException 
    { 
     String myPath = DB_PATH + DB_NAME; 
     myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
     Log.i("debug++++", "databse opened"); 
    } 

    public void close() 
    { 
     if(myDataBase != null) 
      myDataBase.close(); 

     super.close(); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 

    } 

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

    } 

    public boolean updateDB(String status,String what,int value) 
    { 
     return false; 

    } 
    //retrive sms text from DB 
    public ArrayList<String> getSMSList(String categoryName) 
    { 
     ArrayList<String> SMSList = new ArrayList<String>(); 

     try{ 
      Cursor cursor=null; 


      cursor = myDataBase.query(true,categoryName,null,null,null,null,null,null,null); 
      while(cursor.moveToNext()) 
      { 
       //ProgressData progress = new ProgressData(cursor.getString(0),cursor.getString(1)); 
       String SMSString=cursor.getString(1); 
       SMSList.add(SMSString); 
       //Log.i("debug++++", ""+progressList); 
      } 
      cursor.close(); 

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return SMSList; 
    } 


    @SuppressWarnings("null") 
    public void execSql(String sql,Object[] args) 
    { 
     SQLiteDatabase sqLiteDatabase = null; 
     if(args==null) 
     { 
      sqLiteDatabase.execSQL(sql); 
     } 
     else 

     { 
      Log.e("debug -----------", "command execuated"); 
      sqLiteDatabase.execSQL(sql,args); 
     } 

    } 

回答

4

SQLite Boolean Datatype:
SQLite沒有單獨的布爾存儲類。相反,布爾值被存儲爲整數0(假)和1(真)。

可以轉換布爾以這種方式來詮釋:

int flag = (boolValue==true)? 1:0; 
String query = "UPDATE "+ TABLE_NAME + " set "+COLUMN_NAME+" = "+flag + " where "+CONDITION; 
myDataBase.exeSQL(query); 

您可以轉換INT回布爾如下:

// Select COLUMN_NAME 'flag' values from db. 
// This will be integer value, you can convert this int value back to Boolean as follows 
Boolean flag2 = (intValue==1)?true:false; 
+0

'execSQL'做的伎倆,其餘全部上漲的地方, rawQuery'讓我沒有在那裏 – 2013-09-19 18:29:02

0

如果你想存儲在SQLite數據庫的布爾數據您可以將布爾值存儲爲整數0(假)和1(真)

0

我總是使用TINYINT在我的數據庫中保存標誌,因爲它需要
DB中的空間最少。後來我簡單地切換狀態
與IF-簡寫:使用`

post.postFaved = post.postFaved == 1 ? 0 : 1;