WebRowSet批量读取数据和批量保存数据 高手帮看看
//数据批量读取函数,没问题,代码如下:
public ByteArrayOutputStream getDBStream(String sSQL) throws IOException, SQLException{
ResultSet rs = null;
WebRowSet wr= null;
try{
//ResultSet rs = stmt.executeQuery("select top 10 * from t_exit");
rs = stmt.executeQuery(sSQL);
wr= new WebRowSetImpl();
ByteArrayOutputStream os = new ByteArrayOutputStream() ;
wr.populate(rs);
wr.writeXml(os);
return os;
}
catch(SQLException e){
e.printStackTrace();
return null;
}
catch(IOException e){
e.printStackTrace();
return null;
}
finally{
rs.close();
wr.close();
}
}
//数据存储测试1,更新失败?????????
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
//ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
byte[] buff = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(buff);
ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
rs = stmt.executeQuery("select top 1 * from t_test");
wr= new WebRowSetImpl();
wr.populate(rs);
wr.first();
wr.updateString(3, "terry");
wr.updateRow();
wr.acceptChanges(conn); // 错误:无法确定表名 ?? 网上说可以 wr.populate(rs); 就可以了
}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}
return 1;
}
//数据存储测试2,更新成功失败,插入失败 ????????????
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
//ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
byte[] buff = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(buff);
ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
//rs = stmt.executeQuery("select top 1 * from t_test");
wr= new WebRowSetImpl();
//wr.populate(rs);
wr.setUrl(url);
wr.setUsername(uid);
wr.setPassword(pwd);
wr.setCommand("select top 1 * from t_test");
wr.execute();
wr.first();
wr.updateString(3, "terry");
wr.updateRow();
wr.last();
wr.moveToInsertRow();
wr.updateInt(2, 3);
wr.updateString(3, "t1");
wr.insertRow();
wr.moveToCurrentRow();
wr.acceptChanges(conn); //成功更新数据 ,但插入失败,单独执行插入也不行,看来插入代码有问题,高手帮看看
}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}
return 1;
}
//调用代码为
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
// TODO add your handling code here:
ByteArrayOutputStream out=dbtest.getDBStream("select top 10 * from t_exit");
if (1==dbtest.PutDBStream(out)){
jTextArea1.append("/r/n保存数据成功");
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
//数据存储测试3,使用getDBStream从t_exit返回读取的数据,然后插入到t_exit_t,
//批量插入数据库,返回成功了,但插入的表里一条数据都没有.读数据,以及传入都是有的
public int PutDBStream(ByteArrayOutputStream os) throws SyncProviderException, SQLException, IOException{
ByteArrayInputStream in = new ByteArrayInputStream(os.toByteArray());
//byte[] buff = os.toByteArray();
//ByteArrayInputStream in = new ByteArrayInputStream(buff);
//ResultSet rs = null;
WebRowSet wr = null;
//Enumeration<SyncProvider> en = SyncFactory.getRegisteredProviders();
//while(en.hasMoreElements()){
// SyncProvider p = en.nextElement();
// System.out.println(p.getClass().getName());
//}
try{
//rs = stmt.executeQuery("select top 1 * from t_test");
wr= new WebRowSetImpl();
//wr.populate(rs);
wr.setUrl(url);
wr.setUsername(uid);
wr.setPassword(pwd);
wr.setCommand("select * from t_exit_t where 1=2");
wr.execute();
wr.readXml(in);
//wr.acceptChanges(conn);
conn.setAutoCommit(false);
try {
wr.acceptChanges(conn);
wr.commit();
} catch (Exception e) {
// expected
e.printStackTrace();
wr.rollback();
conn.setAutoCommit(true);
return 0;
}
conn.setAutoCommit(true);
}
catch(SyncProviderException e){
e.printStackTrace();
return 0;
}
catch(SQLException e){
e.printStackTrace();
return 0;
}
finally{
in.close();
//rs.close();
wr.close();
os.close();
}
return 1;
}