简体   繁体   English

Android更新sqlite表

[英]Android update sqlite table

I have written Update table using dbAdapter. 我已经使用dbAdapter编写了更新表。

  public void loadDownloadData() {
    SoapPrimitive responsePrimitiveData;
    //Loop Table list
    for (int i = 0; i < tablesName.size(); i++) {
        try {
             responsePrimitiveData = soapPrimitiveData(tablesName.get(i));
             if (responsePrimitiveData != null) {
                try {
                    String result = responsePrimitiveData.toString();
                    JSONObject jsonobject = new JSONObject(result);
                    JSONArray array = jsonobject.getJSONArray("Table1");
                    int max = array.length();

                    // Loop each table data
                    for (int j = 0; j < max; j++) {
                        JSONObject obj = array.getJSONObject(j);
                        JSONArray names = obj.names();
                        StringBuilder strFields = new StringBuilder();
                        StringBuilder strValues = new StringBuilder();
                        String[] strToFields  = new String[names.length()];
                        String[] strToFieldsVal  = new String[names.length()];

                        //getting the Json name, values in  separate string array
                        for (int k = 0; k < names.length(); k++) {
                            String name = names.getString(k);
                            strToFields[k] = names.getString(k);
                            String strVal;
                            if(obj.getString(name)== null){
                                strVal="";
                                strToFieldsVal[k]="";
                            }else{
                                if(obj.getString(name).equals(" ")){
                                    strVal="";
                                    strToFieldsVal[k]="";
                                }else{
                                    String tmp1 = obj.getString(name).replaceAll("\\s+", " ");
                                    String tmp = tmp1.replaceAll("\\s+", " ");
                                    strVal =tmp.replaceAll("\\s+", " ");    
                                    strToFieldsVal[k]=strVal;
                                }
                            }
                           strFields.append(name + ",");
                           strValues.append(strVal+",");
                        } //end of json for loop

                        strFields.deleteCharAt(strFields.length() - 1);
                        strValues.deleteCharAt(strValues.length() - 1);

                        if(getTableUpdateType(tablesName.get(i)).equals("1")){
                            String actualtable = getAndroidTablename(tablesName.get(i));
                            if(isTableRecords(tablesName.get(i))){
                                String[] strWhereField = getTablePrimaryKey(tablesName.get(i),strBusinessUnit);

                                String[] strWhereFieldVal = new String[strWhereField.length];
                                StringBuilder whereFields = new StringBuilder();
                                for (int a = 0; a < strWhereField.length; a++) {
                                    strWhereFieldVal[a] = obj.getString(strWhereField[a]);
                                    whereFields.append(strWhereField[a] + "= ? and ");
                                }
                                whereFields.delete(whereFields.length() - 4, whereFields.length());
                                updateTableRecords(actualtable, strToFields, strToFieldsVal,whereFields.toString() ,strWhereFieldVal);
                            }else{
                                insertTableRecords(actualtable, strToFields, strToFieldsVal);
                            }
                        }else if(getTableUpdateType(tablesName.get(i)).equals("2")){

                        }else if(getTableUpdateType(tablesName.get(i)).equals("3")){

                        }else{

                        }
                    }//end of each table data
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
    }
}

and I called like update method: 我叫更新方法:

  public void updateTableRecords(String strTableName, String[] strToFields, String[] strValues,String strWhereField ,String[] strWhereFieldVal){
    DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(DownlaodTableActivity.this);
    dbAdapter.openDataBase();

    ContentValues initialValues = new ContentValues();
    for(int i=0 ;i<strToFields.length;i++){
        initialValues.put(strToFields[i],strValues[i]);
    }

    long n = dbAdapter.updateRecordsInDB(strTableName, initialValues, strWhereField, strWhereFieldVal);
    System.out.println( " -- n--- " + n); 
    Toast.makeText(DownlaodTableActivity.this, n+" rows updated", Toast.LENGTH_SHORT).show();
}

I want to generate update statement dynamic way. 我想以动态方式生成更新语句。 From These code I put Where part also.But I did not generate where clause. 从这些代码中,我也将Where部分放在其中。但是我没有生成where子句。

see : 见:

UPDATE strTableName SET ExecutiveCode=?, FreeIssuePrefix=?, DisPaySchedulePrefix=?,   NextFreeIssueNo=?, NextReturnNo=?, UploadedType=?, DisNextFOCNo=?, DisNextFreeIssueNo=?

Please help me How to give the Where clase(Here I gave String & arguments as string array) 请帮助我如何给出Where位置(这里我给String和参数作为字符串数组)

Thanks in advance... 提前致谢...

try like this 这样尝试

dbAdapter.updateRecordsInDB(strTableName, initialValues,""+whereField+"='"+whereFieldValue+"'",null);

if your whereField field's type is number then don't use '' If you have to compare with multiple values use 如果whereField字段的类型是数字,则不要使用''如果必须与多个值进行比较,请使用

String where="";
for(int i=0;i<strWhereField.length();i++)
  {
   where=where+whereField[i]+"='"+strWhereFieldValue[i]+"'"
    if(i<(strWhereField.length()-1)) where=where+" and"
  }
 dbAdapter.updateRecordsInDB(strTableName, initialValues,where,null);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM