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

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

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

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JSP

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

Java

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

SQL

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

Seasar2

Seasar2はJ2EE/Java EEでの大規模な開発を効率良く行なうためのフレームワークです。 必要な設定ファイルを従来のものと比べて少なくし、依存性を分離して記述しています。 そのため、生産性の高いプログラム開発が可能です。

Q&A

解決済

2回答

5994閲覧

SQLServer 結合したテーブルデータの使用

Alice0225

総合スコア206

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JSP

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

Java

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

SQL

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

Seasar2

Seasar2はJ2EE/Java EEでの大規模な開発を効率良く行なうためのフレームワークです。 必要な設定ファイルを従来のものと比べて少なくし、依存性を分離して記述しています。 そのため、生産性の高いプログラム開発が可能です。

0グッド

0クリップ

投稿2016/11/04 05:04

現在、既存のWebアプリ改修を行っています。
改修作業の中に「既存ページで表示しているデータの種類を追加」というものがあるのですが、LEFT JOINにて結合したデータの使用方法がわからず躓いてしまっております。
【環境】
Windows 7
SQLServer 2014
Java 7
Tomcat 7
Eclipse LUNA 4.4.2

SQL

1SELECT 2 kokyaku.dbo.M_KOKYAKU.KOKYAKU_CD kokyakuCd, 3 kokyaku.dbo.M_KOKYAKU.LAST_NAME lastName, 4 kokyaku.dbo.M_KOKYAKU.FIRST_NAME firstName, 5 kokyaku.dbo.M_KOKYAKU.CHU_FLG chuFlg, 6 kokyaku.dbo.M_KOKYAKU.URGENCY_FLG urgencyFlg, 7 MAX(kokyaku.dbo.M_RIREKI.BASE_TIME) baseTime, 8 kokyaku.dbo.M_SEISANSYA.FIRST_NAME seiFirstName, 9 kokyaku.dbo.M_SEISANSYA.LAST_NAME seiLastName, 10 kokyaku.dbo.M_GYOUSYA.FIRST_NAME gyoFirstName, 11 kokyaku.dbo.M_GYOUSYA.LAST_NAME gyoLastName 12FROM 13 kokyaku.dbo.M_KOKYAKU 14 LEFT JOIN kokyaku.dbo.M_RIREKI ON kokyaku.dbo.M_KOKYAKU.KOKYAKU_CD = kokyaku.dbo.M_RIREKI.KOKYAKU_CD 15 LEFT JOIN kokyaku.dbo.M_SEISANSYA ON kokyaku.dbo.M_KOKYAKU.SEISANSYA_CD = kokyaku.dbo.M_SEISANSYA.SEISANSYA_CD 16 LEFT JOIN kokyaku.dbo.M_GYOUSYA ON kokyaku.dbo.M_KOKYAKU.GYOUSYA_CD = kokyaku.dbo.M_GYOUSYA.GYOUSYA_CD 17WHERE kokyaku.dbo.M_KOKYAKU.DEL_FLG='0' and kokyaku.dbo.M_KOKYAKU.FACILI_CD = 100001 18 AND kokyaku.dbo.M_KOKYAKU.CHU_FLG='0' 19GROUP BY kokyaku.dbo.M_KOKYAKU.KOKYAKU_CD, 20 kokyaku.dbo.M_KOKYAKU.LAST_NAME, 21 kokyaku.dbo.M_KOKYAKU.FIRST_NAME, 22 kokyaku.dbo.M_KOKYAKU.CHU_FLG, 23 kokyaku.dbo.M_KOKYAKU.URGENCY_FLG, 24 kokyaku.dbo.M_SEISANSYA.FIRST_NAME, 25 kokyaku.dbo.M_SEISANSYA.LAST_NAME, 26 kokyaku.dbo.M_GYOUSYA.FIRST_NAME, 27 kokyaku.dbo.M_GYOUSYA.LAST_NAME 28Order by kokyaku.dbo.M_KOKYAKU.LAST_KANANAME asc

上記のSQLをJava上で発行・実行し、結果をListへ返し、JSPでListデータを参照し画面上に表示するものなのですが、

Java

1SqlLogRegistry registry = SqlLogRegistryLocator.getInstance(); 2if (registry != null) { 3 SqlLog sqlLog = registry.getLast(); 4 System.out.println(sqlLog.getCompleteSql()); 5}

を使用することで、SQLが正常に発行されていることは確認が出来ており、
SQLServer上で上記SQLを使用して正常にSELECTが行えることは確認が出来ているのですが、実際にWebアプリで使用するとエラーで止まってしまいます。(調べたところ、今回追加で取得したデータ以外は正常に通っていそうでした。)

Java

1重大: サーブレット action のServlet.service()が例外を投げました 2java.sql.SQLException: 列名 'seiFirstName' が無効です。 3 at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372) 4 at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2886) 5 at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2328) 6 at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:638) 7 at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:506) 8 at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:979) 9

Entityクラスへは

Java

1/** seiFirstNameプロパティ */ 2@Column(name = "seiFirstName", length = 50, nullable = false, unique = false) 3private String seiFirstName; 4 5/** 6 * @return seiFirstName 7 */ 8@Deprecated 9public String getSeiFirstName() { 10 return seiFirstName; 11} 12/** 13 * @param seiFirstName セットする seiFirstName 14 */ 15@Deprecated 16public void setSeiFirstName(String seiFirstName) { 17 this.seiFirstName= seiFirstName; 18}

のように追加で取得になるデータの追記を行いました。
上記作業で実行できるものと思い込んでいたのですが、エラーが出てしまう原因は何なのでしょうか。

有識者の方々のお力をお借りできますと幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しました。
Entityの記述方法が違っていた模様です。

Java

1/** seiFirstNameプロパティ */ 2@Column(name = "seiFirstName", length = 50, nullable = false, unique = false) 3private String seiFirstName; 4 5/** 6 * @return seiFirstName 7 */ 8@Deprecated 9public String getSeiFirstName() { 10 return seiFirstName; 11} 12/** 13 * @param seiFirstName セットする seiFirstName 14 */ 15@Deprecated 16public void setSeiFirstName(String seiFirstName) { 17 this.seiFirstName= seiFirstName; 18}

Java

1@Transient 2public String seiFirstName;

へ変更することで無事値の取得・表示に至りました。

投稿2016/11/08 05:29

Alice0225

総合スコア206

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

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

0

例外内容は、

java.sql.SQLException: 列名 'seiFirstName' が無効です。

SQL例外なので、実行するSQLに問題があるという判断です。

SQLServer上で上記SQLを使用して正常にSELECTが行えることは確認が出来ている

と、いうことは、javaのプログラムが呼び出す際、
スキーマ、テーブル、カラムあたりが見えていない可能性があります。

まずは、プログラムで利用するユーザー(スキーマ)にSELECT権限があるかどうか、
ご確認ください。

投稿2016/11/04 13:12

akio221

総合スコア716

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

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

Alice0225

2016/11/07 01:39

ご回答ありがとうございます。 SELECT権限については問題ありませんでした。
akio221

2016/11/07 02:03

そうですか・・。後は思い当たる節といえば、 ・テーブル kokyaku.dbo.M_SEISANSYAが見えているのか?  (シンプルに kokyaku.dbo.M_SEISANSYAだけをSELECTしてみて結果を取得できるか?) ・別名seiFirstNameを切った直後に、where句の中でseiFirstNameを使用すると、  その別名がまだ有効になっていないのでSQL例外になる  (このSQLにあとからwhere条件を追加したりしていないか?) ・エンティティに代入する際にエラー?  ( nullable = falseを一旦trueで許可してみてどうか?) といったあたりです。
Alice0225

2016/11/08 05:30

補足ありがとうございます。 補足頂いた中の「・エンティティに代入する際にエラー?」が今回の自己解決に至るきっかけとなりました。 とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問