如何使用 Java 从文件创建数据库?
How can I create a database from a file using Java?
我在使用文本文件创建 SQLite 数据库时遇到问题。我应该创建一个包含以下内容的成员列表:(成员)号码、名字、姓氏、地址和电话号码(如果有)。
我正在使用方法来创建数据库,但我似乎无法让它正常工作。
文本文件是这样填充的(“...”应该表示列表中还有其他内容):
1;John;Doe;Downing, Virginia;123456
2;Jane;Doe;Obispo 2, California;342532
...
...
14;Rich;Damons;Av.5, NY
...
...
正如您可能看到的那样,一些成员没有电话号码,我认为这是导致数据库无法填充的原因。我相信这一点的原因是,我尝试用所有信息制作自己的列表,这似乎有效,但删除电话号码会给我以下错误 Index 4 out of bounds for length 4
这是方法:
private static void createNewTable() throws Exception {
String url = "jdbc:sqlite:members.db";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
Scanner reader = new Scanner(new File("member_list.txt"));
String sql = "create table Member(No integer primary key, " +
"First varchar(50), " +
"Last varchar(50), " +
"Address varchar(50), " +
"Telephone integer);";
stmt.executeUpdate(sql);
try (reader) {
while (reader.hasNextLine()) {
String[] db = reader.nextLine().split("[;]");
String fName = db[1], lName = db[2], address = db[3];
int no = parseInt(db[0]), tel = parseInt(db[4]);
if (db.length == 5) {
sql = "insert into Member values(" + no + ",'" + fName + "','" + lName + "','" + address + "'," + tel + ");";
stmt.executeUpdate(sql);
} else {
sql = "insert into Member values(" + no + ",'" + fName + "','" + lName + "','" + address + "'," + null + ");";
stmt.executeUpdate(sql);
}
}
}
con.close();
out.println("Start: Creates table");
showMessageDialog(null, "Start: Creates table");
}
非常感谢任何帮助!
我尝试使用所有信息创建自己的成员列表,这很有效;我尝试创建一个没有电话号码的成员列表,但是没有用。
对于没有电话号码的条目,字符串的长度为 4。因此,当您尝试访问 db[4] 时,您会遇到 ArrayIndexOutofBound 异常。
初始化 if 条件中的 tel
变量。
对于没有 phone 数字的成员,您的拆分结果 (db
) 的长度仅为 4,这意味着其最高索引将为 3。
int no = parseInt(db[0]), tel = parseInt(db[4]);
尝试访问没有 phone 号码的成员越界的索引。
考虑将声明 tel = parseInt(db[4])
移到处理确实有 phone 号码的成员的 if 语句中,因为无论如何它只与这些情况相关。
我在使用文本文件创建 SQLite 数据库时遇到问题。我应该创建一个包含以下内容的成员列表:(成员)号码、名字、姓氏、地址和电话号码(如果有)。 我正在使用方法来创建数据库,但我似乎无法让它正常工作。
文本文件是这样填充的(“...”应该表示列表中还有其他内容):
1;John;Doe;Downing, Virginia;123456
2;Jane;Doe;Obispo 2, California;342532
...
...
14;Rich;Damons;Av.5, NY
...
...
正如您可能看到的那样,一些成员没有电话号码,我认为这是导致数据库无法填充的原因。我相信这一点的原因是,我尝试用所有信息制作自己的列表,这似乎有效,但删除电话号码会给我以下错误 Index 4 out of bounds for length 4
这是方法:
private static void createNewTable() throws Exception {
String url = "jdbc:sqlite:members.db";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
Scanner reader = new Scanner(new File("member_list.txt"));
String sql = "create table Member(No integer primary key, " +
"First varchar(50), " +
"Last varchar(50), " +
"Address varchar(50), " +
"Telephone integer);";
stmt.executeUpdate(sql);
try (reader) {
while (reader.hasNextLine()) {
String[] db = reader.nextLine().split("[;]");
String fName = db[1], lName = db[2], address = db[3];
int no = parseInt(db[0]), tel = parseInt(db[4]);
if (db.length == 5) {
sql = "insert into Member values(" + no + ",'" + fName + "','" + lName + "','" + address + "'," + tel + ");";
stmt.executeUpdate(sql);
} else {
sql = "insert into Member values(" + no + ",'" + fName + "','" + lName + "','" + address + "'," + null + ");";
stmt.executeUpdate(sql);
}
}
}
con.close();
out.println("Start: Creates table");
showMessageDialog(null, "Start: Creates table");
}
非常感谢任何帮助!
我尝试使用所有信息创建自己的成员列表,这很有效;我尝试创建一个没有电话号码的成员列表,但是没有用。
对于没有电话号码的条目,字符串的长度为 4。因此,当您尝试访问 db[4] 时,您会遇到 ArrayIndexOutofBound 异常。
初始化 if 条件中的 tel
变量。
对于没有 phone 数字的成员,您的拆分结果 (db
) 的长度仅为 4,这意味着其最高索引将为 3。
int no = parseInt(db[0]), tel = parseInt(db[4]);
尝试访问没有 phone 号码的成员越界的索引。
考虑将声明 tel = parseInt(db[4])
移到处理确实有 phone 号码的成员的 if 语句中,因为无论如何它只与这些情况相关。