做数据库插入的时候setString()和setObject()是有区别的,如果是Oracle做JDBC插入还好,如果是informix数据库就会出现乱码问题,因为setObject()有转码的过程。我之前做个一个下行短信功能需要把一条数据插入到对方的informix数据库中,所有汉字就出现乱码以下是具体例子:
boolean off=ifModelMessageClosed(model_no,company);
if(off){
log.info("短信开关关闭!");
}else{
log.info("saveMessage:保存数据到flex_se_tm表中");
Connection conn = getConnection();
if(conn!=null){
StringBuffer sql = new StringBuffer();
sql.append("insert into flex_se_tm ");
sql.append("(id,sendid,userid,phonecode,sendtime,sendtext,status,flag,usefullife,autoread,inceptback,gwid,selectTag,smstype,serviceid,repeatcount,sendlevel,company)");
sql.append("values");
sql.append("(?,?,?,?,?,?,'0','0','1','0','0',?,'0',?,'1001',0,2,?)");
PreparedStatement pstmt = null;
try {
pstmt= conn.prepareStatement(sql.toString());//想数据库中插入第一组数据
String time = df.format(new Date());
String idvalue = "TM"+time+getRandom(6);
pstmt.setString(1,idvalue);//主键
pstmt.setString(2,"");//发送序列号
pstmt.setString(3,"");//发送人工号或姓名
pstmt.setString(4,phone);//接受短信手机号码
pstmt.setString(5,(String) time.subSequence(0, 14));//发送时间
log.info(messageContent);
pstmt.setString(6,messageContent);//短信内容
pstmt.setString(7,"");//短信网关返回ID
pstmt.setString(8,"T01");//短信类型
pstmt.setString(9,company);//机构代码
pstmt.execute();
/*记录短信日志*/
log.info("开始记录短信日志到PICC_MESSAGE_LOG表中");
PiccMessageLogInfo piccMessageLogInfo = new PiccMessageLogInfo();
piccMessageLogInfo.setContents(messageContent);
piccMessageLogInfo.setMemOrg(company);
piccMessageLogInfo.setPhoneNo(phone);
piccMessageLogInfo.setSendBy("1_1");
piccMessageLogInfo.setSendFlag("1");
piccMessageLogInfo.setSendTime(new Date());
piccMessageLogInfo.setSendType("1");
this.baseDAO.save(piccMessageLogInfo);
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtil.close(null, pstmt, conn);
}
}else{
log.error("saveMessage:connection is null ");
}
}
建议以后统一用setString()吧,比较把握。
转载于:https://blog.51cto.com/zhangchi/1421012