JSPでデータベースのテーブルをCSVファイルに出力する方法

このQ&Aのポイント
  • JSPを使用してデータベースのテーブルの内容をCSVファイルに出力するプログラムを教えてください。
  • delete文でデータを削除するプログラムは書けたが、データをCSVファイルに出力する方法が分からない。
  • データベースのテーブルの内容をCSVファイルに出力するためには、SELECT文を使用してテーブルのデータを取得し、その結果をCSVファイルに書き込む必要がある。
回答を見る
  • ベストアンサー

jspのプログラムについて

jspファイルで データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。 delete文で中身を消すプログラムは書けたのですが、これはできません。 conn = null; st=null; conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8"); st=conn.createStatement(); StringBuffer buf = new StringBuffer(); buf.append("delete from where id="+id); st.executeUpdate(buf.toString()); これで削除はできました。 なのでbuf.appendの中身を buf.append("SELECT from テーブル名 INTO OUTFILE "c:/data" "); これに書き換えればできると思ったのですができません。 よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 buf.append("SELECT * from テーブル名 INTO OUTFILE \"c:/data\""); こうではないですか? "文字列"の中で「"」を使うのであればエスケープが必要です。

reimaru9
質問者

補足

次はこのようなエラーが出たのですが... org.apache.jasper.JasperException: An exception occurred processing JSP page /CSV.jsp at line 24 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("SELECT * anpisystem INTO OUTFILE \"data.csv\" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: } 27: よろしくお願いします。

その他の回答 (3)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

> org.apache.jasper.JasperException: An exception occurred processing JSP page /CSV.jsp at line 24 これはJSPでエラーが出ています ってだけ もっと詳しいエラー情報がないと誰も対応できないわよ 最初に私が#1で書いたように stacktraceを書いてね

reimaru9
質問者

補足

そうですね。すいません Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 原因 javax.servlet.ServletException: java.sql.SQLException: Can not issue SELECT via executeUpdate(). org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.CSV_jsp._jspService(CSV_jsp.java:95) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 原因 java.sql.SQLException: Can not issue SELECT via executeUpdate(). com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1803) com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1764) org.apache.jsp.CSV_jsp._jspService(CSV_jsp.java:77) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) よろしくお願いします。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

>buf.append("SELECT from テーブル名 INTO OUTFILE "c:/data" "); →buf.append("SELECT * from テーブル名 INTO OUTFILE "c:/data" "); SELECT の後ろに * が抜けています。

reimaru9
質問者

補足

それ直したのですが、駄目でした。 エラー内容はaskaaska様の補足にあります。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

何かエラーは出ていないの? それを書いた方がいいわよ 出ていないなら catch節で 例外.printStackTrace(new java.io.PrintWriter(out)); をやってみて もしくは st.executeUpdate を st.executeQuery にしてみたら行けたりする? もしかしたら権限がないだけの可能性もあるけど

reimaru9
質問者

補足

このような感じです。 Syntax error, insert ")" to complete MethodInvocation 20: st=conn.createStatement(); 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("select * from anpisystem into outfile "data.csv" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: } JSPファイル: /CSV.jsp の中の23行目でエラーが発生しました Syntax error, insert ";" to complete Statement 20: st=conn.createStatement(); 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("select * from anpisystem into outfile "data.csv" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: } JSPファイル: /CSV.jsp の中の23行目でエラーが発生しました data cannot be resolved 20: st=conn.createStatement(); 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("select * from anpisystem into outfile "data.csv" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: } JSPファイル: /CSV.jsp の中の23行目でエラーが発生しました Syntax error on token "csv", ( expected after this token 20: st=conn.createStatement(); 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("select * from anpisystem into outfile "data.csv" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: }

関連するQ&A

  • jspのプログラムについて

    jspファイルで データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。 delete文で中身を消すプログラムは書けたのですが、これはできません。 conn = null; st=null; conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" + "user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8"); st=conn.createStatement(); StringBuffer buf = new StringBuffer(); buf.append("delete from where id="+id); st.executeUpdate(buf.toString()); これで削除はできました。 なのでbuf.appendの中身を buf.appendbuf.append("select * from テーブル名 INTO OUTFILE \"data.csv\" fields terminated by ',' "); これに書き換えればできると思ったのですができません。 よろしくお願いします。 エラー内容は org.apache.jasper.JasperException: An exception occurred processing JSP page /CSV.jsp at line 24 21: 22: StringBuffer buf = new StringBuffer(); 23: buf.append("select * from anpisystem INTO OUTFILE \"data.csv\" fields terminated by ',' "); 24: st.executeUpdate(buf.toString()); 25: 26: } 27: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 原因 javax.servlet.ServletException: java.sql.SQLException: Can not issue SELECT via executeUpdate(). org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.CSV_jsp._jspService(CSV_jsp.java:94) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 原因 java.sql.SQLException: Can not issue SELECT via executeUpdate(). com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1803) com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1764) org.apache.jsp.CSV_jsp._jspService(CSV_jsp.java:76) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    • ベストアンサー
    • Java
  • jspのプログラムについて

    jspについて質問です。 現在入力されたパスワードとデータベースに保存してあるパスワードを比較して一緒であれば idを削除するというプログラムを組んでいます。 削除することはできないのですが、 比較がうまくいきません。 <% //postされたもの String id = request.getParameter("id"); String password =request.getParameter("password") Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection(urlやpassword、userが書いてある); request.setCharacterEncoding("utf8"); Statement st=conn.createStatement(); Statement stmt=conn.createStatement(); ResultSet res = st.executeQuery("select * from data where id ="+id); while(res.next()){ String pass =res.getString("pass"); //データベースからパスワードを取得 out.println("<td>" + password + "</td>"); out.println("<td>" + pass + "</td>"); if(password==pass){ //入力されたパスワードと比較 //ここにはidを削除する文が書かれている } } st.close(); conn.close(); やっているのですが、if文に入って削除してくれません。 out.printlnはいりませんがちゃんと値があっているか確かめたところ 入力された文字とデータベースに入っている文字がちゃんと表示されました。 教えてください。よろしくお願いします。

  • テーブルにレコードを追加するサーブレット。

    HTML画面からservletに接続してMYSQLにてつくったデータベースのテーブルに レコードを追加するプログラム(servlet)を作っています。テーブルを表示させるservlet(ext_db5_2_1.java)と、テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)をつくってます。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47, tomcat3.3.1 テーブルにレコードを追加するサーブレット(ext_db5_2_2.java)の問題箇所。 // データベースに追加する値を取得 String number = request.getParameter("number"); String name = new String( request.getParameter("name").getBytes("8859_1"), "JISAutoDetect"); String from_pref =new String( request.getParameter("from_pref").getBytes("8859_1"), "JISAutoDetect"); // SQLを実行して、データベースに追加する StringBuffer buf = new StringBuffer(); buf.append("INSERT INTO OOIWA_SEM ("); buf.append("NUMBER, NAME, FROM_PREF) "); buf.append("VALUES ("); buf.append(number); buf.append(",'"); buf.append(name); buf.append("','"); buf.append(from_pref); buf.append("')"); stmt.executeUpdate(buf.toString()); // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd =                          cx.getRequestDispatcher("/netjv/servlet/shuwa.ext_db5_2_1");

  • 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の知識が不十分です。すいません

  • JSPからMysqlへの接続

    タイトルどおり、以下のようなコードでMysqlデータベースに接続しようとしました。 <%@ page contentType="text/html; charset=Shift_JIS" import="java.sql.*" %> <html> <head> <title>データを表示する</title> </head> <body> <% //データベース設定 String sv = "localhost"; //サーバ名 String db = "test"; //データベース名 String user = "feifei"; //ユーザ名 String pass = "feifei"; //パスワード String encode = "EUC_JP"; //文字コード //データベースに接続する Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://" + sv + "/" + db + "?user=" + user + "&password=" + pass + "&useUnicode=true&characterEncoding=" + encode; Connection conn = DriverManager.getConnection(url); //データを取得する Statement st = conn.createStatement(); String sql = "SELECT * FROM table1"; //実行するSQL ResultSet rs = st.executeQuery(sql); //データを全件表示する out.println("<table border=0>"); while(rs.next()){ out.println("<tr>"); out.println("<td>" + rs.getInt("id") + "</td>"); out.println("<td>" + rs.getString("name") + "</td>"); out.println("<td>" + rs.getInt("point") + "</td>"); out.println("</tr>"); } out.println("</table>"); //データベース接続を閉じる conn.close(); %> </body> </html> しかし、なぜかわかりませんが、表示した内容のうち日本語はすべて[?]と文字化けしてしまいます。 ちゃんとディレクティブで「charset=Shift_JIS」と指定しているのになぞです。 どうか教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • Zipファイル解凍処理について

    こんにちわ。 Javaの解凍処理について質問です。 Test.zipがあって、その中身が「テスト.xls」とした時、うまく解凍ができません。 Zipファイルの中身が日本語名ではなく、「Test.xls」であれば正常に解凍ができます。 下記の書き方では日本語名のファイルの入ったZipファイルを解凍することはできないのでしょうか? どなたかご教授お願い致します。 String fname = null; FileInputStream fis = null; BufferedInputStream bis = null; ZipInputStream zis = null; ZipEntry zent = null; FileOutputStream fos = null; try { fis = new FileInputStream(FilePath); bis = new BufferedInputStream(fis); zis = new ZipInputStream(bis); byte[] buf = new byte[1024]; int len; // アーカイブ中に含まれるファイル情報の取得 while ((zent = zis.getNextEntry()) != null) { int intResult = zent.toString().indexOf("."); int intLength = zent.toString().length(); //ファイル名の変更(フォルダ名+社員コード)StringBuffer BuffRename = new StringBuffer(); BuffRename.append("D:\\test\\"); BuffRename.append(zent.getName().substring(0,intResult)); BuffRename.append(SyainCd); BuffRename.append(zent.getName().substring(intResult,intLength)); fname = BuffRename.toString(); //書き込みファイルをオープン fos = new FileOutputStream(fname); while (-1 != (len = zis.read(buf, 0, buf.length))) { fos.write(buf, 0, len); } //★★★ fos.close(); } Catch・finallyは省略

  • MySQLでの集計

    いつもお世話になっております。MySQLを利用しておりまして質問です。 同じ構成のテーブルが5つあり、選択されたテーブルを集計するSQLを作成しています。 カラムを簡単に構成を書くと ID、名前、ステータス1、ステータス2 のような形です。 テーブル1、2、3が選択された場合 テーブル1と2でIDの重複のない一覧を作成し、IDが被っていた場合はステータスをそれぞれ大きいほうを保持するようにします。 そして次にテーブル1、2を合わせたテーブルとテーブル3で同じように集計をしたいのですが、ここがうまく出来ません。 実際の環境ではなく簡素化したものなのでおかしな点があるかもしれませんがこのようになっています。 SELECT TTT1.id,TTT1.名前,TTT1.st1,TTT1.st2 FROM(     SELECT id,名前,ステータス1 as st1,ステータス2 as st2     FROM(        SELECT *        FROM テーブル1 T1        WHERE T1.id NOT IN(SELECT T2.id FROM テーブル2 T2)        UNION All        SELECT *        FROM テーブル2 T2        WHERE T2.id NOT IN(SELECT T1.id FROM テーブル T1)     ) as TT1     UNION     SELECT id,名前,st1,st2     FROM(         SELECT T1.id,T1.名前,         (CASE T1.ステータス1 or T2.ステータス1 WHEN "2" THEN "2" WHEN "1" THEN "1" WHEN "0" THEN "0" ELSE null END) as st1,         (CASE T1.ステータス2 or T2.ステータス2 WHEN "2" THEN "2" WHEN "1" THEN "1" WHEN "0" THEN "0" ELSE null END) as st2,         FROM テーブル1 T1,テーブル2 T2         WHERE T1.id = T2.id AND NOT(T1.st1 IS null AND T1.st2 IS null AND T2.st1 IS null AND T2.st2 IS null) ) as TT2 )as TTT1 /* UNION ALL SELECT id,名前,st1,st2 FROM (TTT1とテーブル3を比較したもの)as TTT2 */ /**/で囲ったところでTTT1が呼び出せれば、テーブル1のところをTTT1にし、テーブル2をテーブル3にすれば出来ると思うのですが、そういうことは無理なのでしょうか? また集計するテーブルの数が不特定なので一つずつ集計をする形を取りましたが、 もっとこういう風にやればいいと言う方法はございますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • jspのエラー

    <%@ page contentType="text/html; charset=UTF-8" import="java.io.*, java.sql.*" %> <% Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); Statement stmt=con.createStatement(); ResultSet result=stmt.executeQuery("select * from table1;"); %> <table> <tr> <th>country</th> <th>city</th> </tr> <% while(result.next()) { %> <tr> <td> <%= result.getString(1) %></td> <td> <%= result.getString(2) %></td> </tr> <% } stmt.close(); con.close(); %> </table> でエラーがでてデータベースに接続できません メッセージは以下の通りです org.apache.jasper.JasperException: Exception in JSP: /gomitable1.jsp:12 11: Class.forName("com.mysql.jdbc.Driver"); 12: Connection con=DriverManager.getConnection("jdbc:mysql://localhost/database1?user=user1&password=password1&useUnicode=true&characterEncoding=UTF-8"); 13: Statement stmt=con.createStatement(); 14: ResultSet result=stmt.executeQuery("select * from table1;"); 15: %> 原因 javax.servlet.ServletException: Error during query: Unexpected Exception: java.io.CharConversionException message given: null このメッセージの意味もわかりません 何が悪いのでしょうか?

    • ベストアンサー
    • Java
  • javaの掲示板について

    今現在パスワードを比較して一致していれば削除としたのですがjava.sql.SQLException: Can not issue data manipulation statements with executeQuery().というエラーがtomcatにでます。 サーブレットはこう書いています //削除 if(deleteMessage != null){ String deleteid = request.getParameter("id"); String deletepassword = request.getParameter("deletepassword"); String rspassword = dao.getPassword(deleteid); if (deletepassword.equals(rspassword)){ dao.deleteMessage(delete); success = "削除しました。"; request.setAttribute("success", success); } else{ errorpass = "パスワードが違います。"; request.setAttribute("errorpass", errorpass); } } 比較用のパスワードをデータベースから取り出すDAOはこうしています。 public int deleteMessage(String strid) throws Exception { Vector messageList = new Vector(); int i = 0; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ conn = this.getConnection(); String sql = "delete from MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, strid); rs = pstmt.executeUpdate(); } finally { this.close(rs); this.close(pstmt); this.close(conn); } return i; } public String getPassword(String id) throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String rspassword = null; try { String deleteid = null; conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE where ID = ? "; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); if(rs.next()){ rspassword = rs.getString("PASSWORD"); } } finally { this.close(rs); this.close(pstmt); this.close(conn); } return rspassword; } データベースからパスワードがとれていないから起きているのだとは思うのですが、どのようにしたらとれるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java