初めて、apache.commonsから外部ライブラリをインポートして、検索結果をCSVで出力する、というのにチャレンジしています。
参考サイト1を見ながらやり、テキストをcsvに出力はできたので、ライブラリのインポートと、パスを通すのは成功していると思います。
参考サイトその2を見ながら、MySQLからのデータを検索してCSVに出力することができずに困っています。
Java
1package action; 2 3import java.io.BufferedWriter; 4import java.io.File; 5import java.io.FileNotFoundException; 6import java.io.FileOutputStream; 7import java.io.IOException; 8import java.io.OutputStreamWriter; 9import java.sql.Connection; 10import java.sql.DriverManager; 11import java.sql.PreparedStatement; 12import java.sql.ResultSet; 13import java.sql.SQLException; 14import java.util.ArrayList; 15 16import javax.naming.NamingException; 17import javax.servlet.http.HttpServletRequest; 18import javax.servlet.http.HttpServletResponse; 19 20import org.apache.commons.beanutils.BeanUtils; 21import org.apache.commons.csv.CSVFormat; 22import org.apache.commons.csv.CSVPrinter; 23import org.apache.struts.action.Action; 24import org.apache.struts.action.ActionForm; 25import org.apache.struts.action.ActionForward; 26import org.apache.struts.action.ActionMapping; 27 28import form.UserForm; 29 30public class UserCSVAction extends Action { 31 public 32 ActionForward execute( 33 ActionMapping mapping, 34 ActionForm form, 35 HttpServletRequest request, 36 HttpServletResponse response) 37 38 throws 39 SQLException, 40 NamingException, 41 IllegalAccessException, 42 java.lang.reflect.InvocationTargetException, 43 Exception{ 44 45 request.setCharacterEncoding("UTF-8"); 46 String department =request.getParameter("department"); 47 48 final String JDBC_URL = "jdbc:mysql://localhost:3306/pcm?serverTimezone=JST"; 49 final String DB_USER = "root"; 50 final String DB_PASS = "y21password"; 51 52 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)){ 53 54 String sql 55 = "SELECT user_id, user FROM pcm.users " + 56 "where department=?"; 57 58 PreparedStatement pStmt = conn.prepareStatement(sql); 59 pStmt.setString(1, department); 60 ResultSet rs = pStmt.executeQuery(); 61 62 ArrayList list = new ArrayList<>(); 63 64 while(rs.next()) { 65 UserForm uform = new UserForm(); 66 BeanUtils.setProperty(uform, "userID", rs.getString("user_id")); 67 BeanUtils.setProperty(uform, "user", rs.getString("user")); 68 list.add(uform); 69 } 70 71 // 出力関係 72 try (BufferedWriter bw = new BufferedWriter( 73 new OutputStreamWriter( 74 new FileOutputStream( 75 new File("C:\Users\A2482\Desktop\jikken.csv")), "shift-jis"))) { 76 77 CSVPrinter printer = CSVFormat.EXCEL.print(bw); 78 79 80 for(int i=0;i<list.size();i++) { 81 printer.printRecord((String)list.get(i)+"\r\n"); 82 } 83 84 85 }catch (FileNotFoundException e) { 86 e.printStackTrace(); 87 } catch (IOException e) { 88 e.printStackTrace(); 89 }return null; 90} 91} 92}
デバッグで確認したところ、少なくともlist.add(uform)までは、変数にされていることがわかりました。そのため、そのあとの出力の書き方がいけないのではないかと思うのですが、具体的にどうすればよいかがわからないです。
HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ サーブレットの実行により例外を投げました 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 javax.servlet.ServletException: サーブレットの実行により例外を投げました org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filter.EncodingFileter.doFilter(EncodingFileter.java:30) 根本原因 java.lang.NoClassDefFoundError: org/apache/commons/csv/CSVFormat action.UserCSVAction.execute(UserCSVAction.java:77) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:660) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filter.EncodingFileter.doFilter(EncodingFileter.java:30) 根本原因 java.lang.ClassNotFoundException: org.apache.commons.csv.CSVFormat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) action.UserCSVAction.execute(UserCSVAction.java:77) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:660) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filter.EncodingFileter.doFilter(EncodingFileter.java:30)
commons-csv-1.7.jarは、参照ライブラリに配置しております。
エラーメッセージを見る篝、jarの配置が悪いのかも、とも思っています。
お知恵を拝借願えますでしょうか。
足りない情報がありましたらお申し付けください。
Windows
Microsoft Windows [Version 10.0.17763.737]
Widnows10 Pro version 1809
Eclipse
Version: 2019-09 R (4.13.0)
Build id: 20190917-1200
Tomcat
9.0
Java
C:\Program Files (x86)\Java\jre1.8.0_221
C:\Program Files (x86)\Java\jdk1.5.0
Mysql
mysql Ver 8.0.17 for Win64 on x86_64 (MySQL Community Server - GPL)
mysql-connector-java-8.0.17.jar
Struts
Specification-Version: 1.2.9
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/11 00:42
2019/12/11 04:06 編集
2019/12/11 05:22
2019/12/11 05:40
2019/12/11 07:10
2019/12/12 02:44
2019/12/12 04:21
2019/12/12 05:19
2019/12/12 07:18