1. 程式人生 > >Java 關於資料庫插入報錯,原因inset (name)values(" ' "+" '李白 "+" ' ")

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;
    }

問題解決。