質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

1300閲覧

[JSP]SQL文の条件分岐を1つのJSPで表示させる/テーブル結合の解除ができない

syu2048

総合スコア22

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2022/02/28 08:11

前提

現在、社員情報のデータベース( t_社員マスタ)を元に、所属する部署ごとに社員情報のテーブルを表示させるプログラムを作成しています。
最初は社員全員の情報が表示されていますが、テーブルの上部に載せたリンク先(部署名)をクリックすると選択した部署に所属する社員のみが抽出されテーブルに表示されるようにするのが目的です。

該当のソースコード

JSP

1<!-- リース情報・データ表示 --> 2 3<%@ page contentType="text/html; charset=Shift_JIS" %> 4<%@ page import = "java.sql.*" %> 5<%@ page import = "java.util.*" %> 6<%@ page import = "java.io.*" %> 7<%@ page import = "java.text.*" %> 8<%@ include file="../../DB/PostDBConnect_test.jsp" %> 9<%@ include file="../../DB/FCN.jsp" %> 10 11<html> 12<head> 13<title>部署別社員一覧表</title> 14<style type="text/css"> 15 .Header { font-size:11pt; 16 background-color: CCCCCC; 17 font-family:MSPゴシック; 18 text-align:center; } 19 .Content1 { font-size:10pt; 20 text-align: center; 21 font-family:MSP明朝; } 22 .Content2 { font-size:10pt; 23 text-align: left; 24 font-family:MSP明朝; } 25</style> 26<style type="text/css" media="screen"> 27 div.scroll_div { overflow: auto; } 28</style> 29 30</head> 31<script type="text/javascript" src="../../DB/fixed_midashi.js"></script> 32<script language="JavaScript"> 33<!-- 34 function Manu() { 35 window.open("./manu.pdf","manu","toolbar=0"); 36 } 37//--> 38</script> 39<body onLoad="FixedMidashi.create();"> 40 41<basefont size=3 color="black"> 42 43<% 44 String Honbuid = request.getParameter("HONBUID"); 45 if (Honbuid == null) { 46 Honbuid = "1"; 47 } 48 49 //DB接続 50 Connection con = DriverManager.getConnection(url, user, password); 51 Statement stmt = con.createStatement(); 52 ResultSet rs; 53 String sSql = ""; 54 55 //表示項目設定SQL 56 57 sSql = "SELECT "; 58 sSql += "TM.社員番号,"; 59 sSql += "TM.氏名,"; 60 sSql += "TM.所属,"; 61 sSql += "TM.支社,"; 62 sSql += "TM.所属コード,"; 63 sSql += "TM.支社コード,"; 64 sSql += "TM.経歴,"; 65 sSql += "SH.所属,"; 66 sSql += "SH.支社,"; 67 sSql += "SH.支店名,"; 68 sSql += "SH.部名,"; 69 sSql += "SH.課名,"; 70 sSql += "TS.氏名,"; 71 sSql += "TS.技術士,"; 72 sSql += "TS.技術士補,"; 73 sSql += "TS.RCCM,"; 74 sSql += "TS.地質調査技士,"; 75 sSql += "TK.氏名,"; 76 sSql += "TK.技術士会,"; 77 sSql += "TK.建コン協会,"; 78 sSql += "TK.地盤工学会,"; 79 sSql += "TK.土質地質技術者生涯ネット,"; 80 sSql += "TK.その他,"; 81 sSql += "TP.氏名,"; 82 sSql += "TP.H30,"; 83 sSql += "TP.R01,"; 84 sSql += "TP.R02,"; 85 sSql += "TP.R03,"; 86 sSql += "TP.計4年,"; 87 sSql += "TB.氏名,"; 88 sSql += "TB.備考"; 89 sSql += " FROM t_社員マスタ AS TM"; 90 sSql += " INNER JOIN t_所属名称 AS SH"; 91 sSql += " ON TM.所属 = SH.所属"; 92 sSql += " INNER JOIN t_CPDポイント AS TP"; 93 sSql += " ON TM.氏名 = TP.氏名"; 94 sSql += " LEFT OUTER JOIN t_資格所持者 AS TS"; 95 sSql += " ON TM.氏名 = TS.氏名"; 96 sSql += " LEFT OUTER JOIN t_協会加入者 AS TK"; 97 sSql += " ON TM.氏名 = TK.氏名"; 98 sSql += " LEFT OUTER JOIN t_備考 AS TB"; 99 sSql += " ON TM.氏名 = TB.氏名"; 100 sSql += " WHERE TM.支社 != '社外'"; 101 sSql += " ORDER BY TM.所属コード ASC, TM.経歴 DESC, TM.社員番号 ASC"; 102%> 103 104 <table align="center" cellpadding=3 cellspacing=0 width="1000"> 105 <tr><td> 106 107 <h3>●部署別社員一覧表</h3> 108 </td></tr> 109 110 <tr><td> 111 <table width="1000" cellpadding=2 bgcolor="brown" cellspacing=1 align="left"> 112 <tr> 113 <td width="20%" align="center" bgcolor="red"><font color="white"><b>全社員</font></b></td> 114 <td width="20%" align="center" bgcolor="white"><a href="../display/display_CPD_1.jsp">本社</a></td> 115 <td width="20%" align="center" bgcolor="white"><a href="../display/display_CPD_2.jsp">北日本事業本部</a></td> 116 <td width="20%" align="center" bgcolor="white"><a href="../display/display_CPD_3.jsp">東日本事業本部</a></td> 117 <td width="20%" align="center" bgcolor="white"><a href="../display/display_CPD_4.jsp">西日本事業本部</a></td> 118 </tr> 119 </table> 120 </td></tr> 121 122 <tr><td> 123 <div class="scroll_div" height=px"1000"> 124<!-- <table border-collapse border cellpadding=2 cellspacing=0 border width=1000> --> 125 <table _fixedhead="rows:1; cols:5;" cellpadding=2 cellspacing=0 border width="1000"> 126 127 <tr> 128 <th width="100" class="Header" nowrap rowspan="1" >社員番号</th> 129 <th width="100" class="Header" nowrap rowspan="1" >氏名</th> 130 <th width="200" class="Header" nowrap rowspan="1" >本部名</th> 131 <th width="200" class="Header" nowrap rowspan="1" >支社名</th> 132 <th width="200" class="Header" nowrap rowspan="1" >部名</th> 133 <th width="200" class="Header" nowrap rowspan="1" >課名</th> 134 </tr> 135 136 <% 137 String sSyain = ""; 138 String sName = ""; 139 String sShishamei = ""; 140 String sShitenmei = ""; 141 String sBumei = ""; 142 String sKamei = ""; 143 144 rs = stmt.executeQuery(sSql); 145 146 while (rs.next()) { 147 148 sSyain = rs.getString("社員番号"); 149 sName = rs.getString("氏名"); 150 sShishamei = rs.getString("支社"); 151 sShitenmei = rs.getString("支店名"); 152 sBumei = rs.getString("部名"); 153 sKamei = rs.getString("課名"); 154 155 out.println("<tr>"); 156 out.println("<td class=\"Content1\">" + sSyain + "</td>"); 157 out.println("<td class=\"Content1\">" + sName + "</td>"); 158 out.println("<td class=\"Content1\">" + sShishamei + "</td>"); 159 out.println("<td class=\"Content1\">" + sShitenmei + "</td>"); 160 out.println("<td class=\"Content1\">" + sBumei + "</td>"); 161 out.println("<td class=\"Content1\">" + sKamei + "</td>"); 162 out.println("</tr>"); 163 164 } 165 rs.close(); 166 167 stmt.close(); 168 con.close(); 169 %> 170 171</td></tr> 172</table> 173<br> 174</form> 175 176</body> 177</html> 178 179

実現したいこと

上記のコードでは、部署ごとにSQL文のWHERE句を変更したJSPファイルを1つずつ作成し、リンクするようにしていましたが、今後、部署が増減する可能性があります。そこで、「TM.支社」を条件分岐させて、ひとつのJSPファイルのみで扱えるようにしたいです。

発生している問題・試したこと

このコードは元々、所持している資格や所属している協会も表示させるため、 「t_資格所持者」や「 t_協会加入者」といった複数のテーブルを結合させており、今回は不要なのでテーブルの結合を解除したいのですが、以下のようにSQL文を変更したところ、

SQL

1 sSql = "SELECT "; 2 sSql += "TM.社員番号,"; 3 sSql += "TM.氏名,"; 4 sSql += "TM.所属,"; 5 sSql += "TM.支社,"; 6 sSql += "TM.所属コード,"; 7 sSql += "TM.支社コード,"; 8 sSql += "TM.経歴,"; 9 sSql += "SH.所属,"; 10 sSql += "SH.支社,"; 11 sSql += "SH.支店名,"; 12 sSql += "SH.部名,"; 13 sSql += "SH.課名,"; 14 sSql += " FROM t_社員マスタ AS TM"; 15 sSql += " INNER JOIN t_所属名称 AS SH"; 16 sSql += " ON TM.所属 = SH.所属"; 17 sSql += " WHERE TM.支社 != '社外'"; 18 sSql += " ORDER BY TM.所属コード ASC, TM.経歴 DESC, TM.社員番号 ASC";

結果、以下のような構文エラーが発生してしましました。

例外 org.apache.jasper.JasperException: Exception in JSP: /CPD/display/display_CPD_01.jsp:198 195: String sBumei = ""; 196: String sKamei = ""; 197: 198: rs = stmt.executeQuery(sSql); 199: 200: while (rs.next()) { 201: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:489) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
原因 javax.servlet.ServletException: ERROR: "FROM"またはその近辺で構文エラー ポジション: 90 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774) org.apache.jsp.CPD.display.display_005fCPD_005f01_jsp._jspService(display_005fCPD_005f01_jsp.java:831) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:853) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
原因 org.postgresql.util.PSQLException: ERROR: "FROM"またはその近辺で構文エラー ポジション: 90 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254) org.apache.jsp.CPD.display.display_005fCPD_005f01_jsp._jspService(display_005fCPD_005f01_jsp.java:791) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:853) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259) javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

2つの問題となってしまい申し訳ありませんが、
不要なコードや追記が必要な部分など、
良いアイデアがありましたら、ご教示いただきますよう、何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原因

javax.servlet.ServletException: ERROR: "FROM"またはその近辺で構文エラー
ポジション: 90

SQLでは SELECT文で FROM の前に , があるからエラーになります。

SQL

1SELECT 2... 3SH.課名, 4 FROM t_社員マスタ AS TM 5...

投稿2022/03/01 14:56

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syu2048

2022/03/02 02:20

回答ありがとうございます。 ご指摘の通り、SQL文でFROM直前の「,」を削除したことでエラーメッセージは無くなりました。 残りの条件分岐についてですが、他の方に相談して、解決したのでここで質問を閉じさせていただきます。 こちらをベストアンサーとさせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問