做數據庫插入的時候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()吧,比較把握。