mysqlを使用したプログラムで複数のテーブルのデータを一括出力する方法

このQ&Aのポイント
  • mysqlを使用したプログラムで、複数のテーブルのデータを一括出力する方法について教えてください。
  • 現在、mysqlを使用してWEBからデータを入力し、そのデータを表示するプログラムを作成しています。1つのテーブルでは正常に動作していますが、複数のテーブルがある場合にはエラーが発生します。複数のテーブルに対して一括出力する方法を教えてください。
  • 初心者なので、どうしても解決することができません。助けていただけると幸いです。
回答を見る
  • ベストアンサー

助けてください!!mysql使用しています。

mysqlを使用しています。WEBから必要なデータを入力し、webで表示させるプログラムを作っています。1テーブル1のみ作り、その主キー(例えば学生番号)を入力するとその学生番号に関する学 の名前や住所などテーブルに入力した内容が出力できるプログラムを作りました。しかし、それはテーブル1のときのみ有効で、テーブルが2つ以上あるときはエラーがでてつかえません。 2つ以上テーブルを作り、例えばテーブル2には、その学生番号に対する学生の趣味や特技などが書いてあるとします。そのWEBで入力した学生番号に対する全てのテーブル内容のデータ(名前、住所、趣味、特技など)を一括出力するプログラムはどのようにしたらいいのでしょうか? 初心者な私にどうかご指摘お願いします。 大変困っています。よろしくお願いします。 以下のプログラムはテーブルが1つのときのみ有効なプログラムです。 //WEBで入力するプログラム sb.append("<p>Show the designated row in all the tables<br>\n"); sb.append("<script language=\"JavaScript\"><!--\n"); sb.append("function idButton(){\n"); sb.append("rowNo = document.idInput.inId.value;\n"); sb.append("location.href = \"/abc/retrieve/\"+rowNo;\n"); sb.append("}// --></script>\n"); sb.append("<form name=\"idInput\">\n"); sb.append("Enter Row No.\n"); sb.append("<input type=\"text\" size=\"5\" name=\"inId\">\n"); sb .append("<input type=\"button\" value=\"ok\" onclick=\"idButton()\">\n"); sb.append("</form><br>\n"); ・ ・ ・ @GET @Path("/retrieve") @Produces("text/html") public String retrieve_table(@QueryParam("name") String tablename) { // ▲▲指定されたテーブル名の内容表示 ・ ・ ・ try { // ドライバクラスをロード ・・・ // MySQLへ接続 ・・・ // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql; sql = "SELECT * FROM " + tablename; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); ・ ・ ・

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

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

結合にはJOIN句を使います。 SELECT A.*,B.* FROM テーブル1 A LEFT JOIN テーブル2 B ON A.学生番号=B.学生番号 WHERE A.学生番号=xxx

関連するQ&A

  • StringBuilderをStringに代入

    StringBuilderを使って文字列連結して、それをSQL文(String型)として利用するプログラムを作りました。 ※SQLはループ処理で約10万個ぐらい発行→実行します StringBuilderの文字列を、最終的にString型の変数(strSql)に代入するのですが、 下記のどちらで代入する方がコスト掛からないでしょうか? A案. ---------- StringBuilder sb = new StringBuilder(); sb.append(変数a); sb.append(変数b); sb.append(変数c); String sqlStr = new String(sb); ---------- B案. ---------- StringBuilder sb = new StringBuilder(); sb.append(変数a); sb.append(変数b); sb.append(変数c); String sqlStr = sb.toString(); ---------- 教えてください。

    • ベストアンサー
    • Java
  • サーブレットとMysqlについて

    画面のtextboxからDB(Mysql)にinsertするときの質問です。 皆さんのおかげでinsertすることができました。 しかし、textboxが一個で値も一つなのに、 insertするとDBには2行同じ値がinsertされます。 下記のソースのどこがいけないのでしょうか? ご教示をお願いします。 「ソース」 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_table (name) values (?)"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }catch(Exception e){ } } }

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

    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");

  • サーブレットとMysqlについて

    JSP サーブレット Mysqlについて質問です。 私が今実現させたいことを簡単に説明します。 画面側にはtextboxがあり、このtextboxは追加ボタンによって、 どんどん追加されていきます。 サーブレット側はこのtextboxの全ての値をDBに書き込みたいです。 例えば、textboxが二つなら、一つ目のINSERTでDBのname列にtextbox一個目の値を書き込み、二つ目のINSERTでDBのname列にtextboxニ個目の値を書き込む。 ソースを書いてみたのですが、いろいろと違いがあると思いますので、ご教示をお願いします。 現在は下記ソースを実行してもDBは更新されません・・ もしかしたら、DBの設定がおかしいのでしょうか・・ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] name10 = request.getParameterValues("sonota"); for (int i = 0; i < name10.length; i++) { System.out.println(i + " " + name10[i]); name10[i] = new String(name10[i].getBytes("8859_1"), "UTF-8"); } Connection conn = null; CallableStatement cs = null; PreparedStatement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost/Sample_db"; String dbUser = "root"; String dbPass = "taratara"; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, dbUser, dbPass); String sql= "insert into Sample_db.Sample_table (name) values (name10[i]);"; stmt = conn.prepareStatement(sql); for (String n : name10) { stmt.setString(1, n); stmt.executeUpdate(); } int cnt = stmt.executeUpdate(); stmt.close(); }catch(Exception e){ //exception RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); } } }

    • ベストアンサー
    • Java
  • MYSQLのストアドでの動的SQLについて

    MYSQL初心者ですが、よろしくお願いします。 MYSQL(ver5.5)でストアドプロシージャを作成しようと思います。 WEBの検索画面に入力された条件に応じて、WHERE句を動的に作成したいのです。 例えば、WEBの検索画面の検索条件に、 (1)氏名 (2)住所 (3)電話番号 があり、(1)と(3)に入力された場合は、 あるテーブルの検索条件を WHERE 氏名=入力氏名 AND 電話番号=入力電話番号 のように動的にSQLを作成したいです。 (条件に応じて、静的なSQLを使い分けるやりかたはしたくない) このような動的なSQLはストアドプロシージャで作成できのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

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

    サーブレットを使って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
  • java servletからMySQLに情報を登録したいのです。

    ホームページのフォームに名前と番号の二つの列があってname[1],bango[1]...のようになっています。 それを番号があるものだけをMySQLに登録したいのですがうまくいきません。 以下に試しに作ったservletを書きます。 import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class program2 extends HttpServlet{ private static final String CONTENT_TYPE = "text/html; charset=Shift_JIS"; //private static final String CONTENT_TYPE = "text/html; charset=EUC_JP"; //private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; private String server; private String db; private String user; private String pass; private String url; private Connection con = null; //グローバル変数の初期化 public void init() throws ServletException{ /*変数の初期化*/ server = "localhost"; //MySQLサーバ名またはIPアドレス db = "database"; //データベース名 user = "root"; //MySQLユーザ名 pass = "data"; //MySQLパスワード /* 必要であればオプションの指定 */ url = "jdbc:mysql://" + server + ":3306/" + db + "?useUnicode=true&characterEncoding=Shift_JIS"; //JDBC URL Shift_JIS /*DB初期処理*/ try{ /* JDBCドライバのロード */ Class.forName("com.mysql.jdbc.Driver").newInstance(); /* MySQLサーバ接続 */ con = DriverManager.getConnection(url, user, pass); } catch (SQLException e){ e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } } /*HTTP Get リクエストの処理*/ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //エンコード request.setCharacterEncoding("Shift_JIS"); //FORMからの第一次受け渡し String name = "naoki"; String jikoku = "1200"; //for文の始まり for(int i = 1; name != null; i++){ //if文の始まり if(jikoku != null){ //FORMからの第一次受け渡し name = request.getParameter("name["+ i +"]"); jikoku = request.getParameter("jikoku["+ i +"]"); response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); Statement stmt = null; ResultSet rs = null; try{ /* 検索するSQL文を作成 */ String sql = "INSERT INTO table1 (eki,jikoku) VALUES ('"+name+"','"+jikoku+"') "; /* Statementオブジェクトの生成とクエリの実行 */ stmt = con.createStatement(); stmt.executeUpdate(sql); /* 切断 */ stmt.close(); } catch (SQLException e){ out.println("<h3>登録に失敗しました</h3>"); e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } finally{ /* finallyを使って資源の解放 */ try{ if (stmt != null){ stmt.close(); stmt = null; } } catch (Exception e){ e.printStackTrace(); } } }//if文の終了 }//for文終了 } /*サーブレットインスタンスが破棄されるときに、サーブレットコンテナに最後に1度呼び出される*/ public void destroy(){ /* 切断 */ try{ if (con != null){ con.close(); con = null; } } catch (Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 2つのテーブルからデータを取り出す mysql

    Mysql  2つのテーブルからデータを取りたいです。 テーブル名 aman id : amemberid : bookid : kakaku : sonota : day テーブル名 bman id : bmemberid : bookid :title : day この二つのテーブル amanからkakaku,sonota。bmanからtitleを取り出したいのですが どのようなSQLになるのでしょうか。 bookidは2つのテーブルに同じ数字番号が入るようになっています。 ソース $sql='SELECT * FROM aman WHERE bookid=? JOIN message2 ON aman.bookrid=bman.bookrid'; $stmt=$dbh->prepare($sql); $data[]=$carid; これではだめでした。

    • ベストアンサー
    • MySQL
  • mysql と php で、2テーブル結合の検索!

    mysql と php を勉強しはじめで、解からないので、どなたか教えてください! 2テーブルあります。( 例 ’name’ と ’jusyo’ テーブルです。) ’name’テーブルは、NO int、IC_NO char(5)、NAME char(18)、 ・・・・・です。 ’jusyo’テーブルは、NO int、NAME_KANA char(30)、TEL char(6)、JUSYO char(50)、 ・・・・です。 この2テーブルを、《NO int、》で、左結合(レフトジョイン)させます。 テキスト入力フィールド、があり、検索ボタンで検索させようと思っています。 テキスト入力フィールドには、IC_NO を入力し、’jusyo’テーブルの、NAME_KANA TEL JUSYO・・・ を表示させたいと思っています。 <?php extract($_POST); echo " <form action=\"kensaku2.php\" method=\"post\" > <p>検索番号 : <input type=\"text\" name=\"nam\" value=\"$nam\" size=\"10\">   <input type=\"submit\" value=\"検索\"></p>\n </form> "; if($nam<>''){ mysql_connect('localhost','root','******'); mysql_select_db('データベース名'); $sql= "select * from name left join jusho on NO=NO"; $sql= "select * from name where IC_NO like '%$nam%'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; } else { while($row = mysql_fetch_array($result)){ echo "詳細情報"; echo "<br />\n"; echo "<br />\n"; echo "インター名 : "; echo $row["NAME_KANA"]; echo "     "; echo "<p>";               ↓ としてますが、NAME_KANAが表示されません、どこが間違っていますか? 考え方がおかしいのでしょうか?