我正在制作一个程序,我将从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;
}
我必须解决的问题是文本文件中的数据如图所示:
ID位于第三行,NAME位于第五行,然后有一行具有不会存储在某处的数据,并且在一行之后有四列数据。第一个是“价格”之后的“文本”,接下来是“日期”,最后是“升”
我怎么能让它读取例如第三行并只取ID的值并将其存储在ID字段中?有谁可以帮助我?
答案 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/