看你使用什么类型的驱动了,Oracle有多种类型的驱动,OCI和thin,其中OCI是需要本地库的支持的,这样速度比较快,一般用在服务器端,thin是纯java的Type 4类型驱动,没有任何客户端,只要网络能通就可以了。一般都是用thin的。

解决方案 »

  1.   

    请相信我的程序,我虽然也是菜鸟,但是是一个专业级菜鸟。连接数据库的程序写了很多:->。在奔腾4的机器上安装8i有问题,需要装一个补丁,这是Oracle的一个bug。所以我装的是9i客户端。就是无法连接数据库。在装有8i客户端的机器上程序没问题。
    我只是想搞明白,为什么Oracle提供的JDBC Driver会需要客户端的软件。或者说,我愿来理解的错了??!!
      

  2.   

    也有可能是数据库客户端的原因,我以前曾经在客户端8.0.5数据库服务器端8.1.6的情况下试过,无论怎样都连接不了。
    还有你连接数据库是oci还是thin方式,把代码贴出来吧!
      

  3.   

    源代码:import java.sql.*;import com.sinohome.test.DBException;
    import oracle.jdbc.driver.*;///import sun.jdbc.odbc.JdbcOdbcDriver;/**
     * <p>Title: 数据库连接类</p>
     * <p>Description: 数据库连接类,得到一个Connection </p>
     * <p>Copyright: Copyright (c) 2002</p>
     * <p>Company: sino.home</p>
     * @author 
     * @version 1.0
     */public class DBConfig {
          public static String DBDriver="oracle.jdbc.driver.OracleDriver";
          
          public static String DBURI="jdbc:oracle:thin:@134.65.9.13:1521:ora5601";
          public static String UserName = "bea";
          public static String PassWord = "bea";    /** 数据库连接*/
        protected Connection conn=null;  /**
       * 构造函数
       * @throws DBException
       */
      public DBConfig()
        throws DBException
      {
          try{
                Class.forName(DBDriver);          }
          catch(Exception e)
            {
              System.out.println(e);
              throw new DBException("err_conn");
            }
      }  /**
       * 得到一个数据库连接autoCommit
       * @return  Connection
       * @throws Exception
       */
      public Connection getConnecttion()
        throws Exception
      {        try
            {
                if(UserName==null || UserName.equals(""))
                    conn = DriverManager.getConnection(DBURI);
                else
                    conn = DriverManager.getConnection(DBURI,UserName,PassWord);
                return conn;
            }
            catch (Exception e)
            {
                System.out.println("Join JDBC connection error:" + e );
                throw new Exception("Join JDBC connection error:" + e );
            }  }  /**
       * 得到一个数据库连接
       * @param flag  Connection 是否autoCommit
       * @return  Connection
       * @throws Exception
       */
      public Connection getConnection(boolean flag)
        throws Exception
      {
            try
            {
                if(UserName==null || UserName.equals(""))
                    conn = DriverManager.getConnection(DBURI);
                else
                    conn = DriverManager.getConnection(DBURI,UserName,PassWord);
                conn.setAutoCommit(flag);
                return conn;
            }
            catch (Exception e)
            {
                System.out.println("Join JDBC connection error:" + e);
                throw new Exception("Join JDBC connection error:" + e);
            }  }  /**
       * 关闭数据库连接
       * @throws DBException
       */
      public void close()
        throws DBException
      {
          try{
              conn.close();
          }
          catch(SQLException e)
          {
            System.out.println(e);
            throw new DBException("",e);
          }
      }  /**
       * 提交数据库操作
       * @throws DBException
       */
      public void commit()
        throws DBException
      {
          try{
            conn.commit();
          }
          catch(SQLException e)
          {
            throw new DBException("",e);
          }
      }  /**
       * 回滚数据库操作
       * @throws DBException
       */
      public void rollback()
        throws DBException
      {
          try{
              conn.rollback();
          }
          catch(SQLException e)
          {
              throw new DBException("",e);
          }
      }  public int excuteUpdate(String sqlStr)
          throws DBException
      {
          int n;
          try{
              Statement stmt = conn.createStatement();
              n = stmt.executeUpdate(sqlStr);      }
          catch(SQLException e)
          {
              throw new DBException("",e);
          }      return n;
      }  public String excuteSelectOnlyOneStrValue(String sqlStr)
          throws DBException
      {
          try{
              Statement stmt = conn.createStatement();
              ResultSet rs = stmt.executeQuery(sqlStr);
              rs.next();
              return rs.getString(1);      }
          catch(SQLException e)
          {
              System.out.println(e.getMessage());
              throw new DBException("",e);
          }  }
      public static void main(String args[]){
          try{
                DBConfig dbc  = new DBConfig();
                dbc.getConnecttion();
                String str  = "update t_hf_userinfo set usr_sex = '0'";            System.out.println(dbc.excuteUpdate(str));
          }catch(Exception e){
                e.printStackTrace();
          }  }}
      

  4.   

    1.你直接用客户端能建立连接嘛?
    2.如果你用的是jbuilder,那么用database pilot是否能建立连接。
      

  5.   

    这个程序是4个月以前写的。当时运行怎么也不能连接到数据库上。有同事告诉我是因为客户端的原因。因为当时很忙,我也没有认真思考。这些天闲下来,想把这个问题搞清楚。可是刚才我运行这个问题,竟然没问题了!!!
    由于问题已经不可重现,所以无法继续讨论。不过有一点没错:Jdbc用thin方式连接Oracle数据库,和客户端没有关系!!
    谢谢大家的发言!