Oracle Jdbc demo

两种方式:

thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动的jar包就行。thin就是纯粹用Java写的ORACLE数据库访问接口。
oci 是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端。oci是Oracle Call Interface的首字母缩写,是ORACLE公司提供了访问接口,就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度 快,但是需要安装和配置数据库。

从使用thin驱动切换到oci驱动在配置来说很简单,只需把连接字符串java:oracle:thin:@hostip:port:实例名换为java:oracle:[email protected]本地服务名即可。

如:从 jdbc:oracle:thin:@10.1.1.2:1521:xe
改成
jdbc:oracle:oci8:@xe

调用storedprocedure使用方式:

CallableStatement cstmt =   con.prepareCall("CALL  spname(? , ?)") ;

获取数据库的元数据信息:

DatabaseMetaData dbmd = con.getMetaData();
获取结果集的元数据信息:
ResultSetMetaData rsmd = rs.getMetaData();

statement构造函数可以包含3个参数:

  • resultSetType,它的取值包括:ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVE,默认情况下,该参数的值是ResultSet.TYPE_FORWARD_ONLY
  • resultSetConcurrency,它的取值包括:ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE,默认情况下,该参数的值是ResultSet.CONCUR_READ_ONLY
  • resultSetHoldability,它的取值包括:ResultSet.HOLD_CURSORS_OVER_COMMITResultSet.CLOSE_CURSORS_AT_COMMIT

获取数据集的时候,可以设定resultSet.SetFetchSize来避免outofmemory错误的发生。

关于jdbc数据库连接,同一个数据库连接,不能同时做多件事情,必须串行做?还是这是由数据库的隔离级别决定的?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class jdbcdemo {

    //create table mytest(key varchar2(2000),value varchar2(2000));

    public static final String ORACLE_DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";

    public    static void main(String[] args)
    {
        System.out.println("hello jdbc");

            final Connection conn = getConn(false);
            //selectDemo("select * from mytest");
            //insertDemo(conn,10000,1000);
            //selectDemo("select * from mytest");
            /*
            new Thread(){public void run()
                {
                    try {
                        insertDemo(conn,100,10);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }}.start();

            new Thread(){public void run()
                {
                    try {
                        insertDemo(conn,100,10);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }}.start();
                */
            new Thread(){public void run()
            {
                try {
                    selectDemo(conn,"select * from mytest");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }}.start();
                try {
                    Thread.sleep(1000);
                    conn.commit();
                } catch (Exception e) {
                    e.printStackTrace();
                }

    }

    static Connection getConn(boolean autoCommit)
    {
        Connection conn =    null;
        try {
                Class.forName(ORACLE_DRIVER_CLASS);
                //two method , use thin(pure java not need oracle client installed)
                //or oci(need oracle client installed)                conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.99.105:1521:xe","system","student");
                conn.setAutoCommit(autoCommit);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        catch(SQLException sqle)
        {
            sqle.printStackTrace();
        }
        return conn;
    }

    static void selectDemo(Connection conn,String sql) throws SQLException
    {
        PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet rs =  stmt.executeQuery();
        rs.setFetchSize(1);//it is useful to set this value when the resultset is very large
        ResultSetMetaData rsmd = rs.getMetaData();
        for(int index=1;index<=rsmd.getColumnCount();index++)
            System.out.print(rsmd.getColumnName(index)+"\t");
        System.out.println();
        while(rs.next())
            {
                for(int index=1;index<=rsmd.getColumnCount();index++)
                    System.out.print(rs.getString(index)+"\t");
                System.out.println();
            }
    }

    static void insertDemo(Connection conn,int rowcount,int batchcount) throws SQLException
    {
        String sql="insert into mytest(key,value) values(?,?)";
        PreparedStatement stmt = conn.prepareStatement(sql);

        for(int i=1;i<=rowcount;i++)
        {
            stmt.setString(1,"Key"+i);
            stmt.setString(2,"Value"+i+" "+Thread.currentThread().getName());
            stmt.addBatch();
            if(i % batchcount == 0)
                stmt.executeBatch();
        }
        stmt.executeBatch();
    }

}
时间: 2024-10-21 16:58:52

Oracle Jdbc demo的相关文章

Oracle JDBC存入图片Blob

创建测试表 create table test_img( id integer primary key, name varchar2(32), image blob ); 存储图片 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; impo

Oracle JDBC通过占位符可以查询可变长字段,不可查询固定长度字段

这个问题在半年前,花了我两天的时间才解决,现在刚好想起来,顺便记录一下以防忘了. 通过jdbc,预编译的sql,无法查询到固定长度的字段. 用例子说话: 创建一个表,只有一个字段,长度为固定的char类型.并插入一条数据. create table tblchar ( name char(20) ); 在Java代码中使用预编译的SQL查询,无法查询到结果.而使用拼接的SQL,可以正常查询. 1 public static void main(String[] args) { 2 try { 3

registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. (转)

最近项目中遇见一问题,在开发环境没有问题的代码,到了生产环境就会报如下错误: 严重: A web application registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregiste

在Maven仓库中添加Oracle JDBC驱动

由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle JDBC Driver 1.通过Oracle官方网站下载相应版本:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html 2.通过Oracle的安装目录获得,位置在“{ORACLE_HOME}\jdbc\l

Oracle JDBC 连接卡死后 Connection Reset

坑 这绝对是我碰计算机以来遇到的第一大坑! 症状: 在Linux主机上远程登录,执行一个简单的Oracle的JDBC连接程序(jar包),结果硬生生的卡在了连接建立验证阶段,然后等上几分钟后因为连接超时,连接被远端的Oracle服务器reset,于是报了connection reset exception 原因: 参考:http://www.usn-it.de/index.php/2009/02/20/oracle-11g-jdbc-driver-hangs-blocked-by-devrand

转: Maven 仓库中添加Oracle JDBC驱动(11g)

1.由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库,此文档用的是Oracle 11g.通过Oracle的安装目录获得,位置在:E:\app\zhaoheng\product\11.2.0\dbhome_1\jdbc\lib下: 此使用的是ojdbc6.jar 2.知道自己安装的Oracle是什么版本的 可以在SQL窗口中输入:select * from v$instance

Cannot load JDBC driver class &#39;oracle.jdbc.driver.OracleDriver&#39;

: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'错误来源:Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' 出现这个问题,主要是驱动包没放到项目里,解决办法如下:1.找到oracle里的jdbc\lib:2.设置系统的 classpath 为 ojdbc14.jar.class12.jar:3.把这两个jar拷贝到你的项目里的 \WEB-

连接oracle jdbc

我使用的是精简版的oracle. 1  导入oracle驱动包 oracle下路径 D:\oracle\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar 2  查看listenerduankouhao D:\oracle\app\oracle\product\11.2.0\server\network\ADMIN\listener.ora 3  代码 Connection conn = DriverManager.getConnection

ERROR:oracle.jdbc.driver.T4CPreparedStatement.isClosed()Z (sqoop从oralce向hive导数据)解决

[[email protected] ~]$ sqoop import -connect jdbc:oracle:thin:@192.168.8.228:1521:bonc -username AQ -password bonc1234 -table ORCL_TEST1 -hive-import -hive-database test -hive-table ORCL_HIVE_TEST1 -null-string ' ' -null-non-string '' -m 115/06/11 17