| New file |
| | |
| | | package cn.net.communion.dbdatasync.dbhelper.impl; |
| | | |
| | | import cn.net.communion.dbdatasync.dbhelper.DbHelper; |
| | | import cn.net.communion.dbdatasync.entity.JobInfo; |
| | | |
| | | import java.sql.Connection; |
| | | import java.sql.PreparedStatement; |
| | | import java.sql.ResultSet; |
| | | import java.sql.SQLException; |
| | | import java.sql.Statement; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | import org.apache.log4j.Logger; |
| | | |
| | | public class SqlServer implements DbHelper { |
| | | private Logger logger = Logger.getLogger(SqlServer.class); |
| | | |
| | | public String assembleSQL(String srcSql, Connection conn, JobInfo jobInfo) throws SQLException { |
| | | String fieldStr = jobInfo.getDestTableFields(); |
| | | String[] fields = jobInfo.getDestTableFields().split(","); |
| | | String[] updateFields = jobInfo.getDestTableUpdate().split(","); |
| | | String destTableKey = jobInfo.getDestTableKey(); |
| | | String destTable = jobInfo.getDestTable(); |
| | | Statement stat = conn.createStatement(); |
| | | ResultSet rs = stat.executeQuery(srcSql); |
| | | StringBuffer sql = new StringBuffer(); |
| | | long count = 0; |
| | | while (rs.next()) { |
| | | sql.append("if not exists (select ").append(destTableKey).append(" from ").append(destTable).append(" where ").append(destTableKey).append("='").append(rs.getString(destTableKey)) |
| | | .append("')").append("insert into ").append(destTable).append("(").append(fieldStr).append(") values("); |
| | | for (int index = 0; index < fields.length; index++) { |
| | | sql.append("'").append(rs.getString(fields[index])).append(index == (fields.length - 1) ? "'" : "',"); |
| | | } |
| | | sql.append(") else update ").append(destTable).append(" set "); |
| | | for (int index = 0; index < updateFields.length; index++) { |
| | | sql.append(updateFields[index]).append("='").append(rs.getString(updateFields[index])).append(index == (updateFields.length - 1) ? "'" : "',"); |
| | | } |
| | | sql.append(" where ").append(destTableKey).append("='").append(rs.getString(destTableKey)).append("';"); |
| | | count++; |
| | | // this.logger.info("第" + count + "耗时: " + (new Date().getTime() - oneStart) + "ms"); |
| | | } |
| | | this.logger.info("总共查询到 " + count + " 条记录"); |
| | | if (rs != null) { |
| | | rs.close(); |
| | | } |
| | | if (stat != null) { |
| | | stat.close(); |
| | | } |
| | | return count > 0 ? sql.toString() : null; |
| | | } |
| | | |
| | | public void executeSQL(String sql, Connection conn) throws SQLException { |
| | | PreparedStatement pst = conn.prepareStatement(sql); |
| | | pst.executeUpdate(); |
| | | conn.commit(); |
| | | pst.close(); |
| | | } |
| | | } |