2012-04-09 44 views
1
@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 
     // providers data 
//  db.execSQL("insert into " 
//    + TABLE_PROVIDERS 
//    + " (_id, provider_id, parent_id, title, image, sh_n, enable, visible, image_bg, type, is_group, hide_in_search, limit_min, limit_max, off_on_line, invoice_search) " 
//    + "VALUES (1,600,101,'Источники оплаты','',1,1,0,'','',1,1,0,0,0,0)"); 

     ContentValues cv = new ContentValues(); 
     cv.put("_id", 1); 
     cv.put("provider_id", 600); 
     cv.put("parent_id", 101); 
     cv.put("title", "Bla"); 
     cv.put("image", "bla"); 
     cv.put("sh_n", 1); 
     cv.put("enable", 1); 
     cv.put("visible", 1); 
     cv.put("image_bg", ""); 
     cv.put("type", ""); 
     cv.put("is_group", 1); 
     cv.put("hide_in_search", 1); 
     cv.put("limit_min", 10); 
     cv.put("limit_max", 10000); 
     cv.put("off_on_line", 1); 
     cv.put("invoice_search", 1); 

     db.insertOrThrow(TABLE_PROVIDERS, null, cv); 
} 

我現在做的建議,按行插入行:的Android源碼插入數據SQLiteException

import java.util.*; 

import android.content.*; 
import android.database.*; 
import android.database.sqlite.*; 

public class ProviderDataSource { 

    private SQLiteDatabase database; 
    private MySQLiteHelper dbHelper; 

    public ProviderDataSource(Context context) { 
     dbHelper = new MySQLiteHelper(context); 
    } 

    public void open() throws SQLException { 
     database = dbHelper.getWritableDatabase(); 
    } 

    public void close() { 
     dbHelper.close(); 
    } 

    public List<Provider> getProvidersByParentId(long parentId) { 

     List<Provider> providersList = new ArrayList<Provider>(); 

     Cursor cursor = database.query(MySQLiteHelper.TABLE_PROVIDERS, new String[] { "provider_id", "title", "image" }, " parent_id=" + parentId, 
       null, null, null, null); 

     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) { 
      Provider provider = cursorToProvider(cursor); 
      providersList.add(provider); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     System.out.println("getProvidersByParentId"); 
     return providersList; 
    } 

    private Provider cursorToProvider(Cursor cursor) { 

     Provider provider = new Provider(); 
     provider.setId(cursor.getInt(1)); 
     provider.setTitle(cursor.getString(3)); 
     provider.setImg(cursor.getString(4)); 

     return provider; 

    } 

} 

它不工作。看起來好像沒有插入行,並且getProvidersByParentId方法返回的數組是空的。作爲參數的Parent_id是101.

+1

嘗試插入單個記錄。 – Bhavin 2012-04-09 11:10:22

+0

是的,謝謝,Ravi在下面的帖子中向我提供了一個ContentValues數組。 – 2012-04-10 04:44:28

回答

4

您的插入語句錯誤。在SQLite中,你不能用逗號分隔多個記錄,實際上你需要爲它準備單獨的插入命令。但如果你的SQLite版本是3.7.11那麼它的可能。

閱讀this

+0

好的,如果我有超過1-10行的行插入,比如10000行的轉儲 - 在這種情況下該怎麼辦? – 2012-04-10 10:16:19

+1

開始一個SQLite事務,使用for-loop添加記錄並最終提交該事務。這將是真正的快速 – waqaslam 2012-04-10 10:23:26

0

你可以用它做像這樣循環

//添加一個按鈕單擊事件像

的String [] = ARR1新的String [N]; String [] arr2 = new String [n]; String [] arr3 = new String [n];

addButton.setOnClickListener 
      (
       new View.OnClickListener() 
       { 
        @Override public void onClick(View v) { 


           for(int i=1;1<4;i++){ 


      try 
      { 
       // ask the database manager to add a row given the two strings 

       //db object of database manager class 

       db.addValues 
       (
        arr1[i] , 
        arr2[i] , 
        arr3[i] , 

       ); 


          } 
catch (Exception e) 
      { 
       Log.e("Add Error", e.toString()); 
       e.printStackTrace(); 
      } 

           } 

            ); 

//插入

的功能
public void addValues(String Col1, String Col2, 
          String col3) 

{ 

ContentValues values = new ContentValues(); 




     values.put(Columns1, Col1); 
     values.put(Columns2, Col2); 
     values.put(Columns3, Col3); 

try{ 
      db.insert(Course_Info_Table, null, values); 


} 
     catch(Exception e) 
     { 

     } 

} 
0
使用

ContentValues將數據插入表中是這樣的。

SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues cv = new ContentValues(); 

     cv.put("_id", 1); 
     cv.put("provider_id", 600); 
     cv.put("parent_id", 0); 

     cv.put("title", "Источники оплаты"); 
     cv.put("image", ""); 
     cv.put("sh_n", 1); 
     cv.put("enable", 1); 
     cv.put("visible", 0); 
     cv.put("image_bg", ""); 
     cv.put("type", ""); 
     cv.put("is_group", 1); 
     cv.put("hide_in_search", 1); 
     cv.put("limit_min", 0); 
     cv.put("limit_max", 0); 
     cv.put("off_on_line", 0); 
     cv.put("invoice_search", 0); 
     db.insertOrThrow(TABLE_PROVIDERS, null, cv); 
      db.close(); 

對於多個記錄多次調用此方法。

public void insertMydata(int _id, int provider_id, int parent_id /*....add more parameters as you required */){ 

       SQLiteDatabase db = this.getWritableDatabase(); 
      ContentValues cv = new ContentValues(); 

      cv.put("_id", _id); 
      cv.put("provider_id", provider_id); 
      cv.put("parent_id", parent_id); 
       /* 
       ...... 
       ..... 
       put more code here for other columns 
       ...... 
       */ 
       db.insertOrThrow(TABLE_PROVIDERS, null, cv); 
       db.close(); 


} 
+0

非常感謝你,這似乎是真正的決定 - 我會稍後嘗試。 – 2012-04-10 04:42:49

+0

好的,如果我有超過1-10行的行插入,比如10000行的轉儲 - 在這種情況下該怎麼辦? – 2012-04-10 10:03:49

+0

我已編輯我的帖子。將所有代碼放入一個Method和Call方法中多次插入多行。 – Ravi1187342 2012-04-10 10:29:52