两种方式:

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. 自定义tab在地图进行分页显示

    @{ ViewBag.Title = "GIS地图"; Layout = null; } @model HFSoft.Plat.UIWeb.Models.MapShowDataVO ...

  2. 与众不同 windows phone (46) - 8.0 通信: Socket, 其它

    [源码下载] 与众不同 windows phone (46) - 8.0 通信: Socket, 其它 作者:webabcd 介绍与众不同 windows phone 8.0 之 通信 Socket ...

  3. Python on VS Code

    install python extension Press F1, and input "ext install python". Then the icon at the le ...

  4. ahjesus linux连接阿里云ubuntu服务器并更改默认账号和密码,以及创建子账户

    先确保本地Linux服务器SSH服务开启,如果没有开启直接执行指令:service sshd start 然后我们使用ssh指令进行远程登陆 ssh username@ip-address 输入pas ...

  5. django性能优化

    1. 内存.内存,还是加内存 2. 使用单独的静态文件服务器 3. 关闭KeepAlive(如果服务器不提供静态文件服务,如:大文件下载) 4. 使用memcached 5. 使用select_rel ...

  6. javascript --- 再谈词法分析

    javascript代码是如何执行的呢,分为六个步骤(就像把大象装进冰箱总共分几步?): 第一步:载入第一个js代码段(注:script标签对内的代码或是引用js代码,这也说明js并不是一行一行(单纯 ...

  7. JavaScript的prototype(原型)

    JavaScript的每一个对象都有prototype属性哦 对象方法.类方法.原型方法 1.对象方法:理解就很简单了,主要是如果类生成一个实例,那么该实例就能使用该方法2.类方法:不需要通过生成实例 ...

  8. Office 365 - Windows PowerShell for SharePoint Online

    Office 365 PowerShell for SharePoint Online 1. Get-SPOTenantLogEntry 并不能获取所有的Log信息,只能用于获取因外部资源而出错的lo ...

  9. Atitit.电脑图片与拍摄图片的分别

    Atitit.电脑图片与拍摄图片的分别 1. Extname都是jpg的..1 1.1. 数码照片的Exif信息, 1 1.2. 是否有人脸1 1.3. 是否skin图1 1.4. 是否大面积色素单一 ...

  10. Spark调优

    因为Spark是内存当中的计算框架,集群中的任何资源都会让它处于瓶颈,CPU.内存.网络带宽.通常,内存足够的情况之下,网络带宽是瓶颈,这时我们就需要进行一些调优,比如用一种序列化的方式来存储RDD来 ...