/**
* 從數(shù)據(jù)庫(kù)中查詢IRI和KLO模型的數(shù)據(jù),并下載到本地
* @param dataTime 時(shí)次
* @param outIRIFilePath IRI文件下載到本地的路徑
* @param outKLOFilePath KLO文件下載到本地的路徑
* @param outAnaFilePath 插值文件下載到本地的路徑
*/
@SuppressWarnings("static-access")
public static void selectBlogInfo(String dataTime, String outIRIFilePath, String outKLOFilePath, String outAnaFilePath) {
try {
Connection con = DBConnectionManager.getInstance().getConnection();
Statement st = con.createStatement();
String sql = "select * from MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24')";
ResultSet rs = st.executeQuery(sql);
if (rs.next()) {
Blob blod = rs.getBlob("IRIDATA");
InputStream reader = blod.getBinaryStream();
dataTime = dataTime.replaceAll("-", "");
dataTime = dataTime.replaceAll(" ", "");
String iriFilePath = outIRIFilePath+"\\"+dataTime+"0000.iri.grd";
File file = new File(iriFilePath);
OutputStream writer;
writer = new BufferedOutputStream(new FileOutputStream(file));
byte buf[] = new byte[1024];
for (int i = 0; (i = reader.read(buf)) > 0;) {
writer.write(buf, 0, i);
}
writer.close();
reader.close();
blod = rs.getBlob("IRIDATA");
reader = blod.getBinaryStream();
String kloFilePath = outKLOFilePath+"\\"+dataTime+"0000.klo.grd";
file = new File(kloFilePath);
writer = new BufferedOutputStream(new FileOutputStream(file));
buf = new byte[1024];
for (int i = 0; (i = reader.read(buf)) > 0;) {
writer.write(buf, 0, i);
}
writer.close();
reader.close();
blod = rs.getBlob("ANADATA");
reader = blod.getBinaryStream();
String anaFilePath = outAnaFilePath+"\\"+dataTime+"0000.grd";
file = new File(anaFilePath);
writer = new BufferedOutputStream(new FileOutputStream(file));
buf = new byte[1024];
for (int i = 0; (i = reader.read(buf)) > 0;) {
writer.write(buf, 0, i);
}
writer.close();
reader.close();
}
DBConnectionManager.closeConnection();
if(con!=null){con.close();}
if(st!=null){st.close();}
if(rs!=null){rs.close();}
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 把IRI和KLO模型的文件上傳到數(shù)據(jù)庫(kù)中
* @param dataTime 時(shí)次
* @param iriFilePath 要上傳IRI文件的絕對(duì)路徑
* @param kloFilePath 要上傳KLO文件的據(jù)對(duì)路徑
* @param ANAFilePath 要上傳插值文件的據(jù)對(duì)路徑
*/
@SuppressWarnings("static-access")
public static void insertBlogInfo(String dataTime, String IRIFilePath, String KLOFilePath, String ANAFilePath) {
try {
Connection con = DBConnectionManager.getInstance().getConnection();
// 處理事務(wù)
boolean defaultCommit;
defaultCommit = con.getAutoCommit();
con.setAutoCommit(false);
Statement st = con.createStatement();
String sql = "select * from MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24')";
ResultSet rs = st.executeQuery(sql);
if(rs.next()){
System.out.println(dataTime+"時(shí)次已經(jīng)入庫(kù)!");
return ;
}
// 插入一個(gè)空對(duì)象
sql = "insert into MODELTEC(ID, DATATIME, IRIDATA, KLODATA, ANADATA) values(" +
"SEQU_MODEL_ID.nextval, " +
"to_date('"+dataTime+"','YYYY-mm-dd HH24'), " +
"empty_blob(), " +
"empty_blob(), " +
"empty_blob())";
st.executeUpdate(sql);
// 用for update方式鎖定數(shù)據(jù)行
sql = "select IRIDATA,KLODATA,ANADATA from MODELTEC where DATATIME=to_date('"+dataTime+"', 'YYYY-mm-dd HH24') for update";
rs = st.executeQuery(sql);
if (rs.next()) {
// 得到j(luò)ava.sql.Blob對(duì)象,然后Cast為oracle.sql.BLOB
BLOB blob = (BLOB) rs.getBlob("IRIDATA");
// 到數(shù)據(jù)庫(kù)的輸出流
OutputStream outStream = blob.getBinaryOutputStream();
// 這里用一個(gè)文件模擬輸入流
InputStream fin = new FileInputStream(new File(IRIFilePath));
// 將輸入流寫到輸出流
byte[] b = new byte[blob.getBufferSize()];
int len = 0;
while ((len = fin.read(b)) != -1) {
outStream.write(b, 0, len);
}
// 依次關(guān)閉(注意順序)
fin.close();
outStream.flush();
outStream.close();
// 得到j(luò)ava.sql.Blob對(duì)象,然后Cast為oracle.sql.BLOB
blob = (BLOB) rs.getBlob("KLODATA");
// 到數(shù)據(jù)庫(kù)的輸出流
outStream = blob.getBinaryOutputStream();
// 這里用一個(gè)文件模擬輸入流
fin = new FileInputStream(new File(IRIFilePath));
// 將輸入流寫到輸出流
b = new byte[blob.getBufferSize()];
len = 0;
while ((len = fin.read(b)) != -1) {
outStream.write(b, 0, len);
}
// 依次關(guān)閉(注意順序)
fin.close();
outStream.flush();
outStream.close();
// 得到j(luò)ava.sql.Blob對(duì)象,然后Cast為oracle.sql.BLOB
blob = (BLOB) rs.getBlob("ANADATA");
// 到數(shù)據(jù)庫(kù)的輸出流
outStream = blob.getBinaryOutputStream();
// 這里用一個(gè)文件模擬輸入流
fin = new FileInputStream(new File(ANAFilePath));
// 將輸入流寫到輸出流
b = new byte[blob.getBufferSize()];
len = 0;
while ((len = fin.read(b)) != -1) {
outStream.write(b, 0, len);
}
// 依次關(guān)閉(注意順序)
fin.close();
outStream.flush();
outStream.close();
con.commit();
/* 恢復(fù)原提交狀態(tài) */
con.setAutoCommit(defaultCommit);
DBConnectionManager.closeConnection();
if(con!=null){con.close();}
if(st!=null){st.close();}
if(rs!=null){rs.close();}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}