我在点击一个按钮时将3个值插入数据库,1是插入日期,2是来自editText的数字,第3个是分配给被点击按钮的值(有6个不同的按钮可以点击)
我想要做的是检查日期和数字是否已经在数据库中,第3个值无关紧要。我不能在任何列上使用unique,因为我希望editText中的数字能够再次输入,但不能在同一天输入。
我到目前为止...... 并且它不会向数据库输入任何数据
来自MainActivity
public void onClick_30(View v) {
counter++;
cnt_bcs30++;
String getCowNum = CowNum.getText().toString();
Cursor C = myDB.dubUpCheck();
String ddate = C.getString(DBAdapter.COL_DATE);
String cow = C.getString(DBAdapter.COL_COW);
if(C.moveToFirst()){
do {
if(ddate == dateFormat.format(date) && cow == getCowNum){
Toast.makeText(getBaseContext(), getCowNum + "Has already been scored today ",
Toast.LENGTH_SHORT).show();
}
}while (C.moveToNext());
}else{
myDB.insertRow(dateFormat.format(date), getCowNum, 3.0);
Toast.makeText(getBaseContext(), getCowNum + " " + score30,
Toast.LENGTH_SHORT).show();
CowNum.clearFocus();
}
}
来自我的DBAdapter
public Cursor dubUpCheck() {
Cursor c = db.query(DATABASE_TABLE, new String []{KEY_DATE, KEY_COW}, null, null,
null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
我需要检查是否有一行有dateFormat.format(date)和getCowNum,但我似乎无法让它工作,不确定是否是由于我存储日期是一个字符串的方式dd-MM-yyyy的格式
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
像这样,输入数据但仍然允许重复
public void onClick_30(View v) {
counter++;
cnt_bcs30++;
String getCowNum = CowNum.getText().toString();
Cursor C = myDB.dubUpCheck();
String ddate = C.getString(DBAdapter.COL_DATE);
String cow = C.getString(DBAdapter.COL_COW);
if(ddate == dateFormat.format(date) && cow == getCowNum){
Toast.makeText(getBaseContext(), getCowNum + "Has already been scored today ",
Toast.LENGTH_SHORT).show();
}else{
myDB.insertRow(dateFormat.format(date), getCowNum, 3.0);
Toast.makeText(getBaseContext(), getCowNum + " " + score30,
Toast.LENGTH_SHORT).show();
CowNum.clearFocus();
}
UPD:另一次尝试......其他的声明是在我所知道的错误的地方,但这并不是所有的错误我在猜测
public void onClick_30(View v) {
counter++;
cnt_bcs30++;
String getCowNum = CowNum.getText().toString();
Cursor C = myDB.dubUpCheck();
String ddate = C.getString(DBAdapter.COL_DATE);
String cow = C.getString(DBAdapter.COL_COW);
if (C.moveToFirst()) {
do {
if (ddate.equals(dateFormat.format(date)) && cow.equals(getCowNum)) {
Toast.makeText(getBaseContext(),
getCowNum + "Has already been scored today ",
Toast.LENGTH_SHORT).show();
}
} while (C.moveToNext());
} else {
myDB.insertRow(dateFormat.format(date), getCowNum, 3.0);
Toast.makeText(getBaseContext(), getCowNum + " " + score30,
Toast.LENGTH_SHORT).show();
CowNum.clearFocus();
}
}
答案 0 :(得分:1)
为什么不只是一个简单的WHERE
?
/** @return true if given date/cowNum combination is already in the db, false otherwise */
public boolean dubUpCheck(Date date, String cowNum) {
/* The 3rd parameter is treated as SQL WHERE clause, ? are replaced by strings
* from the 4th parameter */
Cursor cur = db.query(DATABASE_TABLE, null, "DATE = ? AND COW_NUM = ?", new String[] {dateFormat.format(date), getCowNum}, null, null, null, null);
if (cur != null && cur.getCount()>0) {
// duplicate found
return true;
}
return false;
}
<强> UPD 强>
在您手动比较字符串的方法中,您已经犯了一个经典的Java菜鸟错误。您正在使用运算符String
比较==
个对象:它将返回false
,用于不同的[实例]对象,这些对象可能实际上是内容相同的(例如,{ {1}}会给你"foo" == new String("foo")
)。你必须这样使用false
:
.equals()
但实际上,尝试上面的方法,它会创建更少的对象,并将为您节省所有字符串比较的东西。
看来你可以从阅读一本关于Java的好书中受益 - 例如Thinking in Java by Bruce Eckel是新手和中级Java开发人员最棒的读取之一