内部表現への変換に失敗する



Fail Convert Internal Representation



Today met with the exception

java.sql.SQLException: Fail to convert to internal representation at oracle.jdbc.driver.CharCommonAccessor.getLong(CharCommonAccessor.java:297) at oracle.jdbc.driver.T4CVarcharAccessor.getLong(T4CVarcharAccessor.java:849) at oracle.jdbc.driver.OracleResultSetImpl.getLong(OracleResultSetImpl.java:939) at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:440) at com.alibaba.druid.pool.DruidPooledResultSet.getLong(DruidPooledResultSet.java:304) at cn.egame.data.core.rowmapper.js.OpenChannelSettlementsRowMapper.mapRow(OpenChannelSettlementsRowMapper.java:21) at cn.egame.data.core.rowmapper.js.OpenChannelSettlementsRowMapper.mapRow(OpenChannelSettlementsRowMapper.java:14)

java code



 bean.setDistributorId(rs.getLong('distributor_id'))public synchronized long getLong(int var1) throws SQLException { if(var1 this.statement.numberOfDefinePositions) { DatabaseError.throwSqlException(3) } if(this.closed) { DatabaseError.throwSqlException(11) } int var2 = this.statement.currentRow if(var2 <0) { DatabaseError.throwSqlException(14) } this.statement.lastIndex = var1 if(this.statement.streamList != null) { this.statement.closeUsedStreams(var1) } //T4CVarcharAccessor.getLong return this.statement.accessors[var1 - 1].getLong(var2) }

これがデータベースdistributor_idvarchar2です。getLongを使用してください。

これは今では問題になりません。データの表示に問題はありません。



各カテゴリのソースコードを表示するには(逆コンパイル、このパッケージは非オープンソース)

OracleResultSetImpl

long getLong(int var1) throws SQLException { long var2 = 0L if(this.rowSpaceIndicator == null) { DatabaseError.throwSqlException(21) } if(this.rowSpaceIndicator[this.indicatorIndex + var1] != -1) { try { var2 = Long.parseLong(this.getString(var1).trim()) } catch (NumberFormatException var5) { DatabaseError.throwSqlException(59) } } return var2 }

複数のクラスの関係は次のとおりです。



T4CVarcharAccessorはVarcharAccessorを拡張しますCharCommonAccessorを拡張します

以下は、CharCommonAccessor.getLongメソッドです。

/* */ long getLong(int paramInt) /* */ throws SQLException /* */ { /* 273 */ long l = 0L /* */ /* 275 */ if (this.rowSpaceIndicator == null) /* */ { /* 279 */ SQLException localSQLException1 = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 21) /* 280 */ localSQLException1.fillInStackTrace() /* 281 */ throw localSQLException1 /* */ } /* */ /* 287 */ if (this.rowSpaceIndicator[(this.indicatorIndex + paramInt)] != -1) /* */ { /* */ try /* */ { /* 291 */ l = Long.parseLong(getString(paramInt).trim()) /* */ } /* */ catch (NumberFormatException localNumberFormatException) /* */ { /* 296 */ SQLException localSQLException2 = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 59) /* 297 */ localSQLException2.fillInStackTrace() /* 298 */ throw localSQLException2 /* */ } /* */ /* */ }

逆コンパイルされたコードは次のとおりです

297行目のエラー、つまり

「java.sql.SQLException:内部表現への変換に失敗しました」

291行から、インターネットを検索する多くの方法がgetLongになると述べたgetString、デジタルデータの場合、個人的には実用的な意味はないと感じています