昨天调试了一下数据迁移,因为数据量比较大,所以决定还是采用JDBC来完成数据迁移
程序代码
public void initTransplantStatus () throws Exception
{
Connection conn=null;
Statement st=null;
ResultSet rs=null;
String sql="";
int id=20;
int i=1;
try{
conn=DBUtil.getConnection();
conn.setAutoCommit(true);
st=conn.createStatement();
st2=conn.createStatement();
st.execute("delete from transplant_status");
rs=st.executeQuery("select t.id,cl.id from school t join classes cl on t.id=cl.school_id order by t.id");
while(rs.next())
{
id=id+10;
sql="insert into transplant_status values('"+id+"','"+rs.getString(1)+"','"+rs.getString(2)+"','0',sysdate)";
st.execute(sql);
}
conn.commit();
rs.close();
st.close();
}catch(Exception e)
{
System.out.println(e.getMessage());
err="
初始化迁移状态表时出错!";
throw new Exception(e.getMessage());
}
}
上
面的程序是不正确的,直接的结果就是初始化迁移状态表时只有一条记录;原因是ResultSet是依赖于Statement的,Statement在执行
execute后,记录集的结果将丢失,所以记录集循环只执行了一次,解决方法是记录集的获取或execute操作采用另外的Statement;
程序代码
public void initTransplantStatus () throws Exception
{
Connection conn=null;
Statement st=null;
Statement st2=null;
ResultSet rs=null;
String sql="";
int id=20;
System.out.println(st.KEEP_CURRENT_RESULT);
int i=1;
try{
conn=DBUtil.getConnection();
conn.setAutoCommit(true);
st=conn.createStatement();
st2=conn.createStatement();
st.execute("delete from transplant_status");
rs=st.executeQuery("select t.id,cl.id from school t join classes cl on t.id=cl.school_id order by t.id");
while(rs.next())
{
id=id+10; sql="insert into transplant_status values('"+id+"','"+rs.getString(1)+"','"+rs.getString(2)+"','0',sysdate)";
st2
.execute(sql);
}
conn.commit();
rs.close();
st.close();
st2.close();
}catch(Exception e)
{
System.out.println(e.getMessage());
err="
初始化迁移状态表时出错!";
throw new Exception(e.getMessage());
}
}
在
这里,我
们用id=id+10实现
ORACLE的sequence序列,因为jdbc连接取自于Hibernate,所以不用显式关闭,而交由Hibernate智能管理;
注
意: 由于这里采用的是hibernate的JDBC,所以与纯JDBC有所区别,具体请见:
http://www.gold98.net/blog/article.asp?id=453
在
适当的时候,我
们可以采用批处理,但测
试 过好几次,感觉对比较果不是很明显,这就根据各自需要来定了~
在多表操作时,我
们仍应坚持先conn.setAutoCommit(false)后
conn.setAutoCommit(true)的原则;
分享到:
相关推荐
把JDBC应用改成JPA程序,需要把原来... 使用DriverManager,Connection,Statement,ResultSet等; 而使用JPA完成数据的操作包括:  得到JDBC驱动程序;  得到持久性提供者相关类库和配置文件;
java.sql和javax.sql两个包中的类与接口(天龙八部): DataSource:数据源 DriverManager:驱动管理 Driver:JDBC驱动 Connection:数据库连接 Statement:语句,执行SQL PrepareStatement:预编译语句,...
Java连接数据库,项目直接导入类使用 *类内有注释参考~ 注: Statement与ResultSet资源需手动释放!!
JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合于企业网或三层结构应用程序 <2>.本地API:需要驱动程序的二进制代码支持 <3>.JDBC网络纯java...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...
4、掌握JDBC中几个重要类的使用:Connection、Statement、ResultSet;5、理解JDBC操作数据库的一般步骤;6、掌握SQLException的异常处理;7、理解数据库事务、JDBC对事务的支持、以及JDBC事务的原理和如何使用JDBC事务...
JDBC访问数据库需要用到一些相关的类和接口,主要有数据库的jdbc驱动程序,DriverManager,Connection, Statement, ResultSet,SQLException等。为了将这些复杂的细节与数据库应用程序的设计者隔离开,请设计一个...
目录 前言 1 参考资料 1 第1章 JDBC概述 2 1.1 JDBC用途 2 第2章 主要调用对象接口介绍 2 2.1 connection对象 2 ...2.4 ResultSet对象 9 2.4.1 行和光标 9 2.4.2 列 10 第3章 常用数据库JDBC写法 10
其中,与数据库的连接声明成了成员变量,建立连接后可执行各种操作,每个类中的statement、resultset等操作在方法内均关闭,但数据库连接没有关闭,需要在操作完成后调用其中的 closeConnection方法关闭;...
import java.sql.ResultSet; import java.sql.Statement; public class Greenplum { public static void main(String args[]) throws Exception{ Class.forName("com.pivotal.jdbc.GreenplumDriver"); ...
GBase 8s JDBC 驱动程序提供了多种类来实现数据库连接和访问,包括 Driver、Connection、Statement、ResultSet 等。 2.3.2 GBase 8s JDBC 驱动程序中的文件 GBase 8s JDBC 驱动程序提供了多种文件来实现数据库连接...
编写Java代码,熟悉并掌握JDBC的使用,包括Connection、Statement、ResultSet等对象的使用。了解JDBC访问数据库的方法。
Statement stm = con.createStatement(); String sql = "select * from sheet"; for(int i=0;i;i++){ ResultSet rs = stm.executeQuery(sql); while (rs.next()){ System.out.println(rs.getString("NAME")); ...
JDBC连接所有数据库步骤 1 将数据库的JDBC驱动加载到classpath中,在基于JAVAEE的WEB应用实际开发过程中,通常要把目标...7 依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放所占用的资源。
java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的...
在JDBC技术规范中,提供了Connection,Statement,ResultSet这三个开发过程中经常用到的接口。针对与每个接口,JDBC规范提供了相应的接口描述对象,也就是xxxMetaData系列描述对象。DatabaseMetaData和...
/** * @param args * 查询功能 */ ... Statement st = null; ResultSet rs = null; String quersql = null; ArrayList<UserBean> listUserBean = new ArrayList(); try {
ResultSet rs= statement.executeQuery("select * from test"); while(rs.next()){ System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4)+"\t"+rs.getString...
2.2.4 创建Statement并发送命令 2.2.5 处理ResultSet结果 2.2.6 关闭数据库资源 3.准备工作 3.1 创建数据库并创建student表 3.2 创建项目 3.3 创建lib目录并引入MYSQL驱动包 3.4 把lib包引入项目环境 4.使用...