跟踪一下阿
Connection conn = DriverManager.getConnection(url, user, password);出异常了

解决方案 »

  1.   

    如果不出异常,可以System.out.pritnln(conn),看看到底连没连上,连上是一个对象,没连上是null
      

  2.   

    确实怪,还是debug一下看看。
      

  3.   

    连接上了 但是很慢  查询的时候报  java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], []  这个错
      

  4.   

    代码::
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.PreparedStatement;
    import java.sql.CallableStatement;
    import java.sql.Statement;
    import java.sql.ResultSet;
    import java.sql.DriverManager;
    import javax.sql.*;
    import java.util.*;import java.io.*;/**
     * 数据库管理模块
     * 封装对数据库的基本操作
     * 包括数据库的连接、断开、提交、回滚和生成宏语句
     */
    public class DatabaseManager {
      private java.sql.Connection connection; //连接  /**
       * 构造函数
       */
      public DatabaseManager() {
        connectDatabase();
        //本来默认就是true
        try {
          connection.setAutoCommit(true);
        }
        catch (SQLException sqlEx) {
          sqlEx.printStackTrace();
        }
      }  /**
       * 连接数据库
       */
      private void connectDatabase() {
        try {
          try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          }
          catch (ClassNotFoundException ex2) {
          }
          catch (IllegalAccessException ex2) {
          }
          catch (InstantiationException ex2) {
          }
          String url = "jdbc:oracle:thin:@192.168.1.250:1521:SMS";
          String user = "warehouse";
          String password = "warehouse";
          connection = DriverManager.getConnection(url, user, password);
          System.out.println(connection);
          if (connection == null) {
            System.out.println("数据库连接错误!连接未成功!");
          }
        }
        catch (java.sql.SQLException ex) {
          ex.printStackTrace();
        }
        
      }  public CallableStatement callableStatement(String sql) {
        CallableStatement callableStatement = null;
        try {
          callableStatement = connection.prepareCall(sql);
        }
        catch (SQLException e) {
          e.printStackTrace();
        }
        return callableStatement;
      }  public PreparedStatement prepareStatement(String sql) {
        PreparedStatement preparedStatement = null;
        try {
          preparedStatement = connection.prepareStatement(sql);
        }
        catch (SQLException sqlEx) {
          sqlEx.printStackTrace();
        }    return preparedStatement;
      }  public Statement statement() {
        Statement statement = null;
        try {
          statement = connection.createStatement();
        }
        catch (SQLException e) {
          e.printStackTrace();
        }
        return statement;
      }  /**
       * 事务提交
       */
      public void conmit() {
        try {
          connection.commit();
        }
        catch (java.sql.SQLException e) {
          e.printStackTrace();
        }
      }  /**
       * 事务回滚
       */
      public void rollback() {
        try {
          connection.rollback();
        }
        catch (java.sql.SQLException e) {
          e.printStackTrace();
        }
      }  /**
       * 关闭数据库
       * 此方法保持为 public
       * 目的是为了在使用DatabaseManager这个类时,可以显式地关闭数据库连接
       */
      public void closeConnection() {
        try {
          //判断如果数据库连接没有关的情况下
          //就关闭之
          if (!connection.isClosed()) {
            connection.close();
          }
        }
        catch (SQLException e) {
          e.printStackTrace();
        }
      }  /**
       * 在用户没有关闭数据库的前提下
       * 通过析构函数,关闭连接
       * 从而保护有限的数据库连接资源
       */
      protected void finalize() {
        closeConnection();
      }  //测试用例
      public static void main(String[] args) throws SQLException {
        DatabaseManager databaseManager = new DatabaseManager();
        System.out.println("完成连接");
        PreparedStatement testSql = databaseManager.prepareStatement(
            "SELECT * FROM t_t_examplemsg WHERE cstatus=?");
        testSql.setInt(1,1);
        ResultSet resultSet=testSql.executeQuery();
        while(resultSet.next()){
          System.out.println(resultSet.getInt("cstatus"));
        }
        testSql.close();
        databaseManager.closeConnection();
      }
    }
    运行后打印的:
    oracle.jdbc.driver.OracleConnection@6e3d60
    完成连接
    java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], []
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:169)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)
    at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:889)
    at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:1826)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2015)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:395)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:339)
    at com.sms.database.DatabaseManager.main(DatabaseManager.java:173)
    Exception in thread "main" 
      

  5.   

    数据库连接应该没问题
    是不是你  
    String user = "warehouse";
    String password = "warehouse";
    没有访问t_t_examplemsg表的权限
    或是cstatus字段不是number型的可以把你的sql放在sql/plus里运行一下,看看是否出错
      

  6.   

    我用的是String user = "warehouse";
    String password = "warehouse";登陆的sql/plus 在里面运行sql语句没错啊
      

  7.   

    用sql/plus看看能不能连上数据库,如果不行,可能是你的配置文件没有配置。至少要装上客户端程序,打开oracle安装目录\ora92\network\admin\tnsnames.ora 添加到你的数据库的连接。
      

  8.   

    现在登陆和连接都没有问题 就是在执行sql语句的时候报  java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], []  这个错
      

  9.   

    看提示应该是oracle驱动程序和oracle版本不一致的原因,9i的话用classes12.zip ,如果是8i,最好用ojdbc14.jar
      

  10.   

    我是 oracle9i 驱动是classes12.jar啊   可以法一个9i的驱动给我吗  [email protected]
      

  11.   

    搞定了 是根据不同的jdk 使用不同的驱动  jdk1.4使用ojdbc14.jar  jdk1.3使用classes12.zip
    结分