android - 如何将文本文件中的数据插入android中的sql数据库?

标签 android database sqlite text-parsing

我是 SQLite 数据库的新手,需要帮助使用外部文本文件创建初始数据库来存储一堆可以选择并添加到第二个数据库的项目。为了将这一切放在上下文中,我想要一个初始数据库来存储杂货店商品列表。每个项目都有两个特征,一个名称和一个类型。所以有诸如(NAME 面包,TYPE 面包店。NAME 葡萄汁,TYPE 饮料。NAME 牙刷,TYPE 洗漱用品。)

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

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

NAME - TYPE

Bread - Bakery

Rolls - Bakery

Juice - Beverages

Soda - Beverages

为此:

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

或:

dBHelper.insert(name, type);

对于文本文件中的每一项。

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

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

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

任何帮助将不胜感激,因为我发现很少关于使用外部文件将数据导入适合我的情况的 sql 数据库。

最佳答案

在我的具有静态或默认数据库的应用程序中,我为我的数据使用了一个 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;
            }
            }

关于android - 如何将文本文件中的数据插入android中的sql数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884769/

相关文章:

android - 将推送通知接收到图书馆项目

php - 将原始 SQL 查询更改为 Laravel 查询生成器对象

ios - FMResultSet 中的内存泄漏 - FMDB

android - 代号一 : Attaching images to email message fails

java - View 添加到 ViewGroup 后不可见

android - 更新 Android Studio 后似乎无法修复此错误

ios - 使用 Phonegap 和 iOS 5.1 时如何阻止 HTML 5 数据库被删除

java - 面向对象数据库难题?

c# - 这是 sqlite 日期或 c# 的编码问题吗?

Android注销应用程序