`
cherryQQ
  • 浏览: 1139312 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

oracle PreparedStatement批量插入回滚

阅读更多
1、建立连接
   这个是一切连接数据库的基础,当然这个也比较简单。
   一下是一个连接Sql2000的数据库程序,还有一个显示一个表的方法。
import java.*;

public class ConnectData{
 
private java.sql.Connection con = null;
private java.sql.Statement stmt=null;
private final String url = "jdbc:microsoft:sqlserver://";
private final String serverName= "192.168.0.100";
private final String portNumber = "1433";
private final String databaseName= "hkmis"; //数据库名称
//mydata是手动建的数据库
private final String userName = "hkmisuser";
private final String password = "hkmis123456";

public ConnectData(){}
private String getConnectionUrl(){
return url+serverName+":"+portNumber+";databaseName="+databaseName+";";
}

private java.sql.Connection getConnection(){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);
if(con!=null) System.out.println("Connection Successful!");
}catch(Exception e){
e.printStackTrace();
System.out.println("Error Trace in getConnection() : " + e.getMessage());
}
return con;
}
/*
用于显示一个表
*/
public void displayData(){
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
stmt=con.createStatement();
rs=stmt.executeQuery("select * from userinfo");
//userinfo是mydata中的用户信息表(username,password) 
while(rs.next()){
System.out.println( rs.getString("username")); //显示所有用户
//System.out.println( rs.getString(2));
//System.out.println( rs.getString(3));
}
rs.close(); //这里一定要记得关闭顺序
//先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection
rs = null;
closeConnection();
}else System.out.println("Error: No active Connection");
}catch(Exception e){
e.printStackTrace();
}

}
private void closeConnection(){
try{
if(con!=null)
con.close();
con=null;
}catch(Exception e){
e.printStackTrace();
}
}
//执行测试。。。
public static void main(String[] args) throws Exception
{
ConnectData myDbTest = new ConnectData();
myDbTest.displayData();
}
}
    这里要强调的是,不同的数据库除了使用的Driver不同之外,连接的方式也是不同的,例如,mysql最好加上字体参数,以免出现乱码。而oracle就不需要规定数据库名称。

2、执行sql语句
  1)用Statement来执行sql语句
  String sql;
  Statement sm = cn.createStatement();
  sm.executeQuery(sql); // 执行数据查询语句(select)
  sm.executeUpdate(sql); // 执行数据更新语句(delete、update、insert、drop等)statement.close();
  2)用PreparedStatement来执行sql语句
  String sql;
  sql = "insert into user (id,name) values (?,?)";
  PreparedStatement ps = cn.prepareStatement(sql);
  ps.setInt(1,xxx);
  ps.setString(2,xxx);
  ...
  ResultSet rs = ps.executeQuery(); // 查询
  int c = ps.executeUpdate(); // 更新
  3、处理执行结果
  查询语句,返回记录集ResultSet
  更新语句,返回数字,表示该更新影响的记录数
  ResultSet的方法
  1、next(),将游标往后移动一行,如果成功返回true;否则返回false
  2、getInt("id")或getSting("name"),返回当前游标下某个字段的值
  4、释放连接
  cn.close();
  一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection
  可滚动、更新的记录集
  1、创建可滚动、更新的Statement
  Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);
  该Statement取得的ResultSet就是可滚动的
  2、创建PreparedStatement时指定参数
  PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
  ResultSet.absolute(9000);
  ·批量更新,这个非常重要,是多Sql语句结合体的方法。
  1、Statement
  Statement sm = cn.createStatement();
  sm.addBatch(sql1);
  sm.addBatch(sql2);
  ...
  sm.executeBatch()
  一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有
  2、PreparedStatement
  PreparedStatement ps = cn.preparedStatement(sql);
  {
  ps.setXXX(1,xxx);
  ...
  ps.addBatch();
  }
  ps.executeBatch();  一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。  ·事务的处理
  1、关闭Connection的自动提交,这在oracle中效果非常明显。
  cn.setAutoCommit(false);
  2、执行一系列sql语句
  要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先close
  Statement sm ;
  sm = cn.createStatement(insert into user...);
  sm.executeUpdate();
  sm.close();
  sm = cn.createStatement("insert into corp...);
  sm.executeUpdate();
  sm.close();
  3、提交
  cn.commit();
     4、如果发生异常,那么回滚。例如发现插入不完整时候,都应该回滚保证数据的完整性。
  cn.rollback();
分享到:
评论

相关推荐

    java批量插入Oracle数据方法

    在Java中,批量插入数据到Oracle数据库主要依赖于`PreparedStatement`对象,该对象允许我们预编译SQL语句并多次执行,从而提高效率。相比于单条插入,批量插入减少了网络往返次数,提高了整体的吞吐量。 ### 二、...

    jdbc批量插入大字段

    在Oracle数据库中,Blob类型用于存储大量的二进制数据...总之,批量插入大字段是处理大量Blob数据的关键策略,通过JDBC提供的批处理功能,结合合理的事务管理和内存管理,可以显著提升Oracle数据库中的大数据插入效率。

    批量插入的simple

    在数据库层面,MySQL、PostgreSQL、Oracle等都支持批量插入。例如,在SQL中,你可以使用以下语法: ```sql INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value1, value2, .....

    图片批量导入oracle数据库

    本话题聚焦于如何批量导入图片到Oracle数据库,这是一种常见的需求,特别是在处理大量图像数据的项目中。Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object...

    实例讲解Java批量插入、更新数据

    首先,批量插入数据通常涉及到PreparedStatement对象的使用。PreparedStatement是Statement的子类,它允许预编译SQL语句,从而提高执行效率。以下是一个简单的批量插入示例: ```java String sql = "INSERT INTO ...

    可用于oracle19c的jdbc驱动

    - **性能优化**:通过设置JDBC属性,如批量插入、预编译语句、连接池管理等,可以提升性能。 - **异常处理**:在使用JDBC进行数据库操作时,要妥善处理SQLException和其他可能抛出的异常。 - **事务管理**:JDBC...

    java操作Oracle数据库——ARRAY、TABLE类型批量入库

    Oracle数据库提供了一些高级数据类型,如ARRAY(数组)和TABLE(表),这些数据类型允许我们进行批量数据操作,从而提高性能。本文将深入探讨如何利用Java操作Oracle数据库中的ARRAY和TABLE类型,实现批量入库。 ...

    Oracle驱动包ojdbc6-11.2.0.3

    使用JDBC连接Oracle数据库的基本步骤包括:加载驱动、创建Connection对象、预编译Statement或PreparedStatement对象、执行SQL语句和关闭资源。例如: ```java Class.forName("oracle.jdbc.driver.OracleDriver"); ...

    json格式数据到入oracle数据库java源码

    - 在批量插入时,使用合适的事务粒度能确保数据的一致性。例如,可以将一定数量的插入操作作为一个事务,如果出现错误,回滚整个事务。 - 考虑设置合适的隔离级别,如READ COMMITTED或SERIALIZABLE,以适应并发...

    Java用JDBC实现对Oracle数据库操作

    6. **批量操作**:当有大量数据要插入或更新时,使用预编译的PreparedStatement的`addBatch()`和`executeBatch()`方法可以提高效率。 7. **错误处理**:处理SQLException,这可能由于网络问题、数据库无响应或无效...

    ORACLE-JDBC

    8. **批处理**:PreparedStatement的addBatch()和executeBatch()方法用于批量执行SQL语句,可以显著提高插入、更新和删除操作的效率。 9. **连接池**:为了提高性能和资源利用率,应用通常使用连接池(如C3P0、...

    dao.rar_oracle

    5. 编写SQL的INSERT语句,批量插入数据,可能使用批处理操作以提高效率。 6. 处理事务,确保所有数据都被正确导入,或者在发生错误时能够回滚。 7. 最后,关闭数据库连接和文件流,释放资源。 在实际应用中,还需要...

    学习jdbc和Oracle的若干技巧

    这种方式尤其适用于大量数据的批量插入或更新场景。 #### 技巧六:高效处理大型二进制对象(LOB) Oracle数据库支持存储大型二进制对象(LOB),如BLOB和CLOB等。使用`OraclePreparedStatement`时,可以方便地设置...

    开源项目-go-goracle-goracle.zip

    - **批处理**:批量执行SQL插入或更新,提高性能。 - **游标**:支持游标,可以实现复杂的数据处理逻辑,例如逐行处理大结果集。 - **预编译语句**:使用PreparedStatement可以防止SQL注入,提高执行效率。 - **...

    oracle存取图片.doc

    - 使用`PreparedStatement`来插入图片数据,因为预编译的SQL语句可以防止SQL注入攻击,并且通常比`Statement`更高效。 - `PreparedStatement`中的`setInt()`方法设置id值,`setBinaryStream()`方法用于将文件流...

    oracle数据库最新驱包[你值得拥有]

    6. **高级特性**:Oracle JDBC驱动还支持存储过程调用、批量操作、游标查询、分布式事务等高级功能。例如,使用`CallableStatement`可以调用Oracle的存储过程,通过`addBatch()`和`executeBatch()`实现批处理,提高...

    JDBC调用Oracle数据库.rar

    - 常见的SQL语句包括:SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除) - WHERE子句用于筛选记录,ORDER BY用于排序,GROUP BY用于分组,HAVING用于筛选分组后的数据。 6. **JDBC优化** - 使用...

    JDBC驱动for sqlserver、oracle、mysql

    对于批量插入或更新操作,JDBC提供了BatchUpdateException和addBatch()方法,可以提高效率。 总结,JDBC驱动是Java与SQLserver、Oracle、MySQL等数据库通信的关键组件。理解JDBC的工作原理,掌握其核心API的使用,...

    jdbc连接程序实现不同数据库数据的迁移

    5. **处理结果集并批量插入Oracle**: 遍历`ResultSet`,将每条数据封装为合适的对象(如自定义的JavaBean)。由于Oracle支持批处理,我们可以创建一个批处理命令列表,每处理一条数据就添加一个`ADD批处理`的调用...

    Oracle C++ Call Interface Programmer's Guide, 11g Release 2 (11

    OCCI支持批量执行SQL语句,对于插入大量数据或执行相似操作时,可以显著提高效率。 6. **游标和绑定**: 游标(Cursor)允许程序动态地处理查询结果,而绑定(Binding)则可以将程序变量与SQL语句中的参数关联...

Global site tag (gtag.js) - Google Analytics