我有一个 mysql 数据库,并且有一个表,其中有许多列,其中包括时间戳列。我想读取该表并将其写入 csv 文件。然后我将从 csv 文件中读取数据并将其插入到另一个数据库和表中。这些都是通过java来完成的。 我可以从第一个数据库读取表日期和时间戳,但时间戳未正确写入 csv 文件中。仅写入最后几位数字。例如,如果我有一个时间戳 2012-11-01 02:18:00.0 只有 18:00.0 才会写入 csv。所有其他东西都工作正常。例如,如果我硬写时间戳,我可以将其写入第二个数据库。这是读取 mysql 并写入 csv 的代码:
con = DriverManager.getConnection("jdbc:mysql://localhost/campdb", "...", "...");
stmt = (Statement) con.createStatement();
fw = new FileWriter(filename);
PrintWriter a = new PrintWriter(fw);
ResultSet res = stmt.executeQuery("SELECT * FROM CAMPREQ;");
while (res.next())
{
String ID = res.getString(1);
java.sql.Date date = res.getDate(2);
//java.util.Date jdate = new java.util.Date(date.getTime());
String company = res.getString(3);
String time = res.getString(4);
String origin = res.getString(5);
String dest = res.getString(6);
String timestamp = res.getString(7);
System.out.println(timestamp);
a.print(ID);
a.print(',');
a.print(date);
a.print(',');
a.print(company);
a.print(',');
a.print(time);
a.print(',');
a.print(origin);
a.print(',');
a.print(dest);
a.print(',');
a.print(timestamp);
a.print('\n');
a.flush();
}
System.out 命令按应写入的方式打印时间戳,但在 csv 中写入不正确:( 谢谢
最佳答案
尝试使用下面的代码,它适用于大多数数据库,并以正确的格式正确地正确获取所有数据类型。这不仅可以解决 mysql 的问题,还可以解决任何其他数据库的问题
public static StringBuffer resultSetToStringCsv(ResultSet resultSet) throws Exception{
StringBuffer stringwriter = new StringBuffer();
ResultSet rs = resultSet;
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
//Write column names
for(int i=1;i<=numberOfColumns;i++){
stringwriter.append(rsmd.getColumnName(i));
stringwriter.append(',');
}
stringwriter.append('\n');
//Write rows
while(rs.next()){
for(int i=1;i<=numberOfColumns;i++){
try{
stringwriter.append(""+rs.getObject(i));
stringwriter.append(',');
}catch (Exception e) {
stringwriter.append("null");
stringwriter.append(',');
}
}
stringwriter.append('\n');
}
您可以查看http://bmukorera.blogspot.com/2012/11/resultset-query-to-string-generating.html完整代码
关于java - 使用java将时间戳从mysql解析为csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13170384/