解決策を取るためにmysqlのフィールドはエイリアスJDBCを解決できません

プロジェクト春の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 =真

プロパティに追加して、あなたは問題が解決されていることがわかります。

 

「私はあなたで座って悲しいことはできません。」

おすすめ

転載: www.cnblogs.com/yanggb/p/11427715.html