我在向数据库中正确插入和更新值时遇到问题。我有一个数据库,有两个表,每个表有3列DATE
,NUM_X
,NUM_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);
}
}
}
任何帮助将不胜感激,谢谢。
答案 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, ...);