SQLite - 创建多个更新或插入的表

时间:2014-03-23 21:35:01

标签: android sqlite date

我在向数据库中正确插入和更新值时遇到问题。我有一个数据库,有两个表,每个表有3列DATENUM_XNUM_Y。两个不同的表包含相同的列,插入值的方式的唯一区别是HOURS_TABLE将采用HH(当天的当前小时)而DATE_TABLE将采用短时间字符串dd/MM/yyyy

未将值插入新行,而是更新第一行的值。这两个表目前只有一行。

public static final String HOURS_TABLE = "HOURS_TABLE";
public static final String DATE_TABLE = "DATE_TABLE";
public static final String CreateHoursTable = "create table "+ 
HOURS_TABLE +" ("+DATE+" string not null, "+NUM_X+
" integer default 0,"+NUM_Y+" integer default 0)";

public static final String CreateDateTable = "create table "+ 
DATE_TABLE +" ("+DATE+" string not null, "+NUM_X+" 
integer default 0,"+NUM_Y+" integer default 0)";

@Override
public void onCreate(SQLiteDatabase db)
{
    // TODO Auto-generated method stub
    db.execSQL(CreateDateTable);
    db.execSQL(CreateHoursTable);
}

可以传入两种不同类型的日期字符串,格式化为dd / MM / yyyy(短日期字符串),另一种为HH(小时)

public long createEntry(int x, int y, String date, int Version_Zero_HoursTable_One_DateTable)
{
    /*
     * first grab the values needed to increment the database values
     * */
    Cursor c ;
    String[] column = new String[]{DATE,NUM_X,NUM_Y};
    if(Version_Zero_HoursTable_One_DateTable == 0)
    {
     c = ourDatabase.query(HOURS_TABLE, column, date, null, null,
            null, null);    
    }
    else
    {
         c = ourDatabase.query(DATE_TABLE, column, date, null, null,
                    null, null);
    }
    int current_x =0;
    int current_y  = 0;
    String current_day = "";
    int iX = c.getColumnIndex(NUM_X);
    int iY = c.getColumnIndex(NUM_Y);
    int iDate = c.getColumnIndex(DATE);
    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        current_x += c.getInt(iX);
        current_y += c.getInt(iY);
        current_day = c.getString(iDate);
    }
    ContentValues cv = new ContentValues();
    cv.put(NUM_X, smokes+current_smokes);
    cv.put(NUM_Y, cravings+current_cravings);
    cv.put(DATE, date);

WHEREargs字符串是我的where子句变量,所以当数据库中选定的DATE等于date时,它将更新所选列,如果没有选择任何内容(current_day) .equals(“”)),将执行插入新行的语句。

    String WHEREargs = DATE+"="+date;
    if(Version_Zero_HoursTable_One_DateTable == 0)
    {
        if(current_day.equals(""))
        {
        return ourDatabase.insert(HOURS_TABLE, null, cv);
        }
        else
        {
        return ourDatabase.update(HOURS_TABLE, cv, WHEREargs, null);
        }
    }
    else
    {
        if(current_day.equals(""))
        {
        return ourDatabase.insert(DATE_TABLE, null, cv);
        }
        else
        {
        return ourDatabase.update(DATE_TABLE, cv, WHEREargs, null);
        }
    }
}

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

您使用的date变量错误。

24/03/2014之类的日期值不能直接用作WHERE表达式;它将被解释为两个整数除法。

类似地,诸如DATE = 24/03/2014之类的字符串也不能用作WHERE表达式,因为它将日期列中的值与数字进行比较。

在SQL中,字符串必须用'单引号'括起来。 但是,为避免格式化问题和SQL注入攻击,最好使用参数:

String where = DATE + "= ?";
String[] whereArgs = new String[] { date };
...
db.query(..., where, whereArgs, ...);