当前位置:编程学习 > JAVA >>

新手问题:关于JDBC连接Oracle数据库

请大家帮我看看这个问题:
我确实已经把jar包导入了classpath中
问题表面是JDBC问题,实际上是javaSE中的异常基础问题,还请大家看看

package com.project;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil
{
public static void main(String[] args)throws Exception,Exception
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:MYORACLE","scott","tiger");
System.out.println(conn);
conn.close();
}
}
问题1:为什么执行之后连不上Oracle数据库?代码应该怎样改?
问题2:我知道异常出现了问题,我没有try catch,而是抛出了异常,我觉得无论什么异常,只要写throws exception肯定没有错,所以不必去追究它到底有什么异常,我看不到异常的用处,只有try catch的时候才要知道到底是什么异常,这个时候不用try catch行不行?如果不行,什么时候一定要用try catch捕获?
--------------------编程问答-------------------- 问题1:代码没啥问题,连不上主要看抛出的异常信息。
问题2:异常的处理很关键,如果都抛出的话给用户的体验效果不好。并且有些异常是能处理的,处理后可以继续执行后续代码,如果抛出后面的代码就不能执行了。
例如 
int a= 1,b=0;//b 可能是参数传入的值。
int c =a/b;
这里会有一个异常,被0除。明显是可以预期的,如果直接抛出后续的代码将不会执行,给人的感觉也不好。
如果try catch后则可以给出一个友好的提示。
并且如果b 值必须作为除数,那么b 不能为0 必须抛出运行时异常,将信息提示给用户。 --------------------编程问答-------------------- 在我理解的对于异常是抛还是try主要看你的程序对于这些异常打算在哪处理,如果此处不用处理就往上抛,等到必须处理的时候就try --------------------编程问答-------------------- 异常肯定要处理,一般谁调用谁处理,A类调用了B类,B只抛出异常给A,如果A被C调用,则A继续抛出,直至最后的调用者,一般情况下最后调用者要把握整体的业务逻辑。 --------------------编程问答-------------------- 孩子 这么改 把url换成oracle的,你的url写错了,中间有个thin,你百度下晕。
package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {
public static Connection getConnection() throws Exception{
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test" +
"?useUnicode=true&characterEncoding=utf8",
"root","1234");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return conn;
}

public static void close(Connection conn) throws Exception{
if(conn !=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
/**
 * @param args
 * @throws Exception 
 */
public static void main(String[] args) throws Exception {
System.out.println(getConnection());
}

}
--------------------编程问答-------------------- 擦,看错了 把你自己的复制下就行了
package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {
public static Connection getConnection() throws Exception{
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:MYORACLE","scott","tiger");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return conn;
}

public static void close(Connection conn) throws Exception{
if(conn !=null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
/**
* @param args
* @throws Exception  
*/
public static void main(String[] args) throws Exception {
System.out.println(getConnection());
}

}
--------------------编程问答-------------------- 我抛出异常之后,现在能正常连接了
可是我try catch 却是这种结果,务必请高手看看我这个问题,以此谈谈try catch的运用问题,这是我问题的最大意义所在:
package com.project;

import java.sql.Connection;
import java.sql.DriverManager;

public class HelloWorld
{
public static void main(String[] args)
{
Connection conn = null;
try//显然我对try catch的理解就在于哪儿有异常,一股脑儿的先用try包围起来,不分青红皂白
{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:MYORACLE", "scott",
"tiger");
System.out.println(conn);
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
结果我编译运行了一下,有出现了异常,并提示是这行语句:Class.forName("oracle.jdbc.driver.OracleDriver");
接着,我又习惯性的应用try把这句包围了起来:
package com.project;

import java.sql.Connection;
import java.sql.DriverManager;

public class HelloWorld
{
public static void main(String[] args)
{
Connection conn = null;
try
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch (Exception e)
{
e.printStackTrace();
}

conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:MYORACLE", "scott",
"tiger");
System.out.println(conn);
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
我又编译运行了一次:结果异常越来越多,提示了2处异常Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:MYORACLE", "scott",
"tiger");
其实我的代码是没有变的,只是对异常采用了抛出与try catch处理,结果却是天壤之别……
请高手为我解疑:我如此应用try catch处理异常,到底错在哪里?不是哪句有异常,我就用try catch包围他们,但为什么这个例子中,我把自己给困住了了? --------------------编程问答-------------------- 驱动包加了吗? --------------------编程问答-------------------- scott用户激活了吗? --------------------编程问答-------------------- scott登陆看能不能登上 --------------------编程问答--------------------


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcForOracle {
private static String url="jdbc:oracle:thin:@localhost:1521:orcl";
private static String user="test";
private static String password="test";

private static Connection con = null;

private JdbcForOracle(){

}
static{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
System.out.println("连接失败::"+e.toString());
}
}

public static Connection getConnection(){
try{
con = DriverManager.getConnection(url,user,password);
}catch(SQLException e){
System.out.println("连接失败::"+e.toString());
e.printStackTrace();
}
return con;
}

/**
 * 关闭连接
 * @param rs
 * @param st
 * @param con
 */
public static void free(ResultSet rs,Statement st,Connection con){
try{
if(rs != null){
rs.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(st != null){
st.close();
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(con !=null){
con.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}

}

--------------------编程问答-------------------- 我把异常抛出(就是throws exception,exception)已经连接上了,而用try catch就没有连上……代码根本没有变,变的是对异常的处理
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,