如何从文本文件中导入表中的值

时间:2013-06-17 13:16:55

标签: java jdbc

我正在制作一个程序,我将从txt文件中读取数据并将它们存储在mysql中的表中。在我的程序开始时,将创建包含它将包含的所有字段的表(ID,名称,文本,价格,日期,升) 代码如上所示:

private static String getCreateTable1(Connection con, String tablename) {

try {
    Class.forName("com.mysql.jdbc.Driver");
    Statement stmt = con.createStatement();
    String createtable = "CREATE TABLE " + tablename
            + " ( ID INT, name VARCHAR(255), text VARCHAR(255), price INT , date DATE, litres DECIMAL (20,8) )";
    System.out.println("Create a new table in the database");
    stmt.executeUpdate(createtable);
} catch (Exception e) {
    System.out.println(((SQLException) e).getSQLState());
    System.out.println(e.getMessage());
    e.printStackTrace();
}

return null;
}

我必须解决的问题是文本文件中的数据如图所示:enter image description here

ID位于第三行,NAME位于第五行,然后有一行具有不会存储在某处的数据,并且在一行之后有四列数据。第一个是“价格”之后的“文本”,接下来是“日期”,最后是“升”

我怎么能让它读取例如第三行并只取ID的值并将其存储在ID字段中?有谁可以帮助我?

2 个答案:

答案 0 :(得分:0)

首先,您的数据在XML格式中会更好,然后使用XML解析器,您可以很好地读取数据并将它们转换为对象。

我猜你甚至没有创建一个加载数据的对象,所以让我帮你解决这个问题:

public class MyDataObject {

    int id;
    String name;
    DataTable table;

    private class DataTable {
        String col1;
        int col2;
        Date date;
        int col3;
        int col4;
        DataTable(...) {
            ...
        }
    }
}

现在阅读完你的文本文件后(猜测你不知道这是另一种代码库的实用方法)。

static String readFile(String path, Charset encoding) 
  throws IOException 
{
  byte[] encoded = Files.readAllBytes(Paths.get(path));
  return encoding.decode(ByteBuffer.wrap(encoded)).toString();
}
// Usage:
// String content = readFile("test.txt", Charset.defaultCharset());

您需要在代码库中使用实用程序方法将XML字符串解析为文档:

public static Document loadXMLFromString(String xml) throws Exception
{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xml));
    return builder.parse(is);
}

最后剩下的就是将XML数据映射到数据对象(MyDataObject)。

为此,请参阅this answer

您可能希望编译对象的List / ArrayList,然后您可以循环访问它们并轻松访问数据。

答案 1 :(得分:0)

您可以在SQL命令中直接从CSV文件导入数据。见http://dev.mysql.com/doc/refman/5.1/en/load-data.html

您也可以在java中从CSV中读取它,然后存储到数据库中,请参阅http://opencsv.sourceforge.net/