Java 關於資料庫插入報錯,原因inset (name)values(" ' "+" '李白 "+" ' ")
在sql中出現這種狀況一般是拼接的問題:
private String generateExpInsertSql(LicExpDataModel lic) throws Exception {
StringBuffer sb = new StringBuffer();
sb.append("insert into LIC_DTLS_EXPORT(");
Field[] fields = lic.getClass().getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
if (f.get(lic) != null) {
sb.append(f.getName() + ",");
}
}
sb = new StringBuffer(sb.substring(0, sb.length() - 1));
sb.append(") values(");
for (Field f : fields) {
f.setAccessible(true);
if (f.get(lic) != null) {
if (f.getType().equals(String.class)) {
sb.append("'" + String.valueOf(f.get(lic)) + "',");
} else {
sb.append(String.valueOf(f.get(lic)) + ",");
}
}
}
sb = new StringBuffer(sb.substring(0, sb.length() - 1));
sb.append(")");
log.debug(sb.toString());
return sb.toString();
}
它的上一級是:
public void addExpLicData(List<LicExpDataModel> data)
throws SQLException {
Connection conn = JdbcUtil.getConnection();
Statement st = null;
try {
conn.setAutoCommit(false);
st = conn.createStatement();
int index = 0;
for (LicExpDataModel lic : data) {
if (index++ > 1000) {
st.executeBatch();
conn.commit();
st.clearBatch();
}
int result = this.checkExpLicExist(conn, lic);
if (result > 0) {
st.addBatch(this.generateExpUpdateSql(lic));
} else {
st.addBatch(this.generateExpInsertSql(lic));
}
}
st.executeBatch();
conn.commit();
} catch (Exception e) {
log.error("同步出口資料檔案失敗!", e);
} finally {
conn.setAutoCommit(true);
JdbcUtil.release(null, st, conn);
}
}
程式碼已經寫死了,沒辦法,想辦法解決中文拼接問題 ,首選在bean裡set時進行處理。程式碼如下:
public void setSPEC(String sPEC) {
if( sPEC !=null && !"".equals(sPEC) ){
if(sPEC.indexOf("'")>=0){
sPEC=sPEC.replace("'","");
}
}
SPEC = sPEC;
}
問題解決。