【问题标题】:parsing timestamp from mysql to csv using java使用java将时间戳从mysql解析为csv
【发布时间】:2012-10-21 15:29:26
【问题描述】:

我有一个 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 数据库,.." 你有 shift 键吗?这应该类似于 “我有一个 MySQL DB,..”。我会进一步建议,但我不能忍受“喃喃自语”。

标签: java mysql csv


【解决方案1】:

尝试使用下面的代码,它适用于大多数数据库,并以正确的格式正确获取所有数据类型。这应该不仅可以解决 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获取完整代码

【讨论】:

  • 对不起,我的错误,您的解决方案效果很好,时间戳已正确写入 csv :) ty
【解决方案2】:

不要在 Java 中做 MySQL 可以自己做的事情。

con = DriverManager.getConnection("jdbc:mysql://localhost/campdb", "...", "...");
stmt = (Statement) con.createStatement();

String q = 
  "SELECT * INTO OUTFILE '" + filename + "'"
  + " FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'"
  + " LINES TERMINATED BY '\n'"
  + " FROM " + tablename;

stmt.execute(q);

【讨论】:

  • 1) 我想多次执行此过程。所以如果文件将被创建一次,那么我可以重新启动相同的过程,因为文件应该在 SELECT 语句期间创建。 2)数据在 .csv 文件中写入 100% 正确,包括时间戳,但是当我尝试读取 .csv 并将数据写入另一个数据库时,会出现错误消息 "mysqldatatruncation: data truncation: wrong date value" 。错误消息是关于日期列而不是时间戳一.. ty 反正
猜你喜欢
  • 2015-10-13
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2015-04-02
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多