0

我有一个 mysql 数据库,我有一个表,其中包含许多列,包括一个时间戳。我想读取表格并将其写入 csv 文件。然后我将从 csv 文件中读取数据并将其插入另一个数据库和表中。所有这些都是通过java完成的。我可以从第一个 db 中读取表日期和时间戳,但时间戳未正确写入 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 中未正确写入 :( 谢谢

4

2 回答 2

1

不要在 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);
于 2012-11-01T03:15:26.457 回答
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以获取完整代码

于 2012-11-01T14:23:51.387 回答