-1

これが私がやろうとしていることです。飲み物の巨大なテーブルを保持するSQLデータベースを作成しました。テーブルは次のようになります。

    **_ID    ALCOHOL   TYPE    BRAND    PRICE**

元。1 リキュール ウォッカ スミノフ 14

私のデータベースアダプタのコードは次のとおりです。

    package net.learn2develop.Database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter {

public static final String KEY_ROWID = "_id";
public static final String KEY_ALCOHOL = "alcohol";
public static final String KEY_TYPE = "type";
public static final String KEY_BRAND = "brand";
public static final String KEY_PRICE = "price";
private static final String TAG = "DBAdapter";

private static final String DATABASE_NAME = "booze";
private static final String DATABASE_TABLE = "titles";
private static final int DATABASE_VERSION = 1;

private static final String DATABASE_CREATE =
    "create table titles (_id integer primary key autoincrement, "
    + "alcohol text not null, type text not null, " 
    + "brand text not null);" + "price integer not null";

private final Context context;

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper 
{
    DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                          int newVersion) 
    {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
              + " to "
              + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS titles");
        onCreate(db);
    }
}

  //---opens the database---
    public DBAdapter open() throws SQLException 
{
    db = DBHelper.getWritableDatabase();
    return this;
}

//---closes the database---    
public void close() 
{
    DBHelper.close();
}

//---insert a title into the database---
public long insertTitle(String alcohol, String type, String brand, int price) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_ALCOHOL, alcohol);
    initialValues.put(KEY_TYPE, type);
    initialValues.put(KEY_BRAND, brand);
    initialValues.put(KEY_PRICE, price);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

//---deletes a particular title---
public boolean deleteTitle(long rowId) 
{
    return db.delete(DATABASE_TABLE, KEY_ROWID + 
            "=" + rowId, null) > 0;
}

//---retrieves all the titles---
public Cursor getAllTitles() 
{
    return db.query(DATABASE_TABLE, new String[] {
            KEY_ROWID, 
            KEY_ALCOHOL,
            KEY_TYPE,
            KEY_BRAND,
            KEY_PRICE}, 
            null, 
            null, 
            null, 
            null, 
            null);
}

//---retrieves a particular title---
public Cursor getTitle(long rowId) throws SQLException 
{
    Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[] {
                    KEY_ROWID,
                    KEY_ALCOHOL, 
                    KEY_TYPE,
                    KEY_BRAND,
                    KEY_PRICE
                    }, 
                    KEY_ROWID + "=" + rowId, 
                    null,
                    null, 
                    null, 
                    null, 
                    null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

//---updates a title---
public boolean updateTitle(long rowId, String alcohol, 
String type, String brand, int price) 
{
    ContentValues args = new ContentValues();
    args.put(KEY_ALCOHOL, alcohol);
    args.put(KEY_TYPE, type);
    args.put(KEY_BRAND, brand);
    args.put(KEY_PRICE, price);
    return db.update(DATABASE_TABLE, args, 
                     KEY_ROWID + "=" + rowId, null) > 0;
}

}

これで、次のように呼び出して、メイン アクティビティに個別に追加できることがわかりました。

    //---add 2 titles---
    db.open();        
    long id;
    id = db.insertTitle(
            "Liquor",
            "Vodka",
            "Smirnoff",
                    "14");        
    id = db.insertTitle(
            "Liquor",
            "Rum",
            "Captain Morgan",
                    "20");
    db.close();

問題は、何百もの追加する必要があることです....それらをすべてDBに追加する最良の方法は何ですか? 皆さん、何か助けてくれてありがとう!私はまだ学んでいます。これまでデータベースを使用したことがないので、今は儀式を失いました。

4

2 に答える 2

2

ソースにハードコーディングすることはお勧めしません。データが 2 倍になり (さらに一部)、ユーザーから RAM とストレージを消費することになるからです。

実行時にリストを DB に静的にロードする正当な理由はないと思います。また、あなたはすでに飲み物のリストを持っていると思います。

リストから CSV ファイルを作成し、PC でデスクトップ SQLite エディターを使用してリストをテーブルにロードし、データベースをリソースとしてアプリに含めます。

Google は、多くの SQLite エディターに誘導します。

Android に移行する前に、PC ですべての DB 設計と初期ロード/テストを行います。はるかに簡単で高速です。

幸運を。

于 2012-09-11T19:41:56.493 に答える
0

次のようなことができます。

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

db.beginTransaction();
try {   
    for(ContentValues con:conValues){
    db.insert(TABLE_COLUMN,null,con);
}
    db.setTransactionSuccessful();
} 
    finally {
    db.endTransaction();
}

Android での begintransaction と end transaction の SQLite 最適化について詳しく読むことができます。

于 2012-09-11T19:15:20.447 に答える