0

私はmysqldbを持っており、タイムスタンプを含む多くの列を持つ1つのテーブルを持っています。テーブルを読み取り、csvファイルに書き込みたい。次に、csvファイルからデータを読み取り、別のデータベースとテーブルに挿入します。これらはすべてJavaを介して行われます。最初のデータベースからテーブルの日付とタイムスタンプを読み取ることができますが、タイムスタンプがcsvファイルに正しく書き込まれていません。最後の数桁のみが書き込まれます。たとえば、タイムスタンプが2012-11-01 02:18:00.0の場合、18:00.0のみがcsvに書き込まれます。他のすべてのものは正常に動作します。たとえば、タイムスタンプをハードに書き込む場合は、2番目のデータベースに書き込むことができます。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

MySQLが単独で実行できることをJavaで実行しないでください。

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-generated.htmlを確認できます。

于 2012-11-01T14:23:51.387 に答える