java 链接Oracle数据库的工具类

java连接Oracle数据库的方式

1 特点:oracle.jdbc.OracleDriver是注册oracle驱动类;

jdbc:oracle:thin:@localhost:1521:xe:连接oracle的方式:网络协议+访问方式+IP+端口号+xe数据库;

user:hr数据库用户名

Password:hr数据库的用户密码

缺点:statement方式连接数据库容易被黑客注入式攻击 所有不安全 现在企业中很少采用这种方式的了

连接数据库后一定的关闭连接,这个最容易忘记 调用close()方法关闭连接

public static void main(String[] args) throws Exception {

// 1 注册驱动类

Class.forName("oracle.jdbc.OracleDriver");

// 2 创建连接

String url="jdbc:oracle:thin:@localhost:1521:xe";

Connection con = DriverManager.getConnection(url,"hr","hr");

// 3 创建stm

Statement stm = con.createStatement();

// 4 执行SQL

String sql = "select accountNo cardid,accountName name,balance bal from accounts";

// executeQuery: 执行DQL语句(select),返回ResultSet类型,代表 查询到的虚表

ResultSet rs = stm.executeQuery(sql);

// 5 处理查询结果

while (rs.next()){

// 获取每个字段的值 rs.getXxx("字段名")   rs.getXxx(index)

int no = rs.getInt("cardid");

double bal = rs.getDouble("bal");

String name = rs.getString(2);

String pwd = rs.getString("password");

System.out.println("卡号:" + no +" , name=" + name +", bal=" + bal+", pwd=" + pwd);

}

// 6 释放资源

if (rs != null)

rs.close();

if (stm != null)

stm.close();

if (con != null)

con.close();

}

2 特点:io读取配饰文件db.properties的信息 配置文件里为自己手写是mydriver路径myurl连接oracle的方式:网络协议+访问方式+IP+端口号+xe数据库 myuser数据库用户名称mypasswoed:数据库访问密码

把以上信息封装到配置文件中 可以复用 减少代码的冗余 使用一次调用一次

关闭连接封装带getRelease()方法中 需要使用时再调用 dao层一般不关闭连接 一般在service层关闭连接 否则容易造成业务出错

private static Properties prop = new Properties();

优点:封装成方法 需要时调用 减少代码的冗余

安全性能提高:?占位符赋值 比第一种方法安全 解决注入式攻击等问题

缺点:属于单例模式 多线程并发访问时 容易产生线程安全问题 例如双十一秒杀时 多用户同时访问同一资源 临界资源对象如果加锁会造成线程等待 不加锁大量用户并发访问会造成线程安全问题

// 类加载时,读一次 配置文件

static{

try {

// 获取配置文件的输入流

InputStream is = JdbcUtil2.class.getResourceAsStream("/com/baizhi/day2/db.properties");

// 使用prop的load方法自动读文件

prop.load(is);

} catch (IOException e) {

e.printStackTrace();

} finally {

// 关流

}

}

// 获取连接

public static Connection getConn(){

Connection con = null;

try {

// 获取配置文件的内容

String driverClassName = prop.getProperty("mydriverclass");

String url = prop.getProperty("myurl");

String userName = prop.getProperty("username");

String pwd = prop.getProperty("password");

Class.forName(driverClassName);

con = DriverManager.getConnection(url, userName, pwd);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

return con;

}

// 释放资源

public static void release(ResultSet rs, Statement stm, Connection con){

if (rs != null){

try {

rs.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

if (stm != null){

try {

stm.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

if (con != null){

try {

con.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

3 特点/优点:引入线程对象ThreadLocal 针对多用户并发访问问题 可以支持大量用户同时访问

public class JdbcUtil {

private static Properties prop = new Properties();

// 读配置文件

static {

try {

InputStream is = JdbcUtil.class.getResourceAsStream("/com/baizhi/day3/db.properties");

prop.load(is);

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException(e);

} finally {

}

}

// 增加静态的成员变量

private static final ThreadLocal<Connection> thl = new ThreadLocal<Connection>();

// 获取连接

public static Connection getConn() {

Connection conn = thl.get(); // 从线程局部变量中取值

try {

if (conn == null) { // 没有值

// 获取配置文件中的内容

String driverClass = prop.getProperty("mydriverclass");

String myurl = prop.getProperty("myurl");

String username = prop.getProperty("username");

String password = prop.getProperty("password");

Class.forName(driverClass);

conn = DriverManager.getConnection(myurl, username, password);

thl.set(conn); // 把conn存到thl

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

return conn;

}

// 释放资源

public static void release(ResultSet rs, Statement stm, Connection conn) {

try {

if (rs != null)

rs.close();

if (stm != null)

stm.close();

if (conn != null){

conn.close();

thl.remove();  // 关闭的连接 必须从thl删除************

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

4:特点/优点:引入数据池 减少访问数据库的次数 提高执行效率

public class JdbcUtilPool {

public static final ThreadLocal thl=new ThreadLocal();

public static Connection getConn(){

Connection conn=(Connection) thl.get();

try {

if(conn == null){

//获取资源所在的根

Context ctx = new InitialContext();

//根据名称和目录获取资源

javax.sql.DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myoracle");

//从连接池获取连接

conn=ds.getConnection();

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException();

}

return conn;

}

public static void release(ResultSet rs,PreparedStatement pstm,Connection conn){

try {

if (rs!=null) rs.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException();

}

try {

if (pstm!=null) pstm.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException();

}

try {

if (conn!=null) {

conn.close(); //把连接还给连接池

thl.remove();//清除线程连接

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException();

}

}

}

原文地址:https://www.cnblogs.com/nicklin/p/8947787.html

时间: 2024-07-29 13:49:17

java 链接Oracle数据库的工具类的相关文章

简单地java链接oracle数据库

简单地模拟了银行账户之间相互转账的功能,该项目在java代码中分为了4个包 1.调用数据库的存储过程 import java.sql.CallableStatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import entity.UserInfo; import util.DBUtil;

java 数据库查询工具类.

import java.util.List;import java.util.Map; /** * 数据库查询工具类. * */public class QueryTool {        /**     * Checks if is condition.     *     * @param obj the obj     * @return true, if is condition     */    public static boolean isCondition(Object ob

Java操作Oracle数据库自建工具库

在学习Java操作Oracle数据库的时候,忽然想到这个可不可以像php那样自己建立一个工具类,这样的话可以大大的减小代码的复杂度.也可以提高工作效率. java如果不能自己建立工具类,那是非常可笑的,但是,在建立的过程中,出现了一些问题,希望在以后不要犯类似的错误. 首先,我们在自建工具类之前必然是先模拟测试的,在这个例子当中,其过程如下: 1:引入Oracle的驱动程序 2:建立OracleTools类,并且定义其成员变量. 3:写OracleTools类的成员方法和构造函数. 4:如果全部

Java JDBC链接Oracle数据库

package com.test.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql

oracle入门(5)——java连接oracle数据库

[本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安装了oracle就有自带驱动了,路径在:安装目录\product\11.2.0\dbhome_1\jdbc\lib,下面有多个jar包,选择适合自己的一个(最简单的办法就是导入项目后看看能连接不,能连接的就是适合的驱动) 2.代码: 关于url:@后面是IP:端口,这两个不知道怎么查的请看博文:ht

Jython中链接Oracle数据库

实际操作环境为:Eclipse+Pydev中使用Jython链接Oracle数据库.方法有二,如下所示.(注意:将要使用的.jar文件路径加入系统变量classpath中) 一: Note:使用ojdbc.jar库 from oracle.jdbc.driver import OracleDriver from java.sql import DriverManager def connect(host , port , sid , user , password): driver = Orac

Java 基于log4j的日志工具类

Java 基于log4j的日志工具类 对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatform.receiveorder.util; import java.io.PrintWriter; import java.io.StringWriter; import org.apache.log4j.Logger; /** * @Description 日

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:612) at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:5094) at com.sms.send.StartTaskNew.run(SmsSend.java