关于JDBC连接Oracle数据库,是否必须有Oracle客户端 看你使用什么类型的驱动了,Oracle有多种类型的驱动,OCI和thin,其中OCI是需要本地库的支持的,这样速度比较快,一般用在服务器端,thin是纯java的Type 4类型驱动,没有任何客户端,只要网络能通就可以了。一般都是用thin的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请相信我的程序,我虽然也是菜鸟,但是是一个专业级菜鸟。连接数据库的程序写了很多:->。在奔腾4的机器上安装8i有问题,需要装一个补丁,这是Oracle的一个bug。所以我装的是9i客户端。就是无法连接数据库。在装有8i客户端的机器上程序没问题。我只是想搞明白,为什么Oracle提供的JDBC Driver会需要客户端的软件。或者说,我愿来理解的错了??!! 也有可能是数据库客户端的原因,我以前曾经在客户端8.0.5数据库服务器端8.1.6的情况下试过,无论怎样都连接不了。还有你连接数据库是oci还是thin方式,把代码贴出来吧! 源代码: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(); } }} 1.你直接用客户端能建立连接嘛?2.如果你用的是jbuilder,那么用database pilot是否能建立连接。 这个程序是4个月以前写的。当时运行怎么也不能连接到数据库上。有同事告诉我是因为客户端的原因。因为当时很忙,我也没有认真思考。这些天闲下来,想把这个问题搞清楚。可是刚才我运行这个问题,竟然没问题了!!!由于问题已经不可重现,所以无法继续讨论。不过有一点没错:Jdbc用thin方式连接Oracle数据库,和客户端没有关系!!谢谢大家的发言! 怎样从字符串中提取数字? 用java实现同步 几个关于关于String的问题急!!!!!! java如何读写pdf文件,并转化成二进制文件。 时间转换问题? 超大整数运算 args[]参数的写法(java初学者的傻问题) 请问,public和protected在功能上的差别? Thread中的Blocking是什么意思?有什么作用?并举个例子说明 数学问题:什么是位与,位或,>>和>>> JTREE 请教各位高人,我的一个JAVA小程序中为何会出现Class GirdLayout not found.
我只是想搞明白,为什么Oracle提供的JDBC Driver会需要客户端的软件。或者说,我愿来理解的错了??!!
还有你连接数据库是oci还是thin方式,把代码贴出来吧!
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();
} }}
2.如果你用的是jbuilder,那么用database pilot是否能建立连接。
由于问题已经不可重现,所以无法继续讨论。不过有一点没错:Jdbc用thin方式连接Oracle数据库,和客户端没有关系!!
谢谢大家的发言!