亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? testclientsyncsource.java

?? 通過SyncML對異構數據庫復制的代碼。如何通過Sync4J作為服務進行同步。
?? JAVA
字號:
package test.sync4j;import sync4j.syncclient.spds.SyncException;import sync4j.syncclient.spds.engine.SyncItem;import sync4j.syncclient.spds.engine.SyncItemImpl;import sync4j.syncclient.spds.engine.SyncItemKey;import sync4j.syncclient.spds.engine.SyncItemProperty;import sync4j.syncclient.spds.engine.SyncItemState;import sync4j.syncclient.spds.engine.SyncSource;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;import java.security.Principal;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.text.MessageFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class TestClientSyncSource implements SyncSource{	private static final String JDBC_RECORDSET_MIMETYPE = "application/vnd.syncml+xmlrecordset";	private static final String METADATA_COLUMN_NAME = "COLUMN_NAME";	private static final int SQL_GET_ALL_ITEMS = 0;	private static final int SQL_GET_ALL_ITEMS_SINCE = 1;	private static final int SQL_GET_ITEMS = 2;	private static final int SQL_GET_ITEMS_SINCE = 3;	private static final int SQL_DELETE_ITEM = 4;	private static final int SQL_ADD_ITEM = 5;	private static final int SQL_UPDATE_ITEM = 6;	private boolean initialised;	private DataSource dataSource;	private String[] columnNames;	private String[] sqlStatements;	private String name;	private String type;	private String sourceURI;	private String jndiName;	private String jdbcDriver;	private String urlConnection;	private String userConnection;	private String passwordConnection;	private String tableName;	private String keyColumnName;	private String timestampColumnName;	private String stateColumnName;	private String catalogName;	private String schemaName;	public TestClientSyncSource(){		type = JDBC_RECORDSET_MIMETYPE;		initialised = false;	}	public void init() throws SyncException{		//Initialize the jndi datasource if provided		if(jndiName != null && jndiName.length() > 0){			try{				dataSource = (DataSource)new InitialContext().lookup(jndiName);			}			catch(NamingException e){				throw new SyncException("Data source not found: " + jndiName, e);			}		}		//Get the table's column names (excluding key, timestamp, state columns)		Connection connection = null;		try{			connection = getConnection();			columnNames = getColumnNames(connection.getMetaData(), catalogName, schemaName, tableName);		}		catch(SQLException e){			throw new SyncException("SQL exception initializing " + getClass().getName(), e);		}		finally{			closeConnection(connection);		}		//Prepare sql statements		sqlStatements = buildSql();	}	public String getName(){		return name;	}	public void setName(String name){		this.name = name;	}	public String getType(){		return type;	}	public void setType(String type){		this.type = type;	}	public String getSourceURI(){		return sourceURI;	}	public void setSourceURI(String sourceURI){		this.sourceURI = sourceURI;	}	public String getJndiName(){		return jndiName;	}	public void setJndiName(String jndiName){		this.jndiName = jndiName;	}	public String getJdbcDriver(){		return jdbcDriver;	}	public void setJdbcDriver(String jdbcDriver){		this.jdbcDriver = jdbcDriver;	}	public String getUrlConnection(){		return urlConnection;	}	public void setUrlConnection(String urlConnection){		this.urlConnection = urlConnection;	}	public String getUserConnection(){		return userConnection;	}	public void setUserConnection(String userConnection){		this.userConnection = userConnection;	}	public String getPasswordConnection(){		return passwordConnection;	}	public void setPasswordConnection(String passwordConnection){		this.passwordConnection = passwordConnection;	}	public String getTableName(){		return tableName;	}	public void setTableName(String tableName){		this.tableName = tableName;	}	public String getKeyColumnName(){		return keyColumnName;	}	public void setKeyColumnName(String keyColumnName){		this.keyColumnName = keyColumnName;	}	public String getTimestampColumnName(){		return timestampColumnName;	}	public void setTimestampColumnName(String timestampColumnName){		this.timestampColumnName = timestampColumnName;	}	public String getStateColumnName(){		return stateColumnName;	}	public void setStateColumnName(String stateColumnName){		this.stateColumnName = stateColumnName;	}	public String getCatalogName(){		return catalogName;	}	public void setCatalogName(String catalogName){		this.catalogName = catalogName;	}	public String getSchemaName(){		return schemaName;	}	public void setSchemaName(String schemaName){		this.schemaName = schemaName;	}	public String toString(){		StringBuffer sb = new StringBuffer(super.toString());		sb.append(" - { ");		sb.append("name: ").append(name).append(", ");		sb.append("jndiName: ").append(jndiName).append(", ");		sb.append("jdbcDriver: ").append(jdbcDriver).append(", ");		sb.append("urlConnection: ").append(urlConnection).append(", ");		sb.append("userConnection: ").append(userConnection).append(", ");		sb.append("passwordConnection: ").append(passwordConnection).append(", ");		sb.append("tableName: ").append(tableName).append(", ");		sb.append("keyColumnName: ").append(keyColumnName).append(", ");		sb.append("timestampColumnName: ").append(timestampColumnName).append(", ");		sb.append("stateColumnName: ").append(stateColumnName).append(" }");		return sb.toString();	}	public void beginSync(int type) throws SyncException{		if(!initialised){			init();			initialised = true;		}	}	public void commitSync() throws SyncException{	}	public SyncItem[] getAllSyncItems(Principal principal) throws SyncException{		//Get all sync items		return getSyncItems(SyncItemState.UNKNOWN, null);	}	public SyncItem[] getDeletedSyncItems(Principal principal, Date since) throws SyncException{		//Get all deleted sync items since the specified date		return getSyncItems(SyncItemState.DELETED, new Timestamp(since.getTime()));	}	public SyncItem[] getNewSyncItems(Principal principal, Date since) throws SyncException{		//Get all new sync items since the specified date		return getSyncItems(SyncItemState.NEW, new Timestamp(since.getTime()));	}	public SyncItem[] getUpdatedSyncItems(Principal principal, Date since) throws SyncException{		//Get all updated sync items since the specified date		return getSyncItems(SyncItemState.UPDATED, new Timestamp(since.getTime()));	}	public void removeSyncItem(Principal principal, SyncItem syncItem) throws SyncException{		//Delete a sync item		Connection connection = null;		try{			connection = getConnection();			PreparedStatement statement = connection.prepareStatement(sqlStatements[SQL_DELETE_ITEM]);			statement.setTimestamp(1, new Timestamp(System.currentTimeMillis()));			statement.setString(2, syncItem.getKey().getKeyAsString());			statement.executeUpdate();		}		catch(SQLException e){			throw new SyncException("Error removing item " +				syncItem.getKey().getKeyAsString(), e);		}		finally{			closeConnection(connection);		}	}	public SyncItem setSyncItem(Principal principal, SyncItem syncItem) throws SyncException{		//Set a sync item with specified item data		String[] values = xmlToValues(new String((byte[])syncItem.getPropertyValue(SyncItem.PROPERTY_BINARY_CONTENT)));		Date timestamp = (Date)syncItem.getPropertyValue(SyncItem.PROPERTY_TIMESTAMP);		Connection connection = null;		try{			//Try to update item			connection = getConnection();			PreparedStatement statement = connection.prepareStatement(sqlStatements[SQL_UPDATE_ITEM]);			statement.setString(1, String.valueOf(SyncItemState.UPDATED));			statement.setTimestamp(2, new Timestamp(timestamp.getTime()));			for(int i = 0; i < values.length; ++i){				statement.setString(i + 3, values[i]);			}			statement.setString(values.length + 3, syncItem.getKey().getKeyAsString());			if(statement.executeUpdate() != 0){				return syncItem;			}			//Update failed, add new item			try{				statement.close();			}			catch(SQLException e){			}			statement = connection.prepareStatement(sqlStatements[SQL_ADD_ITEM]);			statement.setString(1, String.valueOf(SyncItemState.NEW));			statement.setTimestamp(2, new Timestamp(timestamp.getTime()));			statement.setString(3, syncItem.getKey().getKeyAsString());			for(int i = 0; i < columnNames.length; ++i){				statement.setString(i + 4, values[i]);			}			statement.executeUpdate();		}		catch(SQLException e){			throw new SyncException("Error setting item " +				syncItem.getKey().getKeyAsString(), e);		}		finally{			closeConnection(connection);		}		return syncItem;	}	private static String[] xmlToValues(String xml){		//Fix for Sync4J 2.0, remove for newer releases		if(xml != null) xml = xml.replaceAll("&lt;", "<");		//Extract values from xml		List values = new ArrayList();		for(int end, offset = 0; offset < xml.length(); offset = end + 8){			offset = xml.indexOf("<field>", offset);			if(offset < 0){				break;			}			offset += 7;			end = xml.indexOf("</field>", offset);			if(end < 0){				break;			}			values.add(xml.substring(offset, end));		}		return (String[])values.toArray(new String[values.size()]);	}	public SyncItem[] setSyncItems(Principal principal, SyncItem[] syncItems) throws SyncException{		//Set sync items with specified data		if(syncItems != null){			for(int i = 0; i < syncItems.length; i++){				setSyncItem(principal, syncItems[i]);			}		}		return syncItems;	}	public SyncItem getSyncItemFromId(Principal principal, SyncItemKey syncItemKey) throws SyncException{		return null;	}	public SyncItem[] getSyncItemsFromIds(Principal principal, SyncItemKey[] syncItemsKeys) throws SyncException{		return new SyncItem[0];	}	public SyncItem getSyncItemFromTwin(Principal principal, SyncItem syncItem) throws SyncException{		return null;	}	public SyncItem[] getSyncItemsFromTwins(Principal principal, SyncItem[] syncItem) throws SyncException{		return new SyncItem[0];	}	private SyncItem[] getSyncItems(char state, Timestamp since) throws SyncException{		//Get sync items based on state and last modification timestamp		List items = new ArrayList();		Connection connection = null;		try{			connection = getConnection();			PreparedStatement statement;			if(state == SyncItemState.UNKNOWN){				//Get all items				if(since == null){					statement = connection.prepareStatement(sqlStatements[SQL_GET_ALL_ITEMS]);				}				//Get all items since timestamp				else{					statement = connection.prepareStatement(sqlStatements[SQL_GET_ALL_ITEMS_SINCE]);					statement.setTimestamp(1, since);				}			}			else{				//Get items with state				if(since == null){					statement = connection.prepareStatement(sqlStatements[SQL_GET_ITEMS]);					statement.setString(1, String.valueOf(state));				}				//Get items with state since timestamp				else{					statement = connection.prepareStatement(sqlStatements[SQL_GET_ITEMS_SINCE]);					statement.setString(1, String.valueOf(state));					statement.setTimestamp(2, since);				}			}			//Build sync items from the resultset			for(ResultSet rs = statement.executeQuery(); rs.next();){				items.add(rowToSyncItem(rs));			}		}		catch(SQLException e){			throw new SyncException("Error getting items", e);		}		finally{			closeConnection(connection);		}		return (SyncItem[])items.toArray(new SyncItem[items.size()]);	}	private SyncItem rowToSyncItem(ResultSet rs) throws SQLException{		//Convert a database record to a sync item		StringBuffer xml = new StringBuffer();		xml.append("<![CDATA[\n");		xml.append("<record>\n");		for(int i = 0; i < columnNames.length; i++){			xml.append("<field>").append(rs.getString(columnNames[i])).append("</field>\n");		}		xml.append("</record>\n");		xml.append("]]>\n");		SyncItem item = new SyncItemImpl(this, rs.getString(keyColumnName),			rs.getString(stateColumnName).charAt(0));		item.setProperty(new SyncItemProperty(SyncItem.PROPERTY_BINARY_CONTENT,			xml.toString().getBytes()));		return item;	}	private Connection getConnection() throws SQLException{		if(dataSource != null){			return dataSource.getConnection();		}		try{			Class.forName(jdbcDriver);		}		catch(ClassNotFoundException e){			e.printStackTrace();		}		return DriverManager.getConnection(urlConnection, userConnection, passwordConnection);	}	private static void closeConnection(Connection connection){		if(connection != null){			try{				connection.close();			}			catch(SQLException e){			}		}	}	private String[] getColumnNames(DatabaseMetaData metaData, String catalog, String schema, String tableName) throws SQLException{		String catalogName = (catalog == null || catalog.length() <= 0) ? null : catalog;		String schemaName = (schema == null || schema.length() <= 0) ? metaData.getUserName() : schema;		ResultSet rs = metaData.getColumns(catalogName, schemaName, tableName, "%");		List columnNames = new ArrayList();		while(rs.next()){			String columnName = rs.getString(METADATA_COLUMN_NAME);			//Skip key, timestamp and state columns			if(!(keyColumnName.equalsIgnoreCase(columnName) ||				timestampColumnName.equalsIgnoreCase(columnName) ||				stateColumnName.equalsIgnoreCase(columnName)) &&				!columnNames.contains(columnName)){				columnNames.add(columnName);			}		}		try{			rs.close();		}		catch(SQLException e){		}		return (String[])columnNames.toArray(new String[columnNames.size()]);	}	private String[] buildSql(){		StringBuffer columns = new StringBuffer();		StringBuffer columnValues = new StringBuffer();		StringBuffer columnAssignments = new StringBuffer();		for(int i = 0; i < columnNames.length; ++i){			columns.append(", ").append(columnNames[i]);			columnValues.append(", ?");			columnAssignments.append(", ").append(columnNames[i]).append(" = ?");		}		Object[] args = new Object[]{			tableName,			stateColumnName,			timestampColumnName,			keyColumnName,			columns.toString(),			columnValues.toString(),			columnAssignments.toString()		};		String[] sql = new String[]{			"select * from {0}",			"select * from {0} where {2} > ?",			"select * from {0} where {1} = ?",			"select * from {0} where {1} = ? and {2} > ?",			"update {0} set {1} = ''D'', {2} = ? where {3} = ?",			"insert into {0} ({1}, {2}, {3}{4}) values(?, ?, ?{5})",			"update {0} set {1} = ?, {2} = ?{6} where {3} = ?"		};		for(int i = 0; i < sql.length; i++){			sql[i] = MessageFormat.format(sql[i], args);		}		return sql;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产自产在线观看一区| 国产乱子轮精品视频| 国产欧美精品一区二区色综合朱莉 | 色婷婷久久久综合中文字幕 | 欧美日韩的一区二区| 欧美亚男人的天堂| 欧美视频一区二区在线观看| 色婷婷久久一区二区三区麻豆| 97国产一区二区| 北条麻妃一区二区三区| 99热国产精品| 色婷婷av久久久久久久| 91麻豆国产自产在线观看| 91女厕偷拍女厕偷拍高清| 91精品福利视频| 欧美日韩国产综合一区二区| 宅男在线国产精品| 久久一留热品黄| 《视频一区视频二区| 亚洲h动漫在线| 男女男精品网站| 国产精品自在欧美一区| 国产成人欧美日韩在线电影| 91美女片黄在线观看91美女| 欧美在线你懂的| 91精品欧美一区二区三区综合在| 精品国精品国产尤物美女| 国产亚洲精品久| 欧美国产日韩在线观看| 亚洲影视资源网| 国内久久精品视频| 日本高清不卡视频| 91精品国产91综合久久蜜臀| 日韩三级免费观看| 亚洲国产岛国毛片在线| 亚洲图片自拍偷拍| 国产精品亚洲第一区在线暖暖韩国| 不卡欧美aaaaa| 欧美色综合网站| 日韩av电影免费观看高清完整版在线观看| 全国精品久久少妇| 91在线观看成人| 欧美在线观看视频在线| 国产午夜亚洲精品羞羞网站| 一区二区三区在线观看网站| 天天色 色综合| 日韩电影免费在线| 一本大道久久a久久综合婷婷| 欧美日韩视频在线一区二区| 欧洲精品在线观看| 久久午夜免费电影| 亚洲综合色视频| 懂色av噜噜一区二区三区av| 在线观看欧美精品| 欧美色图片你懂的| 色视频成人在线观看免| 精品美女被调教视频大全网站| 日韩欧美在线1卡| 精品理论电影在线观看| 国产精品久久久久久久久晋中| 免费的国产精品| 91麻豆视频网站| 亚洲国产精品传媒在线观看| 国产一区二区不卡| 91精品在线麻豆| 日日夜夜免费精品视频| 97久久超碰国产精品| 国产精品素人一区二区| 国产呦萝稀缺另类资源| 精品免费视频.| 久久成人免费日本黄色| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲美女精品一区| 91在线丨porny丨国产| 一区精品在线播放| 色诱亚洲精品久久久久久| 中文字幕一区二区三区在线不卡| 国产aⅴ综合色| 欧美激情在线一区二区三区| 粉嫩aⅴ一区二区三区四区| 国产欧美一区视频| 粉嫩欧美一区二区三区高清影视 | 欧美疯狂做受xxxx富婆| 亚洲三级小视频| 国产aⅴ精品一区二区三区色成熟| 7777女厕盗摄久久久| 美日韩黄色大片| 欧美一区二区视频网站| 亚洲综合激情网| 欧美电影一区二区三区| 日本va欧美va瓶| 久久毛片高清国产| 日本欧美在线观看| 久久久不卡影院| 97成人超碰视| 日韩精品乱码免费| 26uuu亚洲| 成人福利视频在线看| 日韩一区二区三区高清免费看看| 亚洲成人一区二区在线观看| 欧美日韩久久久| 国产乱码精品一区二区三| 国产精品国产三级国产专播品爱网 | 亚洲私人黄色宅男| 555www色欧美视频| 国产成a人亚洲| 亚洲成a人片在线不卡一二三区| 日韩一级大片在线观看| 日韩高清欧美激情| 91精品国模一区二区三区| 国产在线一区二区综合免费视频| 中文av一区二区| a在线播放不卡| 日韩二区在线观看| 日韩视频不卡中文| www.久久精品| 久久99精品国产91久久来源| 国产日本欧洲亚洲| 制服丝袜成人动漫| 99国产精品久| 国产精品69久久久久水密桃| 亚洲福利视频一区二区| 日韩一区在线播放| 久久久精品欧美丰满| 欧美绝品在线观看成人午夜影视| 波多野结衣视频一区| 亚洲成人免费视| 亚洲18色成人| 国产视频在线观看一区二区三区 | 国产一区二区三区美女| 一区2区3区在线看| 51午夜精品国产| 国产不卡视频一区二区三区| 中文字幕一区日韩精品欧美| 开心九九激情九九欧美日韩精美视频电影 | 国产欧美视频在线观看| 一区二区三区四区不卡视频| 国产欧美精品一区aⅴ影院 | 美女在线观看视频一区二区| 亚洲欧美在线另类| 一本一道久久a久久精品| 免费观看日韩电影| 亚洲蜜桃精久久久久久久| 久久久精品免费网站| 在线免费观看视频一区| 成人av手机在线观看| 麻豆精品新av中文字幕| 亚洲人成伊人成综合网小说| 久久久久久免费网| 国产精品一级在线| 欧美日韩一区精品| 亚洲主播在线观看| 国产日本一区二区| 日本一区免费视频| 欧美xingq一区二区| 91麻豆精品91久久久久久清纯 | 亚洲一区二区三区激情| 欧美绝品在线观看成人午夜影视| 一区二区三区丝袜| 久久一区二区三区国产精品| 欧美日韩极品在线观看一区| 国产在线乱码一区二区三区| 欧美系列亚洲系列| 久久69国产一区二区蜜臀| 日韩国产成人精品| 久久精品无码一区二区三区| 99久久综合精品| 久久一区二区三区国产精品| 中文字幕一区不卡| 91超碰这里只有精品国产| 亚洲免费在线看| 日本高清不卡一区| 欧美日韩国产小视频| 国产不卡视频一区二区三区| 精品成a人在线观看| 久久精品亚洲精品国产欧美kt∨| 麻豆精品国产91久久久久久| 99国产精品国产精品毛片| 在线成人高清不卡| 欧美精品一二三| 波多野结衣在线aⅴ中文字幕不卡| 欧美巨大另类极品videosbest | 激情综合网最新| 另类小说综合欧美亚洲| 美洲天堂一区二卡三卡四卡视频| 国产在线精品一区在线观看麻豆| 国产精品一区二区你懂的| 色999日韩国产欧美一区二区| 91精品在线一区二区| 国产精品久久久久久久久搜平片| 亚洲一区在线视频观看| 狠狠色丁香久久婷婷综合_中 | 精品国产3级a| 成人免费在线视频| 麻豆一区二区99久久久久| 高清在线成人网| 欧美精品第1页| 国产精品久久看| 美女性感视频久久| 色哟哟国产精品免费观看|