如何使用 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 语句中,因为无论如何它只与这些情况相关。