- 締切済み
javaのcsvダウンロードについて
javaについてです。 現在 http://www58.atwiki.jp/chapati4it/m/pages/143.ht … このサイトのcsvファイルをダウンロードするプログラムを作りました。 そこで このサイトではString[][] rows =に 値を入れていますが、その前にデータベースに接続して getStringで値をとってきてString型に入れてそれをcsvとして表示させたいのですが、どうすればよいですか? jspでデータベースの内容を表示させるものはもともと作ってあって、 Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー&password=パスワード&useUnicode=true&characterEncoding=utf8"); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from テーブル名 "); これを書いて、getStringで受っとてやればいいのかなと思うのですが... できれば一個のファイルにまとめたいのですが、わかる人よろしくお願いします。 javaの知識が不十分です。すいません
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- teketon
- ベストアンサー率65% (141/215)
分からないのは、rowsへの入れ方ということですね。 String[][] rows={{"A","B"},{"C","D"}}; のような書き方は、配列の内容が変数の宣言時に、決まっている場合だけ使います。 配列の内容が宣言時にわからない(データベースへの問い合わせ結果になる等)場合は、 下記のように宣言します。 String[][] rows = new String[5][4]; 前の5はDBから取得する件数、後ろの4はidなど1レコードから取得するgetString数です。 適当に変更してください。 それを踏まえるとこんな感じ。 int count=0; ResultSet res = st.executeQuery("select * from テーブル名 "); while(res.next() && count<5){ //配列の要素数分5まで rows[count][0]=res.getString("id"); rows[count][1]=res.getString("name");//nameは適当です : rows[count][3]=res.getString("email");//emailは適当です count++; } ただし、配列の要素数に上限があるため、DBから取得する件数に制限をつける、 または最初に"select count(*) from テーブル名 "を行い、件数を取得する、 配列ではなくArrayListを使用するなど、もう一工夫が必要です。
- teketon
- ベストアンサー率65% (141/215)
>getStringで値をとってきてString型に入れてそれをcsvとして表示させたいのですが、どうすればよいですか? getStringで値をとってきてString型に入れて、それをrowsに入れればいいんじゃないですか。 ここまでわかっていて、何故できないのかわかりません。
補足
mysql接続の文を打つとシンボルがないとかで怒られるんですよ public class DynamicCsvServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // POSTメソッドでアクセスが来てもGETメソッドで全部処理します。 doGet(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // CSV出力用データ String[][] rows = { { "0", "ダイナミック", "dynamic@example.com" }, { "1", "ホゲ", "hoge@example.com" }, { "2", "モゲ", "moge@example.com" }, { "3", "マゲ", "mage@example.com" }, { "4", "フゥ", "foo@example.com" }, { "5", "バァ", "bar@example.com" }, { "6", "グゥ", "goo@example.com" } }; // 文字コード設定 resp.setContentType("text/html; charset=UTF-8"); // ファイル名設定(ファイル名を設定しないと、htmlとして画面に表示されてしまいます resp.setHeader("Content-Disposition", "attachment; filename=\"dynamic.csv\""); // CSVデータ作成 StringBuffer sb = new StringBuffer(); for (String[] row : rows) { for (int i = 0; i < row.length; i++) { if (i == 0) { sb.append("\""); } else { sb.append("\",\""); } sb.append(row[i]); if (i == row.length - 1) { sb.append("\"\n"); } } } // レスポンスにCSV出力 PrintWriter w = resp.getWriter(); w.print(sb.toString()); w.flush(); } } string rowの前にClass.forNameとかを打ち id=res.getString("id"); みないな形でString型の変数に入れ、 String row[][]= {id,...} {......}; という形で入れたのですが、ダメでした