做数据库插入的时候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()吧,比较把握。
本文出自 “小浩” 博客,请务必保留此出处http://zhangchi.blog.51cto.com/5214280/1421012