Во время печати результат, полученный во время db.update (), печатает 0 - PullRequest
0 голосов
/ 20 сентября 2018

Во время печати обновленное значение всегда возвращает 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();
    }
    }

1 Ответ

0 голосов
/ 20 сентября 2018

Значения, которые вы передали методу (т. Е. Значения, которыми вы хотите обновить строку), - это те же значения, которые вы используете для определения строки, подлежащей обновлению.

Вы бы хотеличто-то вроде: -

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 не найдет строку длябудь тыpdated и, следовательно, почему обновление возвращает 0 (т. е. было обновлено 0 строк).

Короче говоря, вы должны быть в состоянии идентифицировать строку, которую хотите обновить.

Возможное решение 1.

Определите строку для обновления, если у вас есть столбец UNIQUE или UNIQUE комбинированные

Если какой-либо из 5 столбцов определен с помощью UNIQUE, вы можете использовать этот столбец вНапример, 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 столбцов вместе определено как УНИКАЛЬНОЕ или определенно будетУНИКАЛЬНЫЙ как комбинация, тогда вы можете передать исходные (старые) значения методу и объединить эти столбцы для предложения и аргументов WHERE.

Возможное решение 2

Определите строку, которую нужно обновить с помощьюrowid или псевдоним rowid

Таблица не должна быть определена как таблица БЕЗ ROWID.

Если ни один из столбцов или комбинаций столбцов не будетконечно, всегда будет УНИКАЛЬНЫМ, тогда вы можете использовать столбец rowid строки (если вы не определили таблицу как таблицу без rowid (т. е. таблица определена с ключевыми словами WITHOUT ROWID)).

Если у вас есть столбец, определенный как the_column_name INTEGER PRIMARY KEY или the_column_name INTEGER PRIMARY KEY AUTOINCREMENT, тогда столбец будет псевдонимом столбца rowid , поэтому можно использовать имя_колонки.

  • * the_column_name не является действительным именем, оно представляет любое допустимое имя столбца.Например, у вас может быть id INTEGER PRIMARY KEY, поэтому id - это имя столбца, представленное the_column_name .

Так что вы в любом случаеиметь имя столбца, который будет идентифицировать 1 конкретную строку.

Получение значения строки или псевдонима из вставленной строки для обновления

Это значение можно получить, вставив строку с помощьюSQLiteDatabase метод вставки , поскольку это значение, возвращаемое из вставки, например, long id_of_the_insert_row = db.insert(....., или вы можете выполнить запрос SELECT last_insert_rowid();, например,

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);
} 

upgradealldata методможет быть в таком виде: -

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();
}
  • Выше было бы работать, если бы у вас был псевдоним для rowid столбец

Если у вас есть псевдоним для столбца rowid (скажем, он был определен как константа ID_COLUMN (например, у вас было public static final String ID_COLUMN = "id"), то вы можете использовать: -

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 ID_COLUMN + "=?";
    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();
}
  • Примечание ..... (количество точек / полных остановок представляет код в соответствии с исходным кодом)
  • Дополнительное примечание Приведенный выше код является принципиальным кодом.Он не был проверен и может содержать ошибки.
...