2

我对 SQLite 数据库很陌生,需要帮助使用外部文本文件创建初始数据库来存储一堆可以选择并添加到第二个数据库的项目。为了把这一切放在上下文中,我想要一个存储杂货店物品列表的初始数据库。每个项目都有两个特征,一个名称和一个类型。所以有诸如(NAME Bread, TYPE Bakery. NAME Grape Juice, TYPE Beverage. NAME Toothbrush, TYPE Toiletries。)

我需要从这样的事情开始:

GROCERYSTORE.TXT
-- -- -- -- -- --

NAME - TYPE

Bread - Bakery

Rolls - Bakery

Juice - Beverages

Soda - Beverages

对此:

dBHelper.insert("Bread", "Bakery");

或者:

dBHelper.insert(name, type);

对于文本文件中的每个项目。

首先,我想知道如何格式化这个文本文件,或者如果文本文件不是最简单的方法,那么可以读取并插入数据库的任何其他类型的文件。

其次,我将如何阅读此文本文件并将其插入数据库?

我想我会在 for 循环中使用缓冲读取器和输入流将每个项目插入数据库。我只是不确定如何解析每一行以给每个项目一个名称和一个要插入数据库的类型,以及如何格式化要读取的文本文件。

任何帮助将不胜感激,因为我几乎没有发现关于使用外部文件将数据导入与我的情况相关的 sql 数据库。

4

1 回答 1

1

在我的具有静态或默认数据库的应用程序中,我使用 xml 文件来存储我的数据,如下所示:

default_grocerystore.xml 存储在 assets 文件夹中:

<default_grocerystore>
    <grocery>
            <name>Bread</name>
            <type>Bakery</type>
    </grocery>
    <grocery>
            <name>Rolls</name>
            <type>Bakery</type>
    </grocery>
    <grocery>
            <name>Juice</name>
            <type>Beverages</type>
    </grocery>
    <grocery>
            <name>Soda</name>
            <type>Beverages</type>
    </grocery>
</default_grocerystore>

然后在onCreate我的数据库类中,我创建了我的数据库表,我用 xml 填充它们,如下所示:

private void populateGrocery(SQLiteDatabase db) {
                    ArrayList<GroceryObj> groceryArrayList;
                    groceryArrayList = buildGroceryArrayList();
                    String insertStmt = null;
                    for (int i = 0; i < groceryArrayList.size(); i++) {
                            insertStmt = "INSERT INTO " + GROCERY_TABLE + " ("
                                            + GROCERY_KEY_NAME + ", " + GROCERY_KEY_TYPE + ") "
                                            + "VALUES (\""
                                            + groceryArrayList.get(i).getName()
                                            + "\", \""+groceryArrayList.get(i).getType()+"\");";
                            db.execSQL(insertStmt);
                    }

private ArrayList<GroceryObj> buildGroceryArrayList() {
                    ArrayList<GroceryObj> aL = new ArrayList<GroceryObj>();
                    DocumentBuilderFactory factory = DocumentBuilderFactory
                                    .newInstance();
                    try {
                            DocumentBuilder builder = factory.newDocumentBuilder();
                            InputStream raw = context.getAssets().open(
                                            "default_grocerys.xml");
                            Document dom = builder.parse(raw);
                            Element root = dom.getDocumentElement();
                            NodeList groceryItems = root.getElementsByTagName("grocery");
                            for (int i = 0; i < groceryItems.getLength(); i++) {
                                    String name= null;
                                    String type= null;
                                    Node item = groceryItems.item(i);
                                    NodeList groceryItem = item.getChildNodes();
                                    for (int j = 0; j < groceryItem.getLength(); j++) {
                                            Node nodeItem= groceryItem.item(j);
                                            String nodeName= noteItem.getNodeName();
                                            if (nodeName.equalsIgnoreCase("name")) {
                                                    name= nodeItem.getFirstChild().getNodeValue();
                                            } else if (nodeName.equalsIgnoreCase("type")) {
                                                    type= nodeItem.getFirstChild().getNodeValue();
                                            }
                                    }
                                    aL.add(new GroceryObj(name, type));
                            }
                    } catch (Exception e) {
                            e.printStackTrace();
                    }
                    return aL;
            }
            }
于 2012-06-04T17:11:49.860 回答