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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

SQL

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

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

1回答

2123閲覧

java.sql.SQLException: Descriptor index not valid. というエラーが再帰クエリをjavaに埋め込むと出る

masaking

総合スコア30

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

SQL

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

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/01/10 00:46

編集2020/01/10 00:47

再帰クエリができるようになったので、そのクエリをjavaのシステムに埋め込んでみようと思っています。

java

1java.sql.SQLException: Descriptor index not valid. 2 com.ibm.as400.access.JDError.throwSQLException(JDError.java:389) 3 com.ibm.as400.access.AS400JDBCPreparedStatement.setValue(AS400JDBCPreparedStatement.java:2831) 4 com.ibm.as400.access.AS400JDBCPreparedStatement.setString(AS400JDBCPreparedStatement.java:2506) 5 dao.Bbom.Loadsit(Bbom.java:28) 6 action.BbomAction.execute(BbomAction.java:40) 7 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) 8 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 9 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) 10 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 11 javax.servlet.http.HttpServlet.service(HttpServlet.java:660) 12 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 13 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 14 filter.EncodingFileter.doFilter(EncodingFileter.java:30)

というエラーが出ます。

BbomAction.java

action

1package action; 2 3import java.sql.Connection; 4import java.sql.SQLException; 5 6import javax.naming.NamingException; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10import org.apache.struts.action.Action; 11import org.apache.struts.action.ActionForm; 12import org.apache.struts.action.ActionForward; 13import org.apache.struts.action.ActionMapping; 14 15import dao.Bbom; 16import dao.DB400Connection; 17 18public class BbomAction extends Action { 19 public 20 ActionForward execute( 21 ActionMapping mapping, 22 ActionForm form, 23 HttpServletRequest request, 24 HttpServletResponse response) 25 26 throws 27 SQLException, 28 NamingException, 29 IllegalAccessException, 30 java.lang.reflect.InvocationTargetException, 31 Exception{ 32 33 request.setCharacterEncoding("UTF-8"); 34 String mit = request.getParameter("mit"); 35 36 DB400Connection db400connection = new DB400Connection(); 37 Connection conn = db400connection.getConnection(); 38 39 Bbom bbom = new Bbom(); 40 Object list = bbom.Loadsit(conn, mit); 41 42 request.setAttribute("BomCodeForm", list); 43 44 return (mapping.findForward("success")); 45 46 }

から、
Bbom.java

java

1package dao; 2 3import java.lang.reflect.InvocationTargetException; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9 10import org.apache.commons.beanutils.BeanUtils; 11 12import form.BomCodeForm; 13 14public class Bbom { 15 16 public ArrayList<BomCodeForm> Loadsit(Connection conn, String mit) 17 throws SQLException, IllegalAccessException, InvocationTargetException{ 18 19 String sql 20 21 = " with recursive child (depth, id, children) as ( " + 22 " select 0, bm.IBMMIT, bm.IBMSIT from LIBFILE.BBOM1M00 as bm where bm.IBMMIT = '?' " + 23 " union all " + 24 " select child.depth + 1, bm.IBMMIT, bm.IBMSIT from LIBFILE.BBOM1M00 as bm, child where bm.IBMMIT = child.children)" + 25 " select DEPTH, id from child order by depth"; 26 27 PreparedStatement pStmt = conn.prepareStatement(sql); 28 pStmt.setString(1, mit); 29 ResultSet rs = pStmt.executeQuery(); 30 31 ArrayList<BomCodeForm> list = new ArrayList<>(); 32 33 34 while(rs.next()) { 35 BomCodeForm bomcodeform = new BomCodeForm(); 36 BeanUtils.setProperty(bomcodeform, "depth", rs.getString("DEPTH")); 37 BeanUtils.setProperty(bomcodeform, "sit", rs.getString("ID")); 38 39 list.add(bomcodeform); 40 } 41 return list; 42 } 43}

を呼び出して使おうとしていますが、Bbom.javaを使う段階でエラーになります。

最近デバッグというものを学んだので、やってみたところ、

ResultSet rs = pStmt.executeQuery();

の行に行くときにおかしくなります。

そのことから、Bbom.javaのsql部分の記述に問題があるのではないかとにらんでいるのですが、具体的にどう直せばよいのかが思いつきません。

sql単体だとしっかりクエリができることは確認しました。

お知恵を拝借したいです。

情報足りない場合は、教えてください。

###環境

Windows
Microsoft Windows [Version 10.0.17763.737]
Widnows10 Pro version 1809
Eclipse
Version: 2019-09 R (4.13.0)
Build id: 20190917-1200

Tomcat
9.0
Java
C:\Program Files (x86)\Java\jre1.8.0_221
C:\Program Files (x86)\Java\jdk1.5.0
Mysql
mysql Ver 8.0.17 for Win64 on x86_64 (MySQL Community Server - GPL)
mysql-connector-java-8.0.17.jar

Struts
Specification-Version: 1.2.9(first struts プロジェクト)

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

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

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

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

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

masaking

2020/01/10 01:28

コメントありがとうございます。 解決はしていないので、答えることはできないです。 勉強用で自分で作ったDBに対するクエリ(該当URL)は機能せずに、会社のDBに対するクエリ(今回)はなぜか機能しています。。。よくわからないです難しい。。。
guest

回答1

0

自己解決

クエリの、'?'を、?にしたら動きました。
変数は、絶対に''でくくったらダメなんですね。

なんかこういう初歩で詰まることばっかりなんですけど、初心者なんで失敗して覚えていくしかないのかなーという次第です。

投稿2020/01/10 05:21

masaking

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問