我对SQLite数据库很陌生,需要帮助使用外部文本文件创建一个初始数据库来存储一堆可以选择并添加到第二个数据库的项目。为了把这一切都放在上下文中,我希望有一个初始数据库来存储杂货店商品列表。每个项目都有两个特征,一个是NAME,一个是TYPE。所以有一些项目,如(NAME面包,TYPE面包店。名称葡萄汁,TYPE饮料。名称牙刷,TYPE洗浴用品。)
我需要从这样的事情出发:
GROCERYSTORE.TXT
-- -- -- -- -- --
NAME - TYPE
Bread - Bakery
Rolls - Bakery
Juice - Beverages
Soda - Beverages
到此:
dBHelper.insert("Bread", "Bakery");
或:
dBHelper.insert(name, type);
为文本文件中的每个项目。
首先,我想知道如何格式化这个文本文件,或者如果文本文件不是最简单的方法,可以读取和插入到数据库中的任何其他类型的文件。
其次,我将如何阅读此文本文件并将其插入数据库?
我想我会在for循环中使用缓冲读取器和输入流来将每个项目插入到数据库中。我只是不确定如何解析每一行以给每个项目命名和要插入数据库的类型,以及如何格式化要读取的文本文件。
任何帮助都会非常感激,因为我发现很少使用外部文件将数据导入到与我的情况相关的sql数据库中。
答案 0 :(得分: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;
}
}