2012-01-31 19 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;