我想用jdbc连接oracle 希望用dba身份 请问应该怎么弄?

解决方案 »

  1.   

    (1) 先在控制面板,创建一个oracle的数据源,(2)然后参照如下代码:[转载]import java.sql.*;
    import java.io.*;
    /**
     * <p>Title: JDBC连接数据库</p>
     * <p>Description: 本实例演示如何使用JDBC连接Oracle数据库,并演示添加数据和查询数据。</p>
     */
    public class JDBCConn{
      private  String url="";//数据库连接字符串
      private  String username="";//数据库用户名
      private  String password="";//数据库密码
     
    /**
     *<br>方法说明:获得数据连接
     *<br>输入参数:
     *<br>返回类型:Connection 连接对象
     */
      public Connection conn(){
         try {
           //第一步:加载JDBC驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //第二步:创建数据库连接
            Connection con =DriverManager.getConnection(url, username, password);
            return con;
        }catch(ClassNotFoundException cnf){
          System.out.println("driver not find:"+cnf);
          return null;
        }catch(SQLException sqle){
          System.out.println("can't connection db:"+sqle);
          return null;
        }
      catch (Exception e) {
            System.out.println("Failed to load JDBC/ODBC driver.");
            return null;
         }
      }
    /**
     *<br>方法说明:执行查询SQL语句
     *<br>输入参数:Connection con 数据库连接
     *<br>输入参数:String sql 要执行的SQL语句
     *<br>返回类型:void
     */
      public void query(Connection con, String sql){
        try{
         if(con==null){
           throw new Exception("database connection can't use!");
         }
         if(sql==null) throw new Exception("check your parameter: 'sql'! don't input null!");
       //第三步:获取Staetment对象
         Statement stmt = con.createStatement();
       //第四步:执行数据库操作(查询操作)
         ResultSet rs = stmt.executeQuery(sql);
       //第五步:处理结果集
       ResultSetMetaData rmeta = rs.getMetaData();
          //获得数据字段个数
         int numColumns = rmeta.getColumnCount();
         while(rs.next())
       {
         for(int i = 0;i< numColumns;i++)
         {
        String sTemp = rs.getString(i+1);
        System.out.print(sTemp+"  ");
         }
        System.out.println("");
       }
        }catch(Exception e){
          System.out.println("query error:"+e);
        }
      }
    /**
     *<br>方法说明:执行插入、更新、删除等没有返回结果集的SQL语句
     *<br>输入参数:Connection con 数据库连接
     *<br>输入参数:String sql 要执行的SQL语句
     *<br>返回类型:void
     */
     public void execute(Connection con, String sql){
        try{
          if(con==null) return;
        //第三步:获取Statement对象
        Statement stmt = con.createStatement();
        //第四步:执行数据库操作(更新操作)
        stmt.executeUpdate(sql);
        System.out.println("update executed successly");
        }catch(Exception e){
          System.out.println("execute error: sql = "+sql);
          System.out.println(e);
        }//end try catch
      }//end execute
    /**
     *<br>方法说明:实例演示
     *<br>输入参数:无
     *<br>返回类型:void
     */
      public void demo(){
        String sSQL="";
        BufferedReader stdin=new BufferedReader(new  InputStreamReader(System.in));
        try{
          System.out.println("please input update SQL string");
          sSQL=stdin.readLine();//获取命令行输入(更新字符串)
          Connection conn = conn();//执行自定义连接方法(获取数据库连接对象)
          execute(conn,sSQL);//执行自定义更新方法
          String sql = "select * from TBL_USER";
          query(conn,sql);//执行自定义查询方法(查询并处理结果集)
          //第六步:关闭数据库连接
          conn.close();
        }catch(SQLException se){
          System.out.println(se);
        }catch(Exception e){
          System.out.println(e);
        }
     
      }
    /**
     *<br>方法说明:主方法
     *<br>输入参数:String[] args 命令行参数(包括:数据库连接URL,
     *<br>用户名,密码)
     *<br>返回类型:void
     */
      public static void main(String[] arg){
        if(arg.length!=3){
          System.out.println("use: java JDBCConn url username password");
          return;
        }
        JDBCConn oc = new JDBCConn();
        oc.url = arg[0];
        oc.username=arg[1];
        oc.password=arg[2];
        oc.demo();
      }
    }
      

  2.   

    连接串里写上dba的用户名和密码呗
      

  3.   

    你想用dba做什么?说的具体点。
      

  4.   

    只要连接的上数据库。
    在连接的设置上加上DBA的ID,和PASSWORD。
    自然就是数据库管理员的身份了。
      

  5.   

    import java.sql.*;
    import java.io.*;
    /**
     * <p>Title: JDBC连接数据库</p>
     * <p>Description: 本实例演示如何使用JDBC连接Oracle数据库,并演示添加数据和查询数据。</p>
     */
    public class JDBCConn{
      private  String url="";//数据库连接字符串
      private  String username="";//数据库用户名
      private  String password="";//数据库密码
     
    /**
     *<br>方法说明:获得数据连接
     *<br>输入参数:
     *<br>返回类型:Connection 连接对象
     */
      public Connection conn(){
         try {
           //第一步:加载JDBC驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //第二步:创建数据库连接
            Connection con =DriverManager.getConnection(url, username, password);
            return con;
        }catch(ClassNotFoundException cnf){
          System.out.println("driver not find:"+cnf);
          return null;
        }catch(SQLException sqle){
          System.out.println("can't connection db:"+sqle);
          return null;
        }
      catch (Exception e) {
            System.out.println("Failed to load JDBC/ODBC driver.");
            return null;
         }
      }
    /**
     *<br>方法说明:执行查询SQL语句
     *<br>输入参数:Connection con 数据库连接
     *<br>输入参数:String sql 要执行的SQL语句
     *<br>返回类型:void
     */
      public void query(Connection con, String sql){
        try{
         if(con==null){
           throw new Exception("database connection can't use!");
         }
         if(sql==null) throw new Exception("check your parameter: 'sql'! don't input null!");
       //第三步:获取Staetment对象
         Statement stmt = con.createStatement();
       //第四步:执行数据库操作(查询操作)
         ResultSet rs = stmt.executeQuery(sql);
       //第五步:处理结果集
       ResultSetMetaData rmeta = rs.getMetaData();
          //获得数据字段个数
         int numColumns = rmeta.getColumnCount();
         while(rs.next())
       {
         for(int i = 0;i< numColumns;i++)
         {
        String sTemp = rs.getString(i+1);
        System.out.print(sTemp+"  ");
         }
        System.out.println("");
       }
        }catch(Exception e){
          System.out.println("query error:"+e);
        }
      }
    /**
     *<br>方法说明:执行插入、更新、删除等没有返回结果集的SQL语句
     *<br>输入参数:Connection con 数据库连接
     *<br>输入参数:String sql 要执行的SQL语句
     *<br>返回类型:void
     */
     public void execute(Connection con, String sql){
        try{
          if(con==null) return;
        //第三步:获取Statement对象
        Statement stmt = con.createStatement();
        //第四步:执行数据库操作(更新操作)
        stmt.executeUpdate(sql);
        System.out.println("update executed successly");
        }catch(Exception e){
          System.out.println("execute error: sql = "+sql);
          System.out.println(e);
        }//end try catch
      }//end execute
    /**
     *<br>方法说明:实例演示
     *<br>输入参数:无
     *<br>返回类型:void
     */
      public void demo(){
        String sSQL="";
        BufferedReader stdin=new BufferedReader(new  InputStreamReader(System.in));
        try{
          System.out.println("please input update SQL string");
          sSQL=stdin.readLine();//获取命令行输入(更新字符串)
          Connection conn = conn();//执行自定义连接方法(获取数据库连接对象)
          execute(conn,sSQL);//执行自定义更新方法
          String sql = "select * from TBL_USER";
          query(conn,sql);//执行自定义查询方法(查询并处理结果集)
          //第六步:关闭数据库连接
          conn.close();
        }catch(SQLException se){
          System.out.println(se);
        }catch(Exception e){
          System.out.println(e);
        }
     
      }
    /**
     *<br>方法说明:主方法
     *<br>输入参数:String[] args 命令行参数(包括:数据库连接URL,
     *<br>用户名,密码)
     *<br>返回类型:void
     */
      public static void main(String[] arg){
        if(arg.length!=3){
          System.out.println("use: java JDBCConn url username password");
          return;
        }
        JDBCConn oc = new JDBCConn();
        oc.url = arg[0];
        oc.username=arg[1];
        oc.password=arg[2];
        oc.demo();
      }
    }
      

  6.   

    我想执行这条语句 dbms_logstdby.set_tablespace('users');我用system登陆报ORA-01031: insufficient privileges
    用sys登陆 ORA-28009: connection to sys should be as sysdba or sysoper不知道大家有没好的办法?
      

  7.   

    执行这个 帮忙看看有什么办法:
    cs = con.prepareCall("{dbms_logstdby.set_tablespace('users')}");
      

  8.   

    问题是 conn system/pwd@test as sysdba 没地方加上去
      

  9.   

    更改账号和密码为dba权限了 
      

  10.   

    Connection con =DriverManager.getConnection(url, username, password);
    username,password 填上你的 dba 和 密码就OK了啊
      

  11.   

    我想问下为什么以上sql操作代码都没有关闭con的呢?一般不是操作完在finally中关闭con么?
      

  12.   

    你dbms_logstdby.set_tablespace对SYSTEM做个GRANT不也一样嘛
      

  13.   


    system已经有执行它的权限 只要用dba身份登陆就行 
    你说的grant怎么弄?
      

  14.   

    这个没注意过,你的用户有dba身份没,没有加上试下,在程序代码中和普通的没有什么不同吧.
      

  15.   

    下面是测试例子,看有什么办法能让它不抛出异常就行:import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;/**
     * @author Administrator
     *
     */
    public class TestConn { /**
     * @param args
     */
    public static void main(String[] arg) {

    CallableStatement cs = null;
    Connection con = null;
    ResultSet rs = null;

    String sql = "select distinct(job) from scott.emp";

    try { Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection(
    "jdbc:oracle:thin:@192.168.3.43:1521:orc", "system",
    "system");
    cs = con.prepareCall(sql); rs = cs.executeQuery();
    if (rs == null) 
    {
    System.out.println("rs is null");
    }
    else 
    {
    while (rs.next()) {
    System.out.println(rs.getString(1));
    }
    System.out
    .println("==============================================");
    cs = con
    .prepareCall("{call DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'scott')}"); cs.execute();
    System.out
    .println("==============================================");
    cs = con
    .prepareCall("{call dbms_streams_auth.grant_admin_privilege(grantee => 'scott', grant_privileges => true)}");

    cs.execute();
    System.out
    .println("==============================================");
    }
    }
    catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }}
      

  16.   

    在对数据库的操作过程中。。注意commit的时间
      

  17.   

    那你看下我35楼的代码, 能不能让最后一个
    cs = con.prepareCall("{call dbms_streams_auth.grant_admin_privilege(grantee => 'scott', grant_privileges => true)}");
    不抛出异常?
      

  18.   

    这样做不行吧,你的cs怎么能等于那么多执行语句呢?都没close,要加个commit应该可以。
      

  19.   

    你试下行不?看看它的异常就知道了 
    要不你把
    cs = con.prepareCall("{call DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'scott')}");                cs.execute();
    再多执行一次看有问题没
      

  20.   

    恩  我也不知道要dba帐户来编程做什么,难道你是写管理数据库的东东?