62,621
社区成员
发帖
与我相关
我的任务
分享public static void downLoadFiber(Context context,String domain,String region)throws SQLException
{
logger.info("开始下载纤芯数据...");
Connection conn_remote=context.getConnection1();//本链接为访问远程数据库
Connection conn_local=context.getConnection();//本链接为访问本地数据库
long a0 = System.currentTimeMillis () ;
PreparedStatement stmt = null ;
String delSql = "DELETE FROM GISFIBER FB WHERE FB.ID IN (SELECT DISTINCT F.ID FROM GISCABLESECTION CS,GISCABLETERM T," +
"GISFIBER F WHERE (T.ID=CS.ATERMID OR T.ID=CS.ZTERMID) AND CS.ID=F.CABLESECTIONID AND T.REGIONCODE='"+region+"')";
String countSql = "SELECT COUNT(1) AS CNT FROM GISFIBER FB WHERE FB.ID IN (SELECT DISTINCT F.ID FROM GISCABLESECTION CS,GISCABLETERM T," +
"GISFIBER F WHERE (T.ID=CS.ATERMID OR T.ID=CS.ZTERMID) AND CS.ID=F.CABLESECTIONID AND T.REGIONCODE='"+region+"')";
int count=0;
PreparedStatement delete = null;
try
{
//下载前先删除本地的纤芯数据
delete = conn_local.prepareStatement(delSql);
delete.executeUpdate();
conn_local.commit();
//统计待下载的纤芯数据总量
stmt = conn_remote.prepareStatement ( countSql ) ;
ResultSet record = stmt.executeQuery () ;
while ( record.next () )
{
count=record.getInt("CNT");
}
//之前为缓解内存溢出问题,使用了分页方法,但是好像没怎么作用
int pageSize=30000;
int iPageCount = (count + pageSize - 1) / pageSize;
if(ServerEnvironment.getDbType1().equalsIgnoreCase(GisConst.DB_POSTGRESQL)){
for (int iPage = 1; iPage <= iPageCount; iPage++) {
StringBuffer strSQL = new StringBuffer();
strSQL.append("SELECT * FROM GISFIBER FB WHERE FB.ID IN (SELECT DISTINCT F.ID FROM GISCABLESECTION CS,GISCABLETERM T,")
.append("GISFIBER F WHERE (T.ID=CS.ATERMID OR T.ID=CS.ZTERMID) AND CS.ID=F.CABLESECTIONID AND T.REGIONCODE='")
.append(region).append("')").append(" ORDER BY FB.ID LIMIT ").append(pageSize)
.append(" OFFSET ").append((iPage - 1) * pageSize);
stmt = conn_remote.prepareStatement ( strSQL.toString() ) ;
record = stmt.executeQuery () ;
YFiber fiber=null;
while ( record.next () )
{
fiber = YObjectConvertor.toFiber(record);
GisWrite.create(context, fiber);
conn_local.commit();
}
}
}else{
logger.info("Oracle数据库分页下载方法尚未补全!");
}
record.close () ;
record = null ;
}
finally
{
GisUtil.closeStatement(delete);
GisUtil.closeStatement(stmt);
}
long a1 = System.currentTimeMillis () ;
logger.info ( "纤芯数据下载完毕,共计"+count+"条记录,耗时"+ ( a1 - a0 ) +" ms" ) ;
}