2011-08-03 3 views
0

dbAdapter를 사용하여 업데이트 테이블을 작성했습니다.Android 업데이트 sqlite 테이블

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

와 나는 업데이트 방법과 같이 호출 :

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

내가 update 문을 동적 인 방법을 생성합니다. 이 코드에서 Where 부분도 넣었습니다. 그러나 where 절을 생성하지 않았습니다.

참조 :

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

어떻게 사전에

덕분에 (내가 문자열을 문자열 배열로 & 인수를 준 다음)를 어디 clase을 제공하는 제발 도와주세요 ...

답변

1

이 같은 시도

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

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); 
+0

clauese에는 더 많은 코드가 들어 있습니다. 예를 들어'BusinessUnit =? ExecutiveCode =? '인자가 문자열 배열 이니까 – Piraba

+0

업데이트 된 답변보기 – Rasel