我怎样才能创建表&使用Date,Enum,blob等数据类型在sqlite中插入值

时间:2016-06-21 09:38:19

标签: android json sqlite enums

这是我的DBHandler课程。

如果你检查我的create语句,它的数据类型如enum,blob,date.And在我的ArrayList<Items> getAllItems(),而我正在做“items.setItem_metric_type

这是我得到的错误

ERROR IS:CHANGE 1ST PARAMETER ENM TO INT.

是的,我从服务器获取数据。

    public class DBHandler extends SQLiteOpenHelper implements ItemsListener{
    private static final int DB_VERSION = 1;
    private static final String DB_NAME ="Items.db";
    private static final String TABLE_NAME ="Item";
    private static final String item_number="item_number";
    private static final String item_ean="item_ean";
    private static final String item_desc="item_desc";
    private static final String item_name="item_name";
    private static final String item_metric_type="item_metric_type";
    private static final String item_favorite="item_favorite";
    private static final String item_common_quantity="item_common_quantity";
    private static final String item_common_SP="item_common_SP";
    private static final String Item_metric_value="Item_metric_value";
    private static final String item_SP="item_ SP";
    private static final String item_company="item_company";
    private static final String item_brand="item_brand";
    private static final String Item_product_line="Item_product_line";
    private static final String item_category="item_category";
    private static final String Item_type="Item_type";
    private static final String item_mrp="item_mrp";
    private static final String mfg_date="mfg_date";
    private static final String exp_date="exp_date";
    private static final String Item_vat="Item_vat";
    private static final String batch_id="batch_id";
    private static final String Item_in_multiples="Item_in_multiples";
    private static final String Item_image_selected="Item_image_selected";
    private static final String last_modified_time="last_modified_time";
    private static final String last_modified_by="last_modified_by";
    private static final String Item_active="Item_active";
    private static final String Item_auto_added="Item_auto_added";
    String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" (item_number INTEGER PRIMARY KEY AUTOINCREMENT,item_ean INTEGER,item_desc TEXT NOT   NULL,item_name TEXT NOT NULL,item_metric_type INTEGER NOT   NULL,item_favorite BOOLEAN,item_common_quantity FLOAT,item_common_SP FLOAT,Item_metric_value FLOAT,item_SP FLOAT,item_company TEXT,item_brand   TEXT,Item_product_line TEXT,item_category INTEGER, Item_type    INTEGER,item_mrp FLOAT,mfg_date DATE,exp_date DATE,Item_vat FLOAT,batch_id INTEGER,Item_in_multiples BOOLEAN,Item_image_selected BLOB,last_modified_time DATETIME,last_modified_by INTEGER,Item_active BOOLEAN,Item_auto_added ENUM)";
    String DROP_TABLE="DROP TABLE IF EXISTS "+TABLE_NAME;
    public DBHandler(Context context) {
    super(context,DB_NAME,null, DB_VERSION);
}

@Override
    public void addItems(Items items) {
    SQLiteDatabase db=this.getWritableDatabase();
    try {
        ContentValues values = new ContentValues();
        values.put(item_number, items.getItem_number());
        values.put(item_ean, items.getItem_ean());
        values.put(item_desc, items.getItem_desc());
        values.put(item_name, items.getItem_name());
        values.put(item_metric_type,    String.valueOf(items.getItem_metric_type()));
        values.put(item_favorite,items.getItem_favorite());
           values.put(item_common_quantity,items.getItem_common_quantity());
        values.put(item_common_SP,items.getItem_common_sp());
        values.put(Item_metric_value,items.getItem_metric_value());
        values.put(item_SP,items.getItem_sp());
        values.put(item_company,items.getItem_company());
        values.put(item_brand,items.getItem_brand());
        values.put(Item_product_line,items.getItem_product_line());
        values.put(item_category,items.getItem_category());
        values.put(Item_type, String.valueOf(items.getItem_type()));
        values.put(item_mrp,items.getItem_mrp());
        values.put(mfg_date, String.valueOf(items.getMfg_date()));
        values.put(exp_date, String.valueOf(items.getExp_date()));
        values.put(Item_vat,items.getItem_vat());
        values.put(batch_id,items.getBatch_id());
        values.put(Item_in_multiples,items.getItem_in_multiples());
        values.put(Item_image_selected,   String.valueOf(items.getItem_image_selected()));
        values.put(last_modified_time,   String.valueOf(items.getLast_modified_time()));
        values.put(last_modified_by,items.getLast_modified_by());
        values.put(Item_active,items.getItem_active());
        values.put(Item_auto_added, String.valueOf(items.getItem_auto_added()));
        db.insert(TABLE_NAME,null,values);
        db.close();
    }catch (Exception e){
        Log.e("Problem inserting",e+"");
    }

}

@Override
    public ArrayList<Items> getAllItems() {
    SQLiteDatabase db=this.getReadableDatabase();
    ArrayList<Items> itemList=null;
    try{
        itemList=new ArrayList<Items>();
        String QUERY="SELECT * FROM " +TABLE_NAME;
        Cursor cursor=db.rawQuery(QUERY,null);
        if (!cursor.isLast())
        {
            while (cursor.moveToNext())
            {
                Items items=new Items();
                items.setItem_number(cursor.getInt(0));
                items.setItem_ean(cursor.getInt(1));
                items.setItem_desc(cursor.getString(2));
                items.setItem_name(cursor.getString(3));
                //items.setItem_metric_type(cursor.getInt(4));
                //items.setItem_favorite(cursor.getString(5));
                items.setItem_common_quantity(cursor.getFloat(5));
                items.setItem_common_sp(cursor.getFloat(6));
                items.setItem_brand(cursor.getString(7));
                items.setItem_product_line(cursor.getString(8));
                items.setItem_category(cursor.getInt(9));
                items.setItem_type(cursor.getInt(10));
                items.setItem_mrp(cursor.getFloat(11));
                items.setMfg_date(cursor.getInt(12));
                items.setItem_vat(cursor.getFloat(13));
                items.setBatch_id(cursor.getInt(14));
                items.setItem_in_multiples(cursor.getString(15));
                items.setItem_image_selected(cursor.getInt(16));
                //items.setLast_modified_time(cursor.getColumnName(17));
                items.setLast_modified_by(cursor.getInt(18));
                itemList.add(items);
            }
        }
        db.close();
      }catch (Exception e){
        Log.e("error displaying",e+"");
      }
      return itemList;
   }

    @Override
    public int getItemsCount() {
    int num=0;
    SQLiteDatabase db=this.getReadableDatabase();
    try {
        String query="SELECT * FROM " +TABLE_NAME;
        Cursor cursor=db.rawQuery(query,null);
        num=cursor.getCount();
        db.close();
        return num;
    }catch (Exception e){
        Log.e("in getcount",e+"");
    }
    return 0;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int    newVersion) {
    db.execSQL(DROP_TABLE);
    onCreate(db);

    }
    }

1 个答案:

答案 0 :(得分:0)

SQLite有一个有限的set of data types

ContentValues类直接支持布尔值。要从游标中读取数据,请将数字与零进行比较,或者之前只调用cursorRowToContentValues()(这也使得使用列名更容易读取值)。

您必须选择如何在数据库中存储枚举值;你可以使用字符串或数字。处理此问题的最佳方法是向枚举添加方法以从/转换为数据库类型。

SQLite的内置日期/时间函数支持多个formats,但Java代码通常使用另一种格式(由Java内部使用):自1970年以来的毫秒。 无论您选择何种格式,您的代码都必须使用例如Date.getTime()或您自己的转换函数从/转换为数据库格式。