プロジェクト春のJDBCを使用すると、それがデータベースが返す結果セットを取得するために、JDBCインタフェースのResultSetMetaData実装クラスを経由して、特定のデータベースを呼び出すことです。
プロジェクトの開発では、フィールドに加えて、フィールドには、元のフィールド名で取る、別名は力ではないが与えられている、ことを意味し、決してMySQLでの別名の使用が適切に解決されていることが分かりました。たとえば、user_nameが、特に個々の名前のuser_name_oldを取るために、最終的な結果は、別名user_name_oldを返されませんが、以前はUSER_NAMEとして知られています。
トラッキングコードはResultSetMetaData.getColumnName(INTカラム)MySQLではJDBCで実装いくつかの具体的な処理ロジックの存在を発見しました。
公共の文字列のgetColumnName(int型の列)がスローするSQLExceptionを{ 場合(この .useOldAliasBehavior){ // 偽 リターン この.getField(コラム).getName(); } 他{ 文字列名 = この .getField(カラム).getNameNoAliases(); // 取非别名 リターン名!= nullの && name.length()== 0?この.getField(コラム).getName():名前; } }
最後の撮影elseロジックも左Field.getNameNoAliases()メソッドであるのでthis.useOldAliasBehaviorプロパティは、falseですので。
公共の文字列のgetNameNoAliases()がスローするSQLException { 場合(この .useOldNameMetadata){ // 偽 リターン この.getNameを(); } 他{ 戻り 、この .connectionを!= NULL && この .connection.versionMeetsMinimum(4、1、0)?この .getOriginalName():この.getName(); } }
だから我々は最終的に、JDBCドライバのアドレスを介して設定することができますthis.useOldAliasBehaviorプロパティに問題を見つけます。
useOldAliasMetadataBehavior = 真
完全なドライブ・アドレスは次のようになります。
JDBC:mysqlの:// ?localhostの/ TESTDB useUnicode =真&characterEncoding = UTF-8&zeroDateTimeBehavior = convertToNull&useOldAliasMetadataBehavior =真
プロパティに追加して、あなたは問題が解決されていることがわかります。
「私はあなたで座って悲しいことはできません。」