package com.bjpowernode.drp.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;/**
 * 数据库工具类
 * @author Administrator
 *
 */
public class DBUtil { /**
 * 取得数据库连接
 * @return
 */
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String dbUrl = "jdbc:oracle:thin:@localhost:1521:esoar";
String username = "drp";
String password = "drp";
conn = DriverManager.getConnection(dbUrl, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

public static void close(PreparedStatement pstmt) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void commit(Connection conn) {
if (conn != null) {
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void rollback(Connection conn) {
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void setAutoCommit(Connection conn, boolean autoCommit) {
if (conn != null) {
try {
conn.setAutoCommit(autoCommit);
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void close(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}


public static void main(String[] args) {
DBUtil.getConnection();
System.out.println("---------ok---------");
}
}
 这是我的代码,代码应该没问题
   用户名和密码 数据库都没问题
  唉,这是什么原因,郁闷死了

解决方案 »

  1.   

    应该是数据库死锁了,JDBC等待Oracle释放资源
      

  2.   

    没看出什么问题来,自己仔细检查下驱动包,然后用用代码里的用户名,密码用pl/sql登陆一下oracle....
      

  3.   

    大家看这吧,当我运行后,它就一直处于运行状态无法结束,用户名密码我用sqlplus登录过,没问题
      

  4.   

    看不见图片额,不过你的close用的也太多啦
      

  5.   

    大哥,看看你是不是在pl/sql之类的上面执行了select ... from update/delete ...这样之类的东西,然后没有commit?
    这种时候对应的数据表处于锁定状态,jdbc会一直等...
      

  6.   

    大哥,看看你是不是在pl/sql之类的上面执行了select ... from update/delete ...这样之类的东西,然后没有commit?
    这种时候对应的数据表处于锁定状态,jdbc会一直等... 
     
      我没有用到表啊,代码中,我只是想测试一下是否能连接上数据库,肯定是死锁了,我知道用什么办法解决, 哪位能帮帮我, 我QQ 1175210752   
      

  7.   

    你没提交 没有commit;程序会一直等着上一个commit完才会继续执行
      

  8.   

    我昨天用了好几个commit,后来试了试也没什么效果
      

  9.   

    BABY,跟COMMIT有啥关系YE?
    这程序我试过,就换了个URL,可以执行。
    检查下URL是否正确。啦啦啦,继续关注~
      

  10.   


      啊,URL有问题,我怎么不知道,那有问题呀
      

  11.   

    拜托,自己先大致定位一下吗,多打几个log,看看死在哪里了。这样别人才好帮上忙啊
      

  12.   

    String dbUrl = "jdbc:oracle:thin:@localhost:1521:esoar";
    把localhost修改为IP试试
      

  13.   

    要查URL的话,分段查
    jdbc:oracle:thin 这个基本不会错了
    @localhost 查查 Oracle的 tnsname.ora 看看里面有没有限定IP,还要查查本地 localhost 能不能被解析
    1521: 查查Oracle的配置,看你是不是用的缺省端口
    esoar: 查查看你有没有这个TableSpace,用其他工具打开试试就想到这么多了
      

  14.   

    楼主你应该是没有查询,然后又取得了连接,一直在等待。
    数据库说:我已经和你连接上了,请发送你要查询的条件
    程序说:我没有要查询的东西,请你返回我要的东西。
    数据库说:快发啊
    程序说:快发啊


    楼主试下在调用了getconnection方法后再调用下close方法看行不。
    再公司,没有Eclipse。囧~
      

  15.   


      很多方法我都试过了,从网上copy下来的复杂查询代码,运行还是一样的结果。
       人家的那个代码绝对没有破绽,但是运行后还是一样的结果,卡住不动 彻底无语了
      

  16.   

    也许是你的机子背不起oracle吧
      

  17.   

    原因只有一个,多线程死锁,数据无法commit,程序的数据库一直处于等待状态
    检查你自己的代码!!!!!
      

  18.   

    第一种方案,你可以重启一下机器,然后再运行程序
    conn = DriverManager.getConnection(dbUrl, username, password);第一种方案不行,建议你在这句话前后都打印下语句,看看能不能都打印出来。
      

  19.   

    大虾级人物怎么这么多啊?/**
    * 取得数据库连接
    * @return
    */ 
    public static Connection getConnection() {
    Connection conn = null;
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    String dbUrl = "jdbc:oracle:thin:@localhost:1521:esoar";
    String username = "drp";
    String password = "drp";
    conn = DriverManager.getConnection(dbUrl, username, password);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return conn;
    }public static void main(String[] args) {
    DBUtil.getConnection();
    System.out.println("---------ok---------");
    }请注意以上代码!!!!!
    是连接了,连接之后呢?
    System.out.println("---------ok---------");后台打印了吗?
    最起码写个select语句看看吧,一直开着连接当然死了
      

  20.   

    估计是因为其它用户连接到这个数据库,并且对表执行了 update 语句,并且没有提交,没有回滚,也没有退出,以至于 oracle 对表加了锁看看楼主是不是用其它工具,如 pl/sql developer,或者在 dos 窗口登录到 oracle,并且执行了一些 update 操作