[英]Check whether the column in SQLite NULL or not NULL
我有兩個表,一個是Info
,另一個是WorkDetails
。
表格信息: ID(PK), Name, Weather, Date, Status, TimeIn_Info, TimeOut_Info
表工作詳細信息: ID(PK),Project,WorkDescription,Per,TimeIn,TimeOut // 4 row
對於WorkDetails
的行,將僅插入具有值的行。 否則,將不會插入。 接下來,表Info
的TimeOut_Info
將用於獲取表WorkDetails
的TimeOut
值。 它將從第四行開始搜索,檢查是否存在TimeOut
值。 如果沒有,它將檢查third
,依此類推。 如果在第三行中找到TimeOut值,它將在表信息中插入TimeOut值,並且不會檢查第二和第一。 同樣, TimeIn_info
有所不同,區別在於TimeIn_info
從第一行開始搜索,而不是從第四行開始搜索。
Button btn1=(Button)findViewById(R.id.button2);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
AlertDialog.Builder builder=new AlertDialog.Builder(WorkDetailsTable.this);
builder.setTitle("Data Saved");
builder.setMessage("Are you sure you want to save?");
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int ii) {
W1 = txtWork1.getText().toString();
W2 = txtWork2.getText().toString();
W3 = txtWork3.getText().toString();
W4 = txtWork4.getText().toString();
a1 = spinnerTra.getSelectedItem().toString();
a2 = spinnerTra2.getSelectedItem().toString();
a3 = spinnerTra3.getSelectedItem().toString();
a4 = spinnerTra4.getSelectedItem().toString();
P1 = per1.getText().toString();
P2 = per2.getText().toString();
P3 = per3.getText().toString();
P4 = per4.getText().toString();
// long ab = ts.insertTimeSheet(name, weather, date, status);
// long cf= WF.insertWorkForce(subContractors, noPeople, noHours,ab);
if ((TextUtils.isEmpty(W4)) && (TextUtils.isEmpty(P4)) && (TextUtils.isEmpty(h)) && (TextUtils.isEmpty(i))) {
checkRow3(W3, P3, f, g);// check row 3;
checkRow2(W2, P2, d, e1);//check row 2;
checkRow1(W1, P1, b, c);
}
else if (!(TextUtils.isEmpty(i)))
{
WD.insertWorkDetails(a4, W4, P4, h, i);
database = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.TimeOut_Info, i);
database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
checkRow3(W3, P3, f, g);// check row 3;
checkRow2(W2, P2, d, e1);//check row 2;
checkRow1(W1, P1, b, c);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int ii) {
dialog.dismiss();
}
});
builder.show();
}
});
}
public void checkRow3(String a, String b, String c, String d) {
if ((TextUtils.isEmpty(a)) && (TextUtils.isEmpty(b)) && (TextUtils.isEmpty(c)) && (TextUtils.isEmpty(d))) {
}
else if ((!(TextUtils.isEmpty(a)))||(!(TextUtils.isEmpty(b)))||(!(TextUtils.isEmpty(c)))&&((TextUtils.isEmpty(d)))) {
WD.insertWorkDetails(a3, a, b, c, d);
}
else if ((!(TextUtils.isEmpty(a)))||(!(TextUtils.isEmpty(b)))||(!(TextUtils.isEmpty(c)))&&(!(TextUtils.isEmpty(d))))
{
WD.insertWorkDetails(a3, a, b, c, d);
database = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.TimeIn_Info, d);
database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
}
return;
}
public void checkRow2(String a, String b, String c, String d)
{
if ((TextUtils.isEmpty(a)) && (TextUtils.isEmpty(b)) && (TextUtils.isEmpty(c)) && (TextUtils.isEmpty(d)))
{
return ;
}
else
{
WD.insertWorkDetails(a2, a, b, c, d);
}
return;
}
public void checkRow1(String a, String b, String c, String d)
{
WD.insertWorkDetails(a1, a, b, c, d);
database = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.TimeIn_Info, c);
database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
return;
}
如您所見,我的代碼有些混亂。 它有什么方法可以搜索列(TimeOut_info)是否已經有值嗎?
如何檢查列是NULL還是NOT NULL? 如果為NULL,則將TimeOut值插入TimeOut_Info中,否則將不會! 我該如何實現?
當我嘗試使用此方法檢查特定列是否包含值時,但是我無法解決rawQyery。
public void checkRow2(String a, String b, String c, String d)
{
if ((TextUtils.isEmpty(a)) && (TextUtils.isEmpty(b)) && (TextUtils.isEmpty(c)) && (TextUtils.isEmpty(d)))
{
}
else if ((!(TextUtils.isEmpty(a)))||(!(TextUtils.isEmpty(b)))||(!(TextUtils.isEmpty(c)))&&((TextUtils.isEmpty(d)))) {
WD.insertWorkDetails(a3, a, b, c, d);
}
else if ((!(TextUtils.isEmpty(a)))||(!(TextUtils.isEmpty(b)))||(!(TextUtils.isEmpty(c)))||(!(TextUtils.isEmpty(d))))
{
database = dbHelper.getWritableDatabase();
//Cursor mCursor=db.rawQuery("SELECT TimeOut_Info FROM "+MyDatabaseHelper.TABLE_INFO+"WHERE"+MyDatabaseHelper.TimeOut_Info+"=' "+d+"'");
Cursor mCursor = database.rawQuery("SELECT TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO + " WHERE " +MyDatabaseHelper.TimeOut_Info + "= '" + d + "'");
if(c==null)
{
}
}
return;
}
有什么建議么? 謝謝
沒有使用一個參數的rawQuery
重載方法。
更改
Cursor mCursor = database.rawQuery("SELECT TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO + " WHERE " +MyDatabaseHelper.TimeOut_Info + "= '" + d + "'");
與
Cursor mCursor = database.rawQuery("SELECT TimeOut_Info FROM " + MyDatabaseHelper.TABLE_INFO + " WHERE " +
MyDatabaseHelper.TimeOut_Info + "= '" + d + "'" , null);
您已經在查詢中提供了硬編碼的selectionArgs。 在您的情況下,傳遞null應該沒問題。 在這里看看
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.