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: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_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE_SCROLL_SENSITIVE,默认情况下,该参数的值是ResultSet.TYPE_FORWARD_ONLY。resultSetConcurrency,它的取值包括:ResultSet.CONCUR_READ_ONLY或ResultSet.CONCUR_UPDATABLE,默认情况下,该参数的值是ResultSet.CONCUR_READ_ONLY。resultSetHoldability,它的取值包括:ResultSet.HOLD_CURSORS_OVER_COMMIT或ResultSet.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的更多相关文章
- Java jdbc访问sqlserver,oracle数据库 DEMO
1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...
- Ignite 配置更新Oracle JDBC Drive
如果使用Oracle 12C 作为Ignite 的Repository的话,在Repository Createion Wizard的配置过程中,会出现ORA-28040:No matc ...
- 高性能 Oracle JDBC 编程
了解如何利用连接和语句池特性来提高 Oracle 驱动的 JDBC 程序的性能.作者:Yuli Vasiliev2009 年 4 月发布使用诸如连接池和语句池等池技术可以显著提高数据库密集型应用程序的 ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...
- mysql和oracle jdbc连接
加载驱动. Class.forName("oracle.jdbc.driver.OracleDriver"); 1 创建连接. Connection con = DriverMan ...
- Eclipse中启用Oracle jdbc logging
根据自己用的JRE版本, jre1.5选择ojdbc5_g.jar, jre6选择ojdbc6_g.jar, 只有带_g的dirver才输出debug信息. maven 的配置信息: <depe ...
- 在MAVEN仓库中添加ORACLE JDBC驱动
本文转载自 http://www.cnblogs.com/leiOOlei/archive/2013/10/21/3380568.html 因为已经是第二次遇到,所以COPY过来,怕以后别人的BLOG ...
- 连接oracle jdbc
我使用的是精简版的oracle. 1 导入oracle驱动包 oracle下路径 D:\oracle\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6 ...
- maven oracle jdbc jar
1.problem describe: when your dependency jar about oracle use code like this: <!-- oracle-connect ...
随机推荐
- [javaSE] 练习队列线程和对象序列化
主要练习了队列数据结构,对象序列化和反序列化,多线程操作 import java.io.BufferedReader; import java.io.File; import java.io.File ...
- html格式化
解决方法是: 在myeclipse中是这样解决的: 点击 myeclipse菜单栏的 window选项卡,找到下拉 perferences 选项 , 在里面快捷 "搜索" 框里面输 ...
- Linux编辑器vim键盘详解
下面的这张图,一看就明白了,从此,学习变的不再艰难! 补注:图中没有关于查找和替换的,应该用下面的.自上而下的查找操作 /word小写的n和N自下而上的查找操作 ...
- c# Sqlite帮助类
最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用Sqlite嵌入式数据库,在网上找了不少资料,最终整理出一个公共的帮助类. Sqlite是一个非常小巧的数据库,基本上具备关系型数据库操作的 ...
- Ansible用于网络设备管理 part 2 对Jinja2 YAML 和 module的理解
虽然很不想用“应该”这个词,但是还是写上了,的确我自己目前就是这么理解的. 那么这个理解就是,Ansible的一个key point 就是总的一个playbook是去依赖很多元素的,就像一开始那个图里 ...
- art-template引擎模板
art-template简介 artTemplate(后文简称aT)才是模板引擎,而TmodJS(后文简称TJ,曾用名atc)则是依赖于前者的一款模板预编译器.两者都是由腾讯开发.其实aT完全可以独立 ...
- Smartforms常见问题
分类: 1.使用SFSY-FORMPAGES显示总页数的时候,如果页数大于9,将会在前10页显示成星号* 解决: 有时候这样做完之后,星号*是没有了,但是字体会有颠倒或者重叠的现象. 如果出了这个问题 ...
- SAP中的Currency Converting Factor
ABAP编程中,有个概念很重要,即Currency Converting Factor(货币转换因子).可能很多ABAP初学者都不知道这是什么东西,这里我们就简单探讨下. 1. 什么是货币转换因子 在 ...
- ArcGIS使用Python脚本工具
在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...
- SQL学习笔记:选取第N条记录
Northwind数据库,选取价格第二高的产品. 有两种方法,一个是用Row_Number()函数: SELECT productname FROM ( productname, Row_Number ...