两种方式:

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:oci@本地服务名即可。

如:从 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();
} }

Oracle Jdbc demo的更多相关文章

  1. Java jdbc访问sqlserver,oracle数据库 DEMO

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  2. Ignite 配置更新Oracle JDBC Drive

           如果使用Oracle 12C 作为Ignite 的Repository的话,在Repository Createion Wizard的配置过程中,会出现ORA-28040:No matc ...

  3. 高性能 Oracle JDBC 编程

    了解如何利用连接和语句池特性来提高 Oracle 驱动的 JDBC 程序的性能.作者:Yuli Vasiliev2009 年 4 月发布使用诸如连接池和语句池等池技术可以显著提高数据库密集型应用程序的 ...

  4. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...

  5. mysql和oracle jdbc连接

    加载驱动. Class.forName("oracle.jdbc.driver.OracleDriver"); 1 创建连接. Connection con = DriverMan ...

  6. Eclipse中启用Oracle jdbc logging

    根据自己用的JRE版本, jre1.5选择ojdbc5_g.jar, jre6选择ojdbc6_g.jar, 只有带_g的dirver才输出debug信息. maven 的配置信息: <depe ...

  7. 在MAVEN仓库中添加ORACLE JDBC驱动

    本文转载自 http://www.cnblogs.com/leiOOlei/archive/2013/10/21/3380568.html 因为已经是第二次遇到,所以COPY过来,怕以后别人的BLOG ...

  8. 连接oracle jdbc

    我使用的是精简版的oracle. 1  导入oracle驱动包 oracle下路径 D:\oracle\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6 ...

  9. maven oracle jdbc jar

    1.problem describe: when your dependency jar about oracle use code like this: <!-- oracle-connect ...

随机推荐

  1. [CLR via C#]19. 可空值类型

    我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...

  2. C#继承基本控件实现自定义控件

    C#继承基本控件实现自定义控件 摘自:http://www.cnblogs.com/greatverve/archive/2012/04/25/user-control-inherit.html 自定 ...

  3. yyyy/M/d h:m:s 转换成 yyyy-MM-dd hh:mm:ss

    var arrTime = (dtime).replace("/", "-").replace("/", "-"); v ...

  4. coffeescript 1.8.0 documents

    CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque ...

  5. velocity merge作为工具类从web上下文和jar加载模板的两种常见情形

    很多时候,处于各种便利性或折衷或者通用性亦或是限制的原因,会借助于模板生成结果,在此介绍两种使用velocity merge的情形,第一种是和spring mvc一样,将模板放在velocityCon ...

  6. 对getElementsByTagName("*")获取全部元素的总结

    var all=document.getElementsByTagName("*")      //获取整个页面的标签元素 alert(all.length);           ...

  7. javascript-this,call,apply,bind简述1

    最近在系统的学习面向对象方面的知识,遇到的最大拦路虎就数this的指向,call,apply,bind函数的使用,单独抽出一天时间把这几个烦人的家伙搞定,去学习更深入的内容. 首先介绍一下this的一 ...

  8. 维翔主机asp主机使用遇到的问题及解决方案总结

    1.数据库配置 在这里,我们会发现,红色圈起来的部分"Webadmin"处点击之后会报错,这是因为,数据库管理工具没有进行域名解析,需要在域名购买商处添加一个域名解析,mssql, ...

  9. 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。

    错误的写法:  if (this.GridView1.Rows.Count > 0)         {             string style = @"<style& ...

  10. 原创:SAP LVC ALV编辑小技巧

    前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...