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

今、私は提案されたように、行ごとに挿入しています:

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です。

4

3 に答える 3

4

あなたの挿入文は間違っています。SQLite では複数のレコードをカンマで区切って挿入することはできません。実際には、そのための個別の挿入コマンドを用意する必要があります。ただし、SQLite のバージョンが3.7.11の場合は可能です。

これを読んでください。

于 2012-04-09T11:08:42.157 に答える
0

このようなforループでそれを行うことができます

// 次のようなボタン クリック イベントを追加します

String[] arr1 = new 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)
        {

        }

}
于 2012-04-09T11:29:56.273 に答える
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();


}
于 2012-04-09T11:46:22.337 に答える