2012-09-11 91 views
-1

这就是我要做的,我创建了一个SQL数据库来保存饮料的巨型表,该表是这样的:将大型列表插入SQL数据库的最佳方式是什么? [ANDROID]

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

的问题是我有数百个添加....什么是将它们全部添加到数据库中的最佳方式? 在此先感谢您的帮助!我还在学习,我从来没有使用过数据库,所以现在我就丢了仪式。

回答

2

我不会建议很难在你的信源编码它们,因为你将有双倍的数据(然后是一些),并将吸引用户的RAM和存储空间。

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

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

谷歌会引导你大量的SQLite编辑器。

我把我所有的数据库设计和初始加载/测试都放到我的电脑上,然后再把它移到Android上。这更容易和更快。

祝你好运。

+0

有没有教程可以指导我如何做到这一切?你完全是礼节,但我想硬编码的所有选项,我已经有一个饮料的列表,我要求教程的唯一原因是因为我从来没有使用数据库前lol – Hockeyman271

+1

对于PC编辑,我使用SQLite数据库浏览器 - 开源和SourceForge。这真的很容易开始。想象一个数据库表,就像电子表格表中的行和列。该数据库类似于多张表格(表格)的电子表格(好贵族,只有Lotus 1-2-3闪回)。只需使用列名称和类型创建数据库和饮料表以匹配CSV(列名中不包含空格,大小写无关,并查看数据中的撇号)。尝试从这里开始http://www.sqlite.org/cvstrac/wiki/wiki?p=ImportingFiles – Simon

+0

非常感谢!我应该只使用我已经创建的现有数据库吗?如果是的话,我该如何将它从我的应用程序项目中提取出来? – Hockeyman271

0

你可以做这样的事情:

SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 

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

你可以阅读更多有关的BeginTransaction和结束交易SQLite Optimization in Android

相关问题