〇やりたいこと
javaのactionクラスからSELECT文を実行して、その結果を取得したい。
〇困っていること
SELECTの結果が空で返ってくる。
同様のSQL文をOSqleditで実行すると値が取れます。
(SQL文はコピペをOSqleditに貼り付け、間の空白まで確認しているので、SQL文自体は両方とも会っているはずです)
〇考えて試していること
OSqleditとeclipseで実行の仕方が違うのでは?と考えて、
両社の違いや、実行結果が違う事例を探しているのですが、
なかなか見つかりません。
わかる方よろしくお願いします。
極力コメントにも現状を書いておきました。
※※追記※※
バインドさせずにcreateStatementを使って、SQL文に直接変数を入れれば正常に値は取れました。
ただバインドを使って正常に動かす方法を知りたいです。
よろしくお願いします。
SQL文のあるjavaクラス
java
1package list; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.util.ArrayList; 7import java.util.List; 8 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import org.apache.struts.action.Action; 13import org.apache.struts.action.ActionForm; 14import org.apache.struts.action.ActionForward; 15import org.apache.struts.action.ActionMapping; 16 17import database.DBManager; 18import model.UserActionForm; 19 20public class AttendanceList extends Action { 21 public ActionForward execute 22 (ActionMapping mapping , 23 ActionForm form , 24 HttpServletRequest request , 25 HttpServletResponse response) 26throws Exception{ 27 28 //プルダウンの値を受け取る 29 UserActionForm uaf = (UserActionForm)form; 30 String sectionID = uaf.getSectionID(); 31 System.out.println(sectionID);//Stringの引数が確実に入っていることを確認済み。ここでは"A"。 32 33 try { 34 //受けた値でselectする(JOINする必要あり。大本はm_user。部署IDで絞って、m_userからユーザーネーム、t_timeから勤務時間をとる) 35 String sql = "SELECT M_USER.NAME , T_TIME.STAMP_TIME " 36 + "FROM M_USER " 37 + "INNER JOIN T_TIME " 38 + "ON M_USER.USER_ID = T_TIME.USER_ID " 39 + "WHERE M_USER.SECTION_ID = ?"; 40 Connection conn = DBManager.getConnection(); 41 PreparedStatement smt = conn.prepareStatement(sql); 42 smt.setString(1, sectionID); 43 System.out.println(sql);//ここで表示されるSQL文を基にOSqleditも実行して今うが、2件のデータをとることができています。 44 ResultSet rs = smt.executeQuery(); 45 46 //結果をlistに格納する 47 List<UserActionForm> list = new ArrayList<UserActionForm>(); 48 while(rs.next()) { //rs.next()の結果がfalseになるので、while文の中には入らないです。 49 System.out.println("pass"); 50 UserActionForm uaf2 = new UserActionForm(); 51 uaf2.setName(rs.getString("NAME")); 52 uaf2.setTime(rs.getTimestamp("STAMP_TIME")); 53 list.add(uaf2); 54 System.out.println(rs.getString("NAME")); 55 } 56 57 //listを画面へ返す。 58 request.setAttribute("list" , list);//遷移先でlistの中身を確認すると[]になっています。またlist.size()は0です。 59 return (mapping.findForward("toMonthList")); 60 61 }catch(Exception e) { 62 System.out.println(e); 63 return (mapping.findForward("error")); 64 } 65} 66} 67
M_USERテーブル
(実際はもっとカラム数もありますが、今回関係するところだけ抜き出しています。)
USER_ID | SECTION_ID | NAME |
---|---|---|
1 | A | name |
2 | A | 田中 |
3 | A | mata |
4 | A | name |
T_TIMEテーブル
USER_ID | STAMP_TIME |
---|---|
1 | 2020-10-19 00:00:00 |
1 | 2020-10-19 00:00:00 |
OSqleditでjavaと同様のSQLを実行すると以下の結果を取れます。
NAME | STAMP_TIME |
---|---|
name | 2020-10-19 00:00:00 |
name | 2020-10-19 00:00:00 |
2件の結果を取得できます。
アドバイスをお願いします。
回答1件
あなたの回答
tips
プレビュー