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

问题是我有数百个要添加....将它们全部添加到数据库中的最佳方法是什么?提前感谢你们的任何帮助!我还在学习,我以前从未使用过数据库,所以我现在失去了仪式。

4

2 回答 2

2

我不建议在您的源代码中对它们进行硬编码,因为您将拥有双倍的数据(然后是一些),并且会从您的用户那里吸走 RAM 和存储空间。

我认为您没有充分的理由在运行时将列表静态加载到数据库中。我还假设您已经有了饮料清单。

我将从列表中创建一个 CSV 文件,然后在我的 PC 上使用桌面 SQLite 编辑器将列表加载到我的表中,然后将数据库作为资源包含在我的应用程序中。

谷歌会带你去大量的 SQLite 编辑器。

在将 PC 移至 Android 之前,我会在 PC 上完成所有数据库设计和初始加载/测试。它更容易和更快。

祝你好运。

于 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 回答