锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.*.*.database.DBUtil;
import com.*.*.fwk.base.*BOImpl;
import com.*.*.util.PropertyReader;
import com.*.*.util.log.Logger;
import com.*.exception.DuplicateKeyException;
import com.*.exception.EncryptionException;
import com.*.exception.RecordNotFoundException;
import com.*.util.CharTurn;
public class PartenerSynPollingBO extends *BOImpl {
//榪滅▼榪炴帴
Connection remoteConn =null;
private final static String LIST_REMOTE_PARTENER =
" SELECT "
+" SUP_ID,"
+" SUP_CODE,"
+" NAME,"
+" REPRESENTER,"
+" ADDRESS,"
+" EMAIL,"
+" FAX,"
+" PHONE "
+" FROM PMS.SUP_SUPPLIER_VIEW ";
// +" WHERE TYPE IN(1,2,3,4) AND SUP_LEVEL IN(1,2,3)" ;
private static String s_par_db_UserName = "";
private static String s_par_db_Password = "";
private static String s_par_db_url = "";
private static String s_par_db_driver= "";
static {
try {
PropertyReader pr = new PropertyReader();
s_par_db_UserName = pr.getProperty("PAR_DB_USERNAME");
s_par_db_Password = CharTurn.paraDecrypt(pr.getProperty("PAR_DB_PASSWORD"));
s_par_db_driver = pr.getProperty("DRIVER_PAR");
s_par_db_url = pr.getProperty("PAR_DB_URL"); ;
} catch (IOException e) {
e.printStackTrace();
} catch (EncryptionException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) throws IOException,
SQLException, RecordNotFoundException {
PartenerSynPollingBO partenerSynPollingBO = new PartenerSynPollingBO();
try {
partenerSynPollingBO.polling();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 甯愬彿鐢熷懡鍛ㄦ湡杞
* @throws Exception
* @throws RecordNotFoundException 璁板綍鏃犳硶鎵懼埌
* @throws DuplicateKeyException 閲嶅涓婚敭
*/
public void polling() throws Exception {
System.out.println("寮濮嬪悓姝ュ巶鍟嗗簱 "+Calendar.getInstance().getTime());
remoteConn = PartenerSynPollingBO.getRemoteConnection();
PreparedStatement remotePstmt=null;
ResultSet remoteRs =null;
//鏈湴榪炴帴
Connection conn =null;
conn = DBUtil.getConnection();
remotePstmt = remoteConn.prepareStatement(LIST_REMOTE_PARTENER);
remoteRs = remotePstmt.executeQuery();
HashSet allParIdset= new HashSet();
if(remoteConn!=null){
try {
int i=0;
while(remoteRs.next()){
//鍙橀噺
Integer sup_id = Integer.valueOf(String.valueOf(remoteRs.getInt("SUP_ID")));
String sup_code = String.valueOf(remoteRs.getString("SUP_CODE")==null?"":remoteRs.getString("SUP_CODE"));
String name = String.valueOf(remoteRs.getString("NAME")==null?"":remoteRs.getString("NAME"));
String address = String.valueOf(remoteRs.getString("ADDRESS")==null?"":remoteRs.getString("ADDRESS"));
String phone = String.valueOf(remoteRs.getString("PHONE")==null?"":remoteRs.getString("PHONE"));
String email = String.valueOf(remoteRs.getString("EMAIL")==null?"":remoteRs.getString("EMAIL"));
String representer = String.valueOf(remoteRs.getString("REPRESENTER")==null?"":remoteRs.getString("REPRESENTER"));
String fax = String.valueOf(remoteRs.getString("FAX")==null?"":remoteRs.getString("FAX"));
//緇熻SUP_ID
allParIdset.add(remoteRs.getObject("SUP_ID"));
//鍙栧叕鍙擱偖綆卞悗緙
String mailDomain ="";
if(email!=null && !"".equals(email)){
int index = email.lastIndexOf("@");
if(index!=-1){
mailDomain = email.substring(index+1);
}
}
PreparedStatement localPstmt=null;
if(!PartenerSynPollingBO.isExist("t_ap_partener_syn", "SUP_ID", String.valueOf( sup_id ))){
System.out.println("---姝e湪娣誨姞id涓? "+ sup_id +" 鐨勫巶鍟?--");
/** 寰鍘傚晢涓棿琛ㄦ彃鍏ユ暟鎹?*/
localPstmt = conn.prepareStatement("insert into t_ap_partener_syn(SUP_ID,SUP_CODE,NAME,REPRESENTER,ADDRESS," +
"EMAIL,FAX,PHONE,UPDATETIME, MAILDOMAIN) "
+ "values(?,?,?,?,?,?,?,?,SYSDATE,?)");
localPstmt.setInt(1,Integer.parseInt(sup_id.toString()));
localPstmt.setString(2,sup_code);
localPstmt.setString(3,name);
localPstmt.setString(4,representer);
localPstmt.setString(5,address);
localPstmt.setString(6,email);
localPstmt.setString(7,fax);
localPstmt.setString(8,phone);
localPstmt.setString(9,mailDomain);
localPstmt.executeUpdate();
}else{
//緇х畫鍒ゆ柇鍘傚晢璁板綍鏄惁琚慨鏀?br />
String sql = "select sup_id from t_ap_partener_syn where SUP_ID = "+sup_id ;
//address榪涜鐗規畩澶勭悊
if(address!=null && !"".equals(address.trim())){
address = address.replace("\'","\"" );
}
String condition = " and ( SUP_CODE!= '"+ sup_code + "' or name!= '"+ name+ "' or REPRESENTER!= '"+ representer
+ "' or ADDRESS!= '"+ address+ "' or EMAIL!= '"+ email+ "' or fax!= '"+ fax+ "' or mailDomain!= '"+ mailDomain
+ "' or phone!= '"+ phone+"' )";
localPstmt = conn.prepareStatement(sql+condition);
ResultSet rs_p = localPstmt.executeQuery();
if(rs_p.next()){
System.out.println("---姝e湪淇敼id涓? "+ sup_id +" 鐨勫巶鍟?--");
localPstmt = conn.prepareStatement("update T_AP_PARTENER_SYN set SUP_CODE=?,NAME=?,REPRESENTER=?,ADDRESS=?," +
" updatetime=sysdate,EMAIL=?, FAX=?,PHONE=?,mailDomain=? where SUP_ID = ? ");
localPstmt.setString(1,sup_code);
localPstmt.setString(2,name);
localPstmt.setString(3,representer);
localPstmt.setString(4,address);
localPstmt.setString(5,email);
localPstmt.setString(6,fax);
localPstmt.setString(7,phone);
localPstmt.setString(8,mailDomain);
localPstmt.setInt(9,Integer.parseInt(sup_id.toString()));
localPstmt.executeUpdate();
}
}
if(localPstmt!=null){
localPstmt.close();
}
i++;
}
//鍒犻櫎宸蹭笉瀛樺湪鍘傚晢璁板綍
deletePartenerRecord("T_AP_PARTENER_SYN", "SUP_ID" , allParIdset);
System.out.print("緇撴潫鍚屾鍘傚晢搴?" +Calendar.getInstance().getTime());
} catch (Exception ex) {
throw ex;
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(remoteConn!=null){
try {
remoteConn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}else{
System.out.println("榪炴帴鏁版嵁搴撳け璐?");
}
}
/**
* 鑾峰緱鏁版嵁搴撹繛鎺?br />
* @return
*/
public static Connection getRemoteConnection(){
try {
Connection conn = null;
conn = DBUtil.getConnection(s_par_db_driver, s_par_db_url, s_par_db_UserName, s_par_db_Password);
if(conn == null){
throw new SQLException("Get partener db conncetion failed.");
}
return conn;
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
/** 閫氳繃鍏抽敭瀛楀垽鏂褰曟槸鍚﹀瓨鍦?*/
public static boolean isExist(String tableName, String colName, String value){
Connection conn=null;
PreparedStatement pstmt=null;
try {
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("select "+colName +" from "+tableName + " where " + colName +" = " +value );
ResultSet rs= pstmt.executeQuery();
if(rs.next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return false;
}
/** 鍒犻櫎宸蹭笉瀛樺湪鐨勫巶鍟嗚褰?*/
public static void deletePartenerRecord(String tableName, String colName, HashSet sub_ids){
Connection conn=null;
PreparedStatement pstmt=null;
try {
conn = DBUtil.getConnection();
Statement sate = conn.createStatement();
ResultSet rs =sate.executeQuery(" SELECT SUP_ID, SUP_CODE, NAME FROM T_AP_PARTENER_SYN ");
String removeID="";
while(rs.next()){
if(!sub_ids.contains(rs.getObject("SUP_ID"))){
removeID = removeID+","+ rs.getObject("SUP_ID").toString().trim();
System.out.println("---灝嗚鍒犻櫎: sub_id 涓?"+rs.getObject("SUP_ID")+"鐨勫巶鍟?--");
}
}
//寮濮嬮泦浣撳垹闄?br />
if(!"".equals(removeID) && removeID.length()>0){
removeID = removeID.substring(0,1).equals(",")?removeID.substring(1,removeID.length()-1):removeID;
pstmt = conn.prepareStatement("delete from "+tableName +" where "+ colName + " not in ( "+removeID+" )" );
System.out.println("delete from "+tableName +" where "+ colName + " not in ( "+removeID+" )");
pstmt.executeQuery();
System.out.println("鍒犻櫎鎴愬姛!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
//瑙﹀彂鍣?br />
create or replace trigger tri_partener after insert or update or delete
on t_ap_partener_syn for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
dummy integer;
found boolean;
begin
if inserting then
insert into t_ap_partener(
PARTENERID ,
PARTENERNAME,
ADDRESS,
TELEPHONE,
FLAG,
MAILDOMAIN,
VISUAL,
SUP_ID,
SUP_CODE,
REPRESENTER,
BUSI_TYPE,
EMAIL,
SITE_URL,
FAX,
UPDATETIME,
syn_flag
)
values(SEQ_AP_PARTENER.Nextval,:new.name,:new.address,:new.phone,1,:new.mailDomain,
0, :new.SUP_ID,:new.SUP_CODE,:new.REPRESENTER,:new.BUSI_TYPE,:new.EMAIL,:new.SITE_URL,:new.FAX,sysdate,0);
elsif updating then
update t_ap_partener set PARTENERNAME=:new.name,ADDRESS=:new.ADDRESS,TELEPHONE=:new.phone,flag =1,MAILDOMAIN=:new.mailDomain,visual=0
,SUP_ID=:new.SUP_ID, SUP_CODE=:new.SUP_CODE,REPRESENTER=:new.REPRESENTER,BUSI_TYPE=:new.BUSI_TYPE,EMAIL=:new.EMAIL,SITE_URL=:new.SITE_URL,FAX=:new.FAX,UPDATETIME=sysdate,syn_flag=0
where SUP_ID=:OLD.SUP_ID;
elsif deleting then
delete from t_ap_partener where SUP_ID=:OLD.SUP_ID;
end if;
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
//鍘傚晢琛?br />
-- Create table
create table T_AP_PARTENER
(
PARTENERID NUMBER not null,
PARTENERNAME VARCHAR2(100),
ADDRESS VARCHAR2(100),
TELEPHONE VARCHAR2(50),
FLAG NUMBER(1) default 1,
MAILDOMAIN VARCHAR2(200),
PARENTID NUMBER default 0,
PLEVEL NUMBER(1) default 1,
VISUAL NUMBER default 0,
SUP_ID NUMBER,
SUP_CODE VARCHAR2(100),
REPRESENTER VARCHAR2(80),
BUSI_TYPE VARCHAR2(100),
EMAIL VARCHAR2(80),
SITE_URL VARCHAR2(120),
FAX VARCHAR2(40),
UPDATETIME TIMESTAMP(6),
SYN_FLAG NUMBER(1)
)
//涓棿琛?br />
create table T_AP_PARTENER_SYN
(
SUP_ID NUMBER,
SUP_CODE VARCHAR2(100),
NAME VARCHAR2(150),
REPRESENTER VARCHAR2(80),
BUSI_TYPE VARCHAR2(100),
ADDRESS VARCHAR2(200),
EMAIL VARCHAR2(80),
SITE_URL VARCHAR2(120),
FAX VARCHAR2(40),
PHONE VARCHAR2(40),
UPDATETIME TIMESTAMP(6),
MAILDOMAIN VARCHAR2(200)
)
tablespace TBS_USERS
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
while (rs.next()) {
HashMap hm = new HashMap();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
hm.put(rsmd.getColumnName(i).toString(),
rs.getObject(i)==null?"":rs.getObject(i).toString().trim());
}
c.add(hm);
}
return c;
}
/**
* 鏍規嵁pagesize鍜宲osition灝嗘寚瀹氱殑RecordSet杞負Collection
* @param rs 闇瑕佽漿鐨凴esultSet瀵硅薄
* @param position 褰撳墠欏墊暟
* @param pageSize 姣忛〉澶у皬
* @return Collection綾誨瀷鐨勬暟鎹簱闆?br />
* @throws ParameterException 鍙傛暟閿欒錛屼紶杈撶殑鍙傛暟rs涓嶅悎娉?br />
* @throws SQLException 璁塊棶鏁版嵁搴撳紓甯?br />
*/
public static Collection resultSet2Collection(ResultSet rs
, int position, int pageSize) throws
ParameterException, SQLException {
Collection c = new Vector();
try{
if (rs == null) {
throw new ParameterException(" parameter rs is null");
}
if (position < 1) position = 1;
if (pageSize <= 0) pageSize = DEFAULT_PAGESIZE;
if (rs.absolute(position))
do {
HashMap hm = new HashMap();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
if (rsmd.getColumnTypeName(i).toLowerCase().equals("clob"))
{
String content = "";
CLOB clob = ((OracleResultSet) rs).getCLOB(rsmd.getColumnName(i));
if (clob != null) {
Reader reader = clob.getCharacterStream();
BufferedReader bufferedReader = new BufferedReader(
reader);
String str = bufferedReader.readLine();
while (str != null) {
content += str + "\n";
str = bufferedReader.readLine();
}
}
hm.put(rsmd.getColumnName(i).toString(),content);
}
else{
hm.put(rsmd.getColumnName(i).toString(),
rs.getObject(i) == null ? "" :
rs.getObject(i).toString().trim());
}
}
c.add(hm);
if (!rs.next())
break;
} while (--pageSize > 0);
}
catch(IOException ioe){
}
return c;
}
public class Example1 extends Thread {
/**
* 閫氳繃緇ф壙綰跨▼綾? 閲嶅啓run鏂規硶.
*/
public void run(){
System.out.println("thread begin!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Example1 examp = new Example1();
examp.start();
}
}
-----
package david;
public class Example2 implements Runnable {
/**
* 閫氳繃瀹炵幇Runnable鎺ュ彛, 瀹屾垚run鏂規硶.
*/
public static void main(String[] args) {
Example2 examp = new Example2();
Thread thread = new Thread(examp);
thread.start();
}
public void run() {
System.out.println("thread begin!");
}
}
----
package david;
public class Thread1 implements Runnable {
/**
* synchronized鍚屾閿?br />
*/
public void run() {
synchronized (this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()
+ " synchronized loop " + i);
}
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t1, "B");
ta.start();
tb.start();
}
}
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class Test {
/**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss",
Locale.ENGLISH);
System.out.println(dateFormat.format(cal.getTime()));
}
}