在打印更新值期间,它始终返回0,并且数据库未更新。我想更新这个数据库。是否有其他任何过程来更新此数据库。是否使用此方法更新数据库?
public void upgradealldata(String latco, String lngco,
String locationco, String coll,String conv,String remark,
String del_activity,String service_issues,String comp_activity,
String image, String image1,String order_details,String
closing_stock,String checkout_time,String distance_travelled,
String payimg, String payrem)
{
SQLiteDatabase db = getWritableDatabase();
try
{
ContentValues cvalues = new ContentValues();
cvalues.put(LATITUDE_CHKOUT, latco);
cvalues.put(LONGITUDE_CHKOUT, lngco);
cvalues.put(LOCATION_CHKOUT, locationco);
cvalues.put(COLLECTION, coll);
cvalues.put(CONVEYANCE, conv);
cvalues.put(REMARK, remark);
cvalues.put(SERVICE_ISSUES, service_issues);
cvalues.put(IMAGE, image);
cvalues.put(IMAGE1, image1);
cvalues.put(ORDER_DETAILS, order_details);
cvalues.put(CLOSING_STOCK, closing_stock);
cvalues.put(CHECKOUT_TIME, checkout_time);
cvalues.put(DISTANCE_TRAVELLED, distance_travelled);
cvalues.put(DEL_ACTIVITY, del_activity);
cvalues.put(COMP_ACTIVITY, comp_activity);
cvalues.put(CHO_PYMENTIMAGE, payimg);
cvalues.put(CHO_PAYMENTREMARK, payrem);
int result = db.update(TABLE_ALLSENDDETAILS,cvalues,
LATITUDE_CHKOUT+" =? and "+LONGITUDE_CHKOUT+" =? and
"+LOCATION_CHKOUT+" =? and "+COLLECTION+" =? and
"+CONVEYANCE+"=? and "+REMARK+" =? and "+SERVICE_ISSUES+" =?
and "+IMAGE+" =? and "+IMAGE1+" =? and "+ORDER_DETAILS+" =?
and "+CLOSING_STOCK+" =? and "+CHECKOUT_TIME+" =? and
"+DISTANCE_TRAVELLED+" =? and "+DEL_ACTIVITY+" =? and
"+COMP_ACTIVITY+" =? and "+CHO_PYMENTIMAGE+" =? and
"+CHO_PAYMENTREMARK+" =?",new String[]{
latco,lngco,locationco,coll,conv,remark,service_issues,
image,image1,order_details,closing_stock,checkout_time,
distance_travelled,del_activity, comp_activity,payimg,payrem
}
);
System.out.println("UpdateValue====>"+String.valueOf(result));
db.close();
}
catch (SQLiteException e){
e.printStackTrace();
}
finally{
db.close();
}
}
答案 0 :(得分:0)
您传递给该方法的值(即您要用来更新行的值)与用于标识要更新的行的值相同。
您可能想要一些类似的东西:-
public void upgradealldata(String latco, String lngco, String
locationco, String coll,String conv, String remark,
String del_activity, String service_issues, String comp_activity,
String image, String image1, String order_details, String
closing_stock,String checkout_time, String distance_travelled,
String payimg, String payrem,
// ADDED parameters for the original values of the row
String old_latco, String old_lngco, String
old_locationco, String old_coll,String old_conv, String old_remark,
String old_del_activity, String old_service_issues, String old_comp_activity,
String old_image, String old_image1, String old_order_details, String
old_closing_stock,String old_checkout_time, String old_distance_travelled,
String old_payimg, String old_payrem)
{
SQLiteDatabase db = getWritableDatabase();
try
{
ContentValues cvalues = new ContentValues();
cvalues.put(LATITUDE_CHKOUT, latco);
cvalues.put(LONGITUDE_CHKOUT, lngco);
cvalues.put(LOCATION_CHKOUT, locationco);
cvalues.put(COLLECTION, coll);
cvalues.put(CONVEYANCE, conv);
cvalues.put(REMARK, remark);
cvalues.put(SERVICE_ISSUES, service_issues);
cvalues.put(IMAGE, image);
cvalues.put(IMAGE1, image1);
cvalues.put(ORDER_DETAILS, order_details);
cvalues.put(CLOSING_STOCK, closing_stock);
cvalues.put(CHECKOUT_TIME, checkout_time);
cvalues.put(DISTANCE_TRAVELLED, distance_travelled);
cvalues.put(DEL_ACTIVITY, del_activity);
cvalues.put(COMP_ACTIVITY, comp_activity);
cvalues.put(CHO_PYMENTIMAGE, payimg);
cvalues.put(CHO_PAYMENTREMARK, payrem);
int result = db.update(TABLE_ALLSENDDETAILS,cvalues,
LATITUDE_CHKOUT+" =? and "+LONGITUDE_CHKOUT+" =? and
"+LOCATION_CHKOUT+" =? and "+COLLECTION+" =? and "+CONVEYANCE+"
=? and "+REMARK+" =? and "+SERVICE_ISSUES+" =? and "+IMAGE+" =?
and "+IMAGE1+" =? and "+ORDER_DETAILS+" =? and
"+CLOSING_STOCK+" =? and "+CHECKOUT_TIME+" =? and
"+DISTANCE_TRAVELLED+" =? and "+DEL_ACTIVITY+" =? and
"+COMP_ACTIVITY+" =? and "+CHO_PYMENTIMAGE+" =? and
"+CHO_PAYMENTREMARK+" =?",
new String[{old_latco,old_lngco,old_locationco,old_coll,old_conv,old_remark,old_service_issues,old_image,old_image1,old_order_details,old_closing_stock,old_checkout_time,old_distance_travelled,old_del_activity,old_comp_activity,old_payimg,payrem});
System.out.println("UpdateValue====>"+String.valueOf(result));
db.close();
} catch (SQLiteException e)
{
e.printStackTrace();
} finally {
db.close();
}
}
但是,这是为什么经常使用 id 列(即唯一标识符,例如 rowid 的别名)的原因之一,因此您可以仅通过单个值来识别特定行。
评论
此表在插入期间首先包含28列 操作插入的前5列值,其余列插入空白 数据之后,我想用数据更新其余的23列。 可能在这里吗?
这确认您遇到的问题是WHERE子句不会找到要更新的行,因此更新为什么返回0(即0行已更新)。
如果用UNIQUE定义了5列中的任何一列,则可以在WHERE子句中使用该列,例如(例如,假设lacto被定义为lacto TEXT UNIQUE
),则可以使用:-
public void upgradealldata( string lacto, String lngco, .... the other columns..... Strain payrem,
String old_lacto) {
..... code for setting the ContentValues as it is .....
String whereclausae = LATITUDE_CHKOUT+" =?";
String[] whereargs = new String[]{old_lacto};
int result = db.update(TABLE_ALLSENDDETAILS,cvalues,whereclause,whereargs);
System.out.println("UpdateValue====>"+String.valueOf(result));
db.close();
}
如果合并的5列中有许多列被定义为UNIQUE或绝对将是UNIQUE作为组合,则可以将原始(old_)值传递给该方法,并将这些列用于WHERE子句和参数。
如果没有任何列或列组合绝对总是唯一的,则可以使用行的 rowid 列(只要您尚未将表定义为不包含rowid的表(也就是说,表是使用WITHOUT ROWID关键字定义的))。
如果您将列定义为the_column_name INTEGER PRIMARY KEY
或the_column_name INTEGER PRIMARY KEY AUTOINCREMENT
,则该列将是 rowid 列的别名,因此可以使用_column_name。
id INTEGER PRIMARY KEY
,所以 id 是由 the_column_name 表示的列名。因此,无论哪种情况,您都有一个可以标识1个特定行的列名。
使用SQLiteDatabase insert 方法插入行时可以获得此值,因为它是从插入返回的值,例如long id_of_the_insert_row = db.insert(.....
或可以运行查询{{1} }例如
SELECT last_insert_rowid();
upgradealldata 方法可能类似于:-
log id_of_the_last_inserted_row = 0;
Cursor csr = db.rawQuery("SELECT last_insert_rowid()",null);
if (csr.moveToFirst()) {
id_of_the_last_inserted_row = csr.getLong(0);
}
如果您为 rowid 列添加了别名(假设它被定义为常量ID_COLUMN(例如,您拥有public void upgradealldata( string lacto, String lngco, .... the other columns..... Strain payrem,
long rowid_or_alias) {
..... code for setting the ContentValues as it is .....
String whereclausae "rowid=?";
String[] whereargs = new String[]{String.valueOf(rowid_or_alias)};
int result = db.update(TABLE_ALLSENDDETAILS,cvalues,whereclause,whereargs);
System.out.println("UpdateValue====>"+String.valueOf(result));
db.close();
}
),则可以使用:-
public static final String ID_COLUMN = "id"