java oracle dbhelper,Java实现Oracle连接的DbHelper及相关异常

Java中使用DbHeplper来连接Oracle数据库时,一般可以分为以下几个步骤:

第一步,导入sql包;

第二步,将Oracle中的Java驱动包添加到项目下,并生成路径,Java驱动包存放在路径:F:\oracle\product\10.2.0\db_1\jdbc\lib之下;

第三步,加载驱动;

第四步,使用驱动管理器获取数据库连接对象;

第五步,编写sql语句(事先在数据库中编译通过的正确的sql语句);

第六步,创建语句对象;

第七步,执行sql语句,返回ResultSet结果集对象;

第八步,关闭对象,Connection,PreparedStatement,ResultSet。

代码如下:

package jdbcDemo1;

/**

* jdbc

* @author 阿达

*

*/

//第一步 导入SQL包

import java.sql.*;

public class Test1 {

public static void main(String[] args) throws ClassNotFoundException, SQLException {

//第二步:将驱动包放到项目下

//第三步:加载驱动

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

//第四步 :驱动管理器获取数据库连接对象

//url:数据库服务器地址:jdbc:oracle:thin:@主机IP:数据库端口:数据库实例

Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "a");

//测试:是否获取到连接对象

System.out.println(conn.getClass().getName());

//第五步:编写SQL语句

String sql="select * from emp";

//第六步:创建语句对象(将 SQL 语句发送到数据库)

Statement stmt=conn.createStatement();

//第七步:执行sql语句,返回ResultSet结果集对象

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()){//判断下一行是否有数据

System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getInt(4)+"\t");

//如果SQL语句中的字段顺序发生改变,则需要对结果集进行重新编号

}

//第七步:关闭流对象,释放内存

//关闭对象

//关闭结果集对象

rs.close();

//关闭语句对象

stmt.close();

//关闭连接对象;

conn.close();

}

}

常见异常有:

1.java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection

原因:Oralce数据库的主服务和监听服务没有开启,在服务中开启OracleServiceORCL和OracleOraDb10g_home1TNSListener服务即可。

2." java.lang.ClassNotFoundException: oracle.jdbc.driver.OarcleDriver

原因:1.没有将驱动包放到项目下 2.Class 类中的 forName 方法出错。

3. java.sql.SQLException: No suitable driver found for jdbc:orale:thin:@127.0.0.1:1521:orcl

原因:驱动管理器获取数据库连接对象出错,正确应为:jdbc:oracle:thin:@127.0.0.1:1521:orcl。

4.ExceptionInInitializerError

原因:forName方法所激发的初始化失败

5.java.sql.SQLException: ORA-00900: 无效 SQL 语句

原因:SQL 语句不正确,建议sql语句先在Oracle中运行无误后再写入代码中。

附:为了便于平时的使用,我们可以对DbHelper进行封装处理.首先创建一个db.properties文件存储的驱动信息和数据库连接对象时所要使用到的信息,

再自定义一个单例模式的MyProperties类继承Properties,调用db.properties中存储的驱动信息和数据库连接对象时所要使用到的信息。最后DbHelper调用MyProperties获取所需信息。

MyProperties.java的代码如下:

package jdbcDemo2;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

* 自定义MyProperties类继承Properties,当前类拥有Properties公共属性和方法

* @author 阿达

* 整个系统只需要创建一个对象

* 设计成单例模式

*/

public class MyProperties extends Properties{

private static MyProperties myProperties ;

private MyProperties() throws IOException{

InputStream in=MyProperties.class.getClassLoader().getResourceAsStream("jdbcDemo2/db.properties");

this.load(in); //从输入流中读取属性列表(键和元素对)

}

public static MyProperties getInstance() throws IOException {

if(null==myProperties){

myProperties=new MyProperties();

}

return myProperties;

}

}

db.properties的代码如下:

driverName=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@127.0.0.1:1521:orcl

user=scott

password=a

DbHelper.java的代码如下:

package jdbcDemo2;

import java.io.IOException;

import java.sql.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class DbHelper4 {

private Connection conn=null;

private PreparedStatement pstmt=null;

private ResultSet rs=null;

//加载驱动

static{

try {

Class.forName(MyProperties.getInstance().getProperty("driverName"));

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//获取数据库连接对象

public Connection getConn(){

try {

//getConnection(url,properties)

conn=DriverManager.getConnection(MyProperties.getInstance().getProperty("url"),MyProperties.getInstance()    );

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

// 关闭对象

public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs){

if(null!=rs){//关闭结果集

try {

rs.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(null!=pstmt){//关闭语句对象

try {

pstmt.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(null!=conn){//关闭连接对象

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

/*

* 设置参数

* @param pstmt 预编译对象

* @param params 外部传入的参数值  添加值时顺序一样要和?对应值得顺序一致

*

*/

public void setparams(PreparedStatement pstmt,List params) throws SQLException{

if(null!=params&&params.size()>0){

for(int i=0;i

pstmt.setObject(i+1, params.get(i));//设置?值

}

}

}

//获取结果集中的所有列表

private List getAllColumnName(ResultSet rs2) throws SQLException {

// TODO Auto-generated method stub

List columnNames=new ArrayList();

ResultSetMetaData dd=rs.getMetaData();

for(int i=1;i<=dd.getColumnCount();i++){

columnNames.add(dd.getColumnName(i));

}

return columnNames;

}

// 查看操作:sql语句可以查看多条记录

public List> findMultObject(String sql,Listparams) throws SQLException{

List> list=new ArrayList>();

Map map=null;

try {

conn=this.getConn();

pstmt=conn.prepareStatement(sql);

this.setparams(pstmt, params);

rs=pstmt.executeQuery();

//获取结果集中的所有列名

List columnNames=getAllColumnName(rs);

while(rs.next()){

map=new HashMap();

for(String name:columnNames){

map.put(name, rs.getObject(name));

}

list.add(map);

}

} finally {

this.closeAll(conn, pstmt, rs);

}

return list;

}

//查询操作,select * from emp where id=? 只有一条结果

public Map findSingleOBject(String sql,List params) throws SQLException{

Map map=null;

try {

conn=this.getConn();

pstmt=conn.prepareStatement(sql);

this.setparams(pstmt, params);

rs=pstmt.executeQuery();

//获取结果集中的所有列名

List columnNames=getAllColumnName(rs);

if(rs.next()){

map=new HashMap();

for(String name:columnNames){

map.put(name, rs.getObject(name));

}

}

} finally {

// TODO: handle finally clause

this.closeAll(conn, pstmt, rs);

}

return map;

}

//单条sql语句 更新操作:增 删 改

public int doUpdate(String sql,List params) throws SQLException{

int result=0;

try {

conn=this.getConn();

pstmt=conn.prepareStatement(sql);

//设置参数

this.setparams(pstmt, params);

result =pstmt.executeUpdate();

} finally {

// TODO: handle finally clause

this.closeAll(conn, pstmt, null);

}

return result;

}

/**

* 多条语句的更新操作  批处理  注意:这些sql语句执行的结果要么一起成功要么一起失败

* @param sqls

* @param params        对应每一条sql语句所需要的参数集合

* @return

* @throws SQLException

*/

public int doUpdate(List sqls,List> params) throws SQLException{

int result=0;

try {

conn=this.getConn();

//设置事物提交方式为手动提交

conn.setAutoCommit(false);

if(null!=sqls&&sqls.size()>0){

//对sql语句进行循环

for(int i=0;i

String sql=sqls.get(i);

pstmt=conn.prepareStatement(sql);

this.setparams(pstmt, params.get(i));//第几条sql语句对应list集合中的第一个list

result=pstmt.executeUpdate();

}

}

conn.commit();//手动提交事物

} catch (Exception e) {

// TODO: handle exception

conn.rollback();//事物回滚

}finally{

conn.setAutoCommit(true);//回复事物

this.closeAll(conn, pstmt, rs);

}

return result;

}

//聚合函数

public double getCount(String sql,Listparams) throws SQLException{

double result=0;

try {

conn=this.getConn();

pstmt=conn.prepareStatement(sql);

setparams(pstmt,params);

rs=pstmt.executeQuery();

if(rs.next()){

result=rs.getDouble(1); //获取第一列的值

}

} finally {

// TODO: handle finally clause

this.closeAll(conn, pstmt, rs);

}

return result;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于 JDBC 的 DBHelper 辅助类的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBHelper { private static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/database_name"; private static final String USERNAME = "username"; private static final String PASSWORD = "password"; private Connection conn; private PreparedStatement ps; private ResultSet rs; public DBHelper() { try { Class.forName(DRIVER); conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public ResultSet executeQuery(String sql, Object... params) throws SQLException { ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } rs = ps.executeQuery(); return rs; } public int executeUpdate(String sql, Object... params) throws SQLException { ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } return ps.executeUpdate(); } public void close() { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 这个 DBHelper 类包含了连接数据库、执行查询和更新操作、关闭数据库连接等常用方法。使用时,只需实例化 DBHelper 类,然后调用其中的方法即可。例如: ```java DBHelper dbHelper = new DBHelper(); try { ResultSet rs = dbHelper.executeQuery("SELECT * FROM table_name WHERE column_name = ?", "value"); while (rs.next()) { // 处理查询结果 } } catch (SQLException e) { e.printStackTrace(); } finally { dbHelper.close(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值