jdbc连接问题 我想用jdbc连接oracle 希望用dba身份 请问应该怎么弄? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (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(); }} 连接串里写上dba的用户名和密码呗 你想用dba做什么?说的具体点。 只要连接的上数据库。在连接的设置上加上DBA的ID,和PASSWORD。自然就是数据库管理员的身份了。 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(); }} 我想执行这条语句 dbms_logstdby.set_tablespace('users');我用system登陆报ORA-01031: insufficient privileges用sys登陆 ORA-28009: connection to sys should be as sysdba or sysoper不知道大家有没好的办法? 执行这个 帮忙看看有什么办法:cs = con.prepareCall("{dbms_logstdby.set_tablespace('users')}"); 问题是 conn system/pwd@test as sysdba 没地方加上去 更改账号和密码为dba权限了 Connection con =DriverManager.getConnection(url, username, password);username,password 填上你的 dba 和 密码就OK了啊 我想问下为什么以上sql操作代码都没有关闭con的呢?一般不是操作完在finally中关闭con么? 你dbms_logstdby.set_tablespace对SYSTEM做个GRANT不也一样嘛 system已经有执行它的权限 只要用dba身份登陆就行 你说的grant怎么弄? 这个没注意过,你的用户有dba身份没,没有加上试下,在程序代码中和普通的没有什么不同吧. 下面是测试例子,看有什么办法能让它不抛出异常就行: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(); } }} 在对数据库的操作过程中。。注意commit的时间 那你看下我35楼的代码, 能不能让最后一个cs = con.prepareCall("{call dbms_streams_auth.grant_admin_privilege(grantee => 'scott', grant_privileges => true)}");不抛出异常? 这样做不行吧,你的cs怎么能等于那么多执行语句呢?都没close,要加个commit应该可以。 你试下行不?看看它的异常就知道了 要不你把cs = con.prepareCall("{call DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'scott')}"); cs.execute();再多执行一次看有问题没 恩 我也不知道要dba帐户来编程做什么,难道你是写管理数据库的东东? 求解,主方法中也能创建对象?? 问一个计算机原理方面的问题 关于返回了一个static变量想起的问题 这么漂亮的窗口是如何做成的? 谁提供一个swing的解决方案,谢谢咯...................嘿嘿 什么时候用字节流,什么时候用字符流? 帮忙看一下程序(在线等待急!) 帮帮忙:怎样将一个IP地址转换成一个二进制的数字(32位) 问个很菜的问题! 求weblogic5.1 license swing中的focus问题 可以列举一些,基于接口的,可插拨的系统源码框架吗?
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();
}
}
在连接的设置上加上DBA的ID,和PASSWORD。
自然就是数据库管理员的身份了。
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();
}
}
用sys登陆 ORA-28009: connection to sys should be as sysdba or sysoper不知道大家有没好的办法?
cs = con.prepareCall("{dbms_logstdby.set_tablespace('users')}");
username,password 填上你的 dba 和 密码就OK了啊
system已经有执行它的权限 只要用dba身份登陆就行
你说的grant怎么弄?
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();
} }}
cs = con.prepareCall("{call dbms_streams_auth.grant_admin_privilege(grantee => 'scott', grant_privileges => true)}");
不抛出异常?
要不你把
cs = con.prepareCall("{call DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'scott')}"); cs.execute();
再多执行一次看有问题没