public ChnnelLinkCount findByBCAndCT(String bankCode,int channelType){
String sql = " select LINK_SQ,BANK_CODE,CHANNEL_TYPE,LINK_DT,LINK_COUNT,LAST_UPD_DT,LAST_UPD_TS,EXT_MSG1,EXT_MSG2 " +
" from TBL_CHANNELLINK_COUNT where trim(BANK_CODE) = ? and CHANNEL_TYPE = ? ";
PreparedStatement pstmt = null;
ResultSet rs = null;
Connection conn = null;
ChnnelLinkCount chnnelLinkCount = null;
try{
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, bankCode);
pstmt.setInt(2, channelType);
rs = pstmt.executeQuery();
while(rs.next()){
chnnelLinkCount = new ChnnelLinkCount();
chnnelLinkCount.setLinkSq(rs.getLong("LINK_SQ"));
chnnelLinkCount.setBankCode(rs.getString("BANK_CODE"));
chnnelLinkCount.setChannelType(rs.getInt("CHANNEL_TYPE"));
chnnelLinkCount.setLinkDt(rs.getString("LINK_DT"));
chnnelLinkCount.setLinkCount(rs.getLong("LINK_COUNT"));
chnnelLinkCount.setLastUpdDt(rs.getString("LAST_UPD_DT"));
chnnelLinkCount.setLastUpdTs(rs.getString("LAST_UPD_TS"));
chnnelLinkCount.setExtMsg1(rs.getString("EXT_MSG1"));
chnnelLinkCount.setExtMsg2(rs.getString("EXT_MSG2"));
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtil.close(rs);
DBUtil.close(pstmt);
DBUtil.close(conn);
}
return chnnelLinkCount;
}
public static void main(String[] args){
PointCountDao pcd = new PointCountDao();
ChnnelLinkCount cc = pcd.findByBCAndCT("3",3);
if(cc != null){
System.out.println(cc.getBankCode());
System.out.println(cc.getChannelType());
System.out.println(cc.getLastUpdDt());
}else{
System.out.println("很遺憾,沒查到!");
}
}
}
在上述方法中傳入兩個參數,一個String類型的和一個int類型的,當BANK_CODE欄位在資料庫中的類型為char()時,不加trim()方法則不能查到結果,如果給sql中String型別參數的問號加上單引號,如('?')則拋出ORA-01006: bind variable does not exist 異常。
結論:當Oracle欄位為char()類型的時候,則程式中的sql語句要給這個欄位加上trim()方法才能得到正確的結果。