• 締切済み

配列の登録で困っています。

データベースから、サーブレットで"Data Access Object"を使い、一つの商品に登録している複数の色とサイズを取り出すところまでできたのですが、formbeanへの配列のセットの仕方が分かりません。お願い致します。 <formbean(名前:Product)> private String[] size; private String[] color_name; public String getSize() { return size; } public void setSize(String[] size) { this.size = size; } public String[] getColor_name() { return color_name; } public void setColor_name(String[] colorName) { color_name = colorName; } <サーブレット>(下記の""のところは、列名) private Product getProduct(ResultSet rs) throws SQLException { Product pro = new Product(); pro.setGoods_info_id(rs.getInt("goods_info_id")); ここからの2行がエラーです。     //pro.setSize(rs.getString("size")); //pro.setColor_name(rs.getString("color_name")); return pro; }

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

みんなの回答

回答No.1

複数要素を扱う場合、大抵はlist形式にするのではないでしょうか? import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class TKO_1988 { public static void main(String[] args) { Connection con = null; Statement stmt = null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:hogehoge"); stmt = con.createStatement(); String sql = "SELECT * FROM HOGEHOGE"; ResultSet rs = stmt.executeQuery(sql); List<Product> list = getProduct(rs); for ( Product prod : list ){ System.out.println(prod.getColor_name()); System.out.println(prod.getSize()); System.out.println(prod.getSize()); } } catch (Exception e){ e.printStackTrace(); } finally{ try{ stmt.close(); con.close(); } catch (SQLException e){ e.printStackTrace(); } } } private static List<Product> getProduct(ResultSet rs) throws SQLException { List<Product> list = new ArrayList<Product>(); while(rs.next()){ Product pro = new Product(); pro.setGoods_info_id(rs.getInt("goods_info_id")); pro.setSize(rs.getString("size")); pro.setColor_name(rs.getString("color_name")); list.add(pro); } return list; } } class Product{ private String size; private String color_name; private int goods_info_id; public int getGoods_info_id() { return goods_info_id; } public void setGoods_info_id(int goods_info_id) { this.goods_info_id = goods_info_id; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String getColor_name() { return color_name; } public void setColor_name(String color_name) { this.color_name = color_name; } } あくまでも一例です、動作確認もしていません。

関連するQ&A

  • Resultsetについて困っています。

    Struts DBからデータを取得し、名称をコンボボックスに設定しようとしています。具体的には、一つの商品に登録してあるサイズと色をコンボボックスで表示しようとしています。 取得した値をbeanにセットしようとしているのですが、取得する値が複数ある項目が、複数ある場合について質問させて頂いております。 下記のように”SELECTDETAIL”でDBから1行 の項目の値を取得しています。列項目は"ID"と"NAME"です。 この先、"SIZE"と"color"の値をbeanにセットしようとしているます。"SELECTDETAIL"で取得するのは1行で、サイズと色は複数行なのでこの二つは"public List<Product>・・・"でbeanにセットしようと思っています。しかし、サイズと色の取得する行数は異なるので、それぞれ"public List<Product>・・・"を作った方がいいのでしょうか?お願い致します。 ---ProductはActionFormです--- private static final String SELECTDETAIL = "select * from goods_info where ID=?"; public Product getProduct(int ID) throws Exception{ Connection con = source.getConnection(); PreparedStatement pStmt = null; ResultSet rs = null; try{ pStmt = con.prepareStatement(SELECTDETAIL); pStmt.setInt(1,ID); rs = pStmt.executeQuery(); if(rs.next()){ return getProduct(rs); } }catch(SQLException ex){ throw ex; }finally{ if(rs != null){ rs.close(); } pStmt.close(); con.close(); } return null; } ---ActionFormにセット--- private Product getProduct(ResultSet rs) throws SQLException { Product pro = new Product(); pro.setGoods_info_id(rs.getInt("ID")); pro.setGoods_name(rs.getString("NAME")); return pro; }

  • webアプリを作ってます。jspのfor文内でエラーが出てます。

    webアプリを作ってます。jspのfor文内でエラーが出てます。 原因が分かりませんでした。 どこが間違ってるか教えてください。 <%@ page contentType="text/html; charset=Windows-31J" %> <head> <html> <title>検索完了画面</title> </head> <body> <jsp:useBean id="KensakuBeans" class="info.searchman.kensakuBeans" scope="session" /> <h1>検索結果</h1> <h2></h2> <form method="GET" action="KensakuServlet"> <% for (int i=0; i<KensakuBeans.getCountOfResults(); i++) { %> <%= KensakuBeans.getResult(i) %> <br> <% } %> <br> 検索結果は以上です。 <br><br> <input type="submit" value="送信"> <input type="reset" value="取消"> </from> </body> </html> package info.searchman; import java.io.*; import java.sql.*; //import java.util.*; public class kensakuBeans implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String Id; private String name; private String older; private String taiju; private String shintyo; private String other; //Constructor public void KensakuBeans() { System.out.println("sitb constructor"); } public void setName(String name) { this.name = name; System.out.println("dkb setter" +name); } // Getting 省略 //execute kensaku public void kensaku() { try { //JDBC Driver Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql:postgres","postgres","gokui"); Statement stmt = con.createStatement(); String table = "test"; String kensakusql = "select * from "+table+" where name =\'"+name+"\'"; System.out.println(kensakusql); System.out.println("dkb8"); // SQL ステートメントの発行 ResultSet rs = stmt.executeQuery(kensakusql); // 結果をプロパティに設定する if (rs.next()) { Id = rs.getString("Id"); name = rs.getString("name"); older = rs.getString("older"); taiju = rs.getString("taiju"); shintyo = rs.getString("shintyo"); other = rs.getString("other"); } else { 省略

    • ベストアンサー
    • Java
  • 戻り値を配列で受け取りたいのですが...

    とても初歩的な質問をしてしまっていたらごめんなさい。 戻り値を配列で受け取りたいのですが、上手く出来ず困っています。 ヒント・アドバイス等いただけないでしょうか? このようなプログラム(一部省略)を作成したところ、無事に動作確認ができました。  public String test(){    String a = null;    while(rs.next()){      a = rs.getString("b");    }   return a;  }  //受け取り側  String a = test(); ですが、aを複数取得したいと思い、プログラムを下記のように変更するとエラーが出てしまうのです。  public String[] test(){    String[] a = null;    while(rs.next()){      a = rs.getString("b");    }   return a;  }  //受け取り側  String[] a = test(); このように変更すると、 a = rs.getString("b");の部分と String[] a = test();の部分で java.lang.NullPointerExceptionというエラーが出て動きません。 NullPointerExceptionということは、aに値がないと言われているのかな? とも思ったのですが、aには必ず値が入っています。 このような配列のやり取りはできないのでしょうか? もしくは、書き方がおかしいのでしょうか?

    • ベストアンサー
    • Java
  • SQLの実行がされない

    WINXP PRO  TOMCAT4.1.24 j2sdk1.4.1_06 です。 DBはMySqlを使って 以下のコードで接続し、 現在より後の日付のもの出力したいので SELECT * FROM kaigi_reservation WHERE utildate >= sysdate() ORDER BY reserveid ASC というSQLにしましたが、これが全く機能しません。 (抽出されずにそのまま全行出力される) MySql上で直接出力するとほしい結果が得られるのですが。 要領をえなくて申し訳ないのですが 良いアドバイスありましたらお願いします。 ResourceBundle bundle = ResourceBundle.getBundle("../mysqlresource"); String url = bundle.getString("URL"); String driver = bundle.getString("Driver"); Class.forName(driver); Connection dbconnect = DriverManager.getConnection(url); Statement stmt = dbconnect.createStatement(); String query = "SELECT * FROM kaigi_reservation WHERE utildate >= sysdate() ORDER BY reserveid ASC "; ResultSet rs = stmt.executeQuery(query); while(rs.next()){ ReserveInfo info = new ReserveInfo(); info.reserveId = rs.getInt("reserveid"); info.utilDate = rs.getString("utildate"); info.beginTime = rs.getString("beginingtime"); info.endTime = rs.getString("endingtime"); info.conference = rs.getString("conference"); info.name = rs.getString("name"); info.object = rs.getString("object"); result.add(info); } rs.close(); stmt.close(); dbconnect.close();

    • ベストアンサー
    • Java
  • JSPでDBからデータ読み込みブラウザーで10件ずつ表示させたい。

    JSPでDBからデータを表示させる事ができました、これをブラウザーで10件ずつ表示させ、次へ→、←戻る又はページ数表示で移動させたいのですが、PHPとかでは あったのですがJAVA初心者にはわかりません。 誰か教えてください、お願いします。 <%@page import="java.sql.*,MyDatabase.MyDBAccess" contentType="text/html;charset=Shift_JIS"%> <% String sel=request.getParameter("sel"); sel=new String(sel.getBytes("8859_1"),"Shift_JIS");//selectしたカテゴリーname MyDBAccess db =new MyDBAccess(); db.open(); //String str; //str=sel; ResultSet rs = db.getResultSet("select * from "+sel+""); String tableHTML ="<table border=1>"; tableHTML +="<tr bgcolor=\"#ff9933\">" +"<td><font color=\"white\">商品ID</font></td>" +"<td><font color=\"white\">画像</font></td>" +"<td><font color=\"white\">商品名</font></td>" +"<td><font color=\"white\">数量</font></td>" +"<td><font color=\"white\">タイトル</font></td>" +"<td><font color=\"white\">価格</font></td>" +"<td><font color=\"white\">説明</font></td>"; int n=0; while(rs.next()){ //int id=rs.getInt("id"); String id=rs.getString("id"); String name=rs.getString("name"); String sum=rs.getString("sum"); String price=rs.getString("price"); String title=rs.getString("title"); String detail=rs.getString("detail"); String ima=rs.getString("imagelink"); //ima=new String(ima.getBytes("8859_1"),"Shift_JIS"); String imag=("../image/"+ima); tableHTML +="<tr><td align=\"right\">"+id+"</td>" +"<td><img src="+imag+" whdth=\"120\" height=\"60\"></td>" +"<td>"+name+"</td>" +"<td>"+sum+"</td>" +"<td>"+title+"</td>" +"<td>"+price+"</td>" +"<td>"+detail+"</td></tr>"; n++; } tableHTML +="</table>"; db.close(); %> <html> <head> <title>商品在庫情報</title> </head> <body> <h1><%= sel %>の在庫一覧</h1> <%=tableHTML %> </body> </html>

  • webアプリを作ってます。 A result was returned

    webアプリを作ってます。 A result was returned web アプリを作ってます。 A result was returned when none エラー が出て原因がわかりませんでした。 どこがおかしいのか教えてください。 package info.searchman; import java.io.*; import java.sql.*; //import java.util.*; public class KensakuBeans implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String Id; private String name; private String older; private String taiju; private String shintyo; private String other; private String[] results; //Constructor public void Kensaku2Beans() { System.out.println("sitb constructor"); } public void setName(String name) { this.name = name; System.out.println("dkb setter" +name); } // Getting Methods public String getId() { return this.Id; } public String getName() { return this.name; } public String getOld() { return this.older; } public String getTaiju() { return this.taiju; } public String getShintyo() { return this.shintyo; } public String getOther() { return this.other; } public int getCountOfResults() { System.out.println("ucb10"); if (results==null) return 0; else System.out.println("ucb10 else"); return results.length; } public String getResult(int index) { System.out.println("ucb11"); return results[index]; } //execute kensaku public void kensaku() { try { System.out.println("++++" +name); System.out.println("dkb7 insert"); //JDBC Driver Class.forName("org.postgresql.Driver"); System.out.println("dkb7 kensaku2"); Connection con = DriverManager.getConnection("jdbc:postgresql:postgres","postgres","gokui"); Statement stmt = con.createStatement(); System.out.println("dkb7 kensaku3"); String table = "test"; System.out.println(table); System.out.println("dkb7 kensaku4"); System.out.println(name); System.out.println("dkb7 kensaku5"); その2に続く http://okwave.jp/qa/q5933123.html

  • ユーザ管理システムについて・・・

    現在、登録したユーザアカウントのIDとパスワードを利用してログイン出来るシステムを作成しようとしています。 おそらく「JSP」と「ControllerServlet.java」部分は問題ないと思うのですが「ModelBean.java」に何か問題はあるのでしょうか? <ModelBean.java>は // パッケージの宣言 package myPackage; import java.sql.*; public class ModelBean implements java.io.Serializable{ // privateなプロパティの宣言 private String id; private String pass; private String name; private String aflg; private String process; private String processMessage; private Connection con; private Statement stmt; private String url = "jdbc:mysql://localhost/shopping_db?useUnicode=true&characterEncoding=Shift_JIS"; private String user = "root"; private String password = "123"; private String query = ""; // JavaBeansのコンストラクタの宣言 public ModelBean(){id=""; pass=""; name=""; aflg=""; process="0";} // IDを取得する処理 public String getId(){ return id; } // パスワードを取得する処理 public String getPass(){ return pass; } //名前を取得する処理 public String getName(){ return name; } //アクセス権限を取得する処理 public String getAflg(){ return aflg; } // 処理内容を取得する処理 public String getProcess(){ if (process.equals("2")){ processMessage = "データを登録しました";} else if(process.equals("3")){ processMessage = "下記データを更新しました";} else if(process.equals("4")){ processMessage = "下記データを削除しました";} else if(process.equals("1")){ processMessage = "ユーザーの一覧を表示しました";} else { processMessage = "データ表示画面";}//初期画面 System.out.println("process="+process); System.out.println("processMessage="+processMessage); return processMessage; } public void setProcess(String getProcess){ this.process = getProcess; } // DB接続処理 private void jdbcOpen(){ try{ // JDBCドライバをロードする Class.forName("org.gjt.mm.mysql.Driver"); // DB接続(ODBCデータソースの指定) System.out.println("url="+url); System.out.println("user="+user); System.out.println("password="+password); con = DriverManager.getConnection(url,user,password); stmt = con.createStatement(); } catch (Exception ex) { ex.printStackTrace ();} } // DBクローズ処理 private void jdbcClose(){ try{ stmt.close(); con.close(); } catch (Exception ex) { ex.printStackTrace ();} } // データ読み取り処理 public void selectDatas(String getId) { this.id=getId; jdbcOpen(); try{ // SQL文生成 query = "SELECT * FROM loginuser WHERE id="+id; System.out.println("select query"+query); // 実行 ResultSet rs = stmt.executeQuery(query); // 結果取得 rs.next(); id = rs.getString("id"); pass = rs.getString("pass"); name = rs.getString("name"); aflg = rs.getString("aflg"); rs.close(); } catch (Exception ex) { ex.printStackTrace ();} jdbcClose(); } //新規データ追加処理 public void addDatas(String getId, String getPass, String getName, String getAflg){ this.id=getId; this.pass=getPass; this.name=getName; this.aflg=getAflg; jdbcOpen(); try{ //------------------- // 登録処理 //------------------- // SQL文生成(登録) query = "INSERT INTO loginuser (id, pass, name, aflg) VALUES("+id+", '"+pass+"', '"+name+"', '"+aflg+"') "; // 実行 int flgUpdated = stmt.executeUpdate(query); } catch (Exception ex) { ex.printStackTrace ();} jdbcClose(); } 登録実行部分のプログラムのどこを変えたら動くようになるでしょうか?よろしくお願いします。

  • List配列の検索

    インスタンス化されているJavaBeanがArrayListに数百~数千入っています。その配列から特定のJavaBeanのメンバーの内容が一致しているオブジェクトだけ取り出したいです。イテレーターを使って1個1個取り出してチェックして・・・というプログラムをゴリゴリ書いても良いのですが、SQLみたいに一致した条件のオブジェクトをまとめて取得するなんて事はできないのでしょうか? --- Goods.java --- import java.io.*; public class Goods implements Serializable{ private String name; private double price; private int stock; public Goods(){ } public Goods( String name, double price, int stock ){ this.name = name; this.price = price; this.stock = stock; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getStock() { return stock; } public void setStock(int stock) { this.stock = stock; } } というBeanがあり、仮に下記ロジックでaddし検索 --- mainlogic --- ArrayList<Goods> goodsList = new ArrayList<Goods>(); goodsList.add( new Goods("ABC",123,10) ); goodsList.add( new Goods("DEF",456, 0) ); // ←該当オブジェクト goodsList.add( new Goods("GHI",789,15) ); goodsList.add( new Goods("JKL",987, 0) ); // ←該当オブジェクト ・・・ // ここでgoodsListに入っているGoodsオブジェクトのメンバーstock(在庫数)が0のGoodsオブジェクトを取得したい ・・・ という感じなのですが、SQLなら"SELECT * FROM goodsList WHERE Goods.stock = 0"で簡単に抽出できるのですが、このような事ってできないですよね? やはり、イテレーターで全件検索か、一旦、オブジェクトをDBに書き出して取り出すという事しかできないですよね? 他に何か良い方法などありましたら、ご教授お願い致します。

  • JSPでのArrayListの表示について困っています

    以下のようにしてスレッドNoが同じものだけ表示したいと考えております。 servletの「text」という変数にはすべての値が格納されているところまでは確認できました。 それをJSPにて表示したいのですが、どのようにすれば出力されるのかわかりません。 どなたかお教えいただければと思います。 宜しく御願い致します。 --------------------------------------------------------- java /** * *TEXTテーブルからスレッドNoが同じものを返すメソッド * * */ public ArrayList selecttext(int no)throws SQLException{ ArrayList<Textbeen> list = new ArrayList<Textbeen>(); TextDAO kei =new TextDAO(); Connection db=kei.createConnection(); Statement sttSql=db.createStatement(); ResultSet rs=sttSql.executeQuery("SELECT * FROM TEXT WHERE KB_TH_NO='"+no+"' "); while(rs.next()){ String name=rs.getString("KB_NAME"); String tino =rs.getString("KB_TITLE_NO"); String title = rs.getString("KB_TITLE"); String mail = rs.getString("KB_MAIL"); String text = rs.getString("KB_TEXT"); String pass = rs.getString("KB_TITLE_PASS"); String date = rs.getString("KB_TIME"); int th_no = rs.getInt("KB_TH_NO"); Textbeen thread = new Textbeen(name, title, tino, mail, text, pass, date, th_no); //TO(Threadオブジェクト)を、保持するリストに追加 list.add(thread); } kei.closeConnection(db); return list; } ---------------------------------------------------------- servlet ArrayList text = new ArrayList(); try{ text = list.selecttext(TH_no); } catch(Exception e){ e.getStackTrace(); } request.setAttribute("test", text); String nextPage = "/view/user/ThreadTop.jsp"; ----------------------------------------------------------

  • JavaBeansにDBの値を格納

    JavaBeansにDBの値を格納したいのですがやり方がよくわかりません。 どなたかわかる方教えていただけないでしょうか? ちなみにこんなやり方でやってみました。 DAOは int i = 0; while(rs.next()){    jb.setId(i,rs.getString("syouhinid"));    i++; } JavaBeansは private String[] id = null; public void setId(int i, String val){ this.id[i] = val; } public String getId(int i){ return id[i]; } こんな感じです。 部分的ですがこんな感じです。 ソースコードを全部乗せると長くなるので、全部乗せられませんが、 いまいちJavaBeansにDBの値を格納するやり方がわからないので 皆さん色々教えてください。宜しく御願い致します。

専門家に質問してみよう