[解決済み] springframework.jdbc.UncategorizedSQLException :無効な列のタイプ-。
2022-02-14 14:06:04
質問
クエリは単純なカウントを返します。実行時に springframework.jdbc.UnategorizedSQLException:java.sql.SQLException を受け取ります。無効な列のタイプです。 私は同様の投稿を見つけ、提案を試してみましたが、私はまだ行き詰まっています:(...) どんな助けでも感謝されます。
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue(DAOConstants.PROD_ID, custVo.getProdId(),OracleTypes.NUMBER);
params.addValue(DAOConstants.REQ_IND, DAOConstants.FLAG_Y,OracleTypes.VARCHAR);
クエリです。
select count(1) from prod where prod_id = :PROD_ID and req_ind =:REQ_IND
テーブルの定義
Name Null Type
----------------- -------- ------------
PROD_ID NOT NULL NUMBER(5)
REQ_IND VARCHAR2(10)
ログは...
Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;
uncategorized SQLException for SQL [select count(1) from prod where prod_id = :PROD_ID and req_ind = :REQ_IND ]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:728)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:744)
at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:775)
... 45 more
Caused by: java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7937)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7517)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8174)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8155)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setObject(WrappedPreparedStatement.java:724)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:351)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:641)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
... 56 more
解決方法は?
スタックトレースから、JdbcTemplateクラスを使用しているように見えます。名前付きパラメータスタイルのプレースホルダーを使用しており、パラメータに MapSqlParameterSource を提供しているため、NamedParameterJdbcTemplate を使用する必要があります。
では、なぜこのような奇妙なエラーメッセージが表示されるのでしょうか?さて、あなたのSQLクエリは、実際にはOracle JDBCドライバを使用して動作します。このドライバでは、"?" または ":" をプレフィックスとして使用した名前付きパラメータ形式を使用することができ、プレースホルダを使用できます。それでもなお、正しい順序でパラメータ値を提供する必要があり、あなたのケースの MapSqlParameterSource はそうではありません。代わりにオブジェクトの配列を使用して、これをテストすることができます。
new Object[] {custVo.getProdId(), DAOConstants.FLAG_Y}
このエラーは、params.getValues()メソッドに渡された値の順番がおかしく、:PROD_IDにString値が渡されていることが原因となっています。
関連
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み】javaで無効な文字定数
-
[解決済み】koch snowflake java recursion