初學java中java.lang.UnsatisfiedLinkError的問題﹐特急﹗﹗(50分)

  • 主题发起人 主题发起人 dadabox
  • 开始时间 开始时间
D

dadabox

Unregistered / Unconfirmed
GUEST, unregistred user!
我試著用JBDC連接Oracle﹐出現下面的錯誤。classpath中我設了
classpath=D:/jdk1.3.0_02/lib;c:/Oracle/Ora81/jdbc/lib/classes12.zip;C:/Oracle/Ora81/jdbc/lib/nls_charset12.zip;.;
在這之前﹐我是設定的classes111.zip和nls_charset11.zip
我的Oracle是8.1.5。
調試程序是Oracle自帶的那個Employee.java﹔
用javac生成Employee.class成功﹐
但用java Employee時出錯。
大俠們﹐快點救救急﹗這是怎么回事呀﹖我想可能是JDBC的問題﹐可我到oracle網站下載
了最新的JDBC DRIVERS還是不行呀。我想classpath和path應該是沒有問題的。
Exception in thread "main" java.lang.UnsatisfiedLinkError: make_c_state
at oracle.jdbc.oci8.OCIDBAccess.make_c_state(Native Method)
at oracle.jdbc.oci8.OCIDBAccess.logon(OCIDBAccess.java:233)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:246)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.ja
va:365)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at Employee.main(Employee.java:18)
Employee.java源代碼﹕
/*
* This sample shows how to list all the names from the EMP table
*/
// You need to import the java.sql package to use JDBC
import java.sql.*;
class Employee
{
public static void main (String args [])
throws SQLException
{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// Connect to the database
// You can put a database name after the @ sign in the connection URL.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:oci8:@", "scott", "tiger");
// Create a Statement
Statement stmt = conn.createStatement ();
// Select the ENAME column from the EMP table
ResultSet rset = stmt.executeQuery ("select ENAME from EMP");
// Iterate through the result and print the employee names
while (rset.next ())
System.out.println (rset.getString (1));
// Close the RseultSet
rset.close();
// Close the Statement
stmt.close();
// Close the connection
conn.close();

}
}
 
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
这一行有问题,也许应该是
DriverManager.registerDriver("oracle.jdbc.driver.OracleDriver");
我实在记不清了,自己查一下。大概是我那样写的。dfw上有的。
 
好像是这样。
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn =
DriverManager.getConnection ("jdbc:oracle:oci8:@", "scott", "tiger");
 
总算找到问题了,我前面都是瞎说的,作废。
问题在这里
// Connect to the database
// You can put a database name after the @ sign in the connection URL.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:oci8:@", "scott", "tiger");
请注意注释的第二行,你应该根据自己的情况修改getconnection方法的第一个
参数,修改后的参数如下:
"jdbc:oracle:thin:@hostname:1521:sid"
@前的字符串表示使用的oralce jdbc驱动的类型,我很少用oci8类型,
一般在java中用thin型,至于这两个有什么区别,留给你自己去研究,
我这里用oci8不行,只能用thin才可以成功,这跟具体的设置有关,
其实我也不是很清楚,只要记住一般用thin。
@后的参数hostname表示你安装oralce服务器的主机名,也可以使ip地址,
第二个是oralce服务器使用的端口号,这是你在安装oracle服务器时指定的,
缺省是1521,第二个是sid,即oracle的全局服务名,这也是由安装时指定的,
我给你我的参数供参考:
DriverManager.getConnection ("jdbc:oracle:thin:@192.168.2.2:1521:testdb", "testuser", "testuser")
这表明我需要使用thin方式的oracle驱动连接主机地址为
192.168.2.2的oralce服务器,端口号为1521,全局服务名为testdb,
用户名和口令为testuser。

 
小猪哥﹐你說的那些設置我大致知道﹐但我是設的oci8﹐就會出現上面的錯誤﹐如果我改成
thin就可以測試成功。請問為什么不能設為oci8呢﹖我的classpath設定的是
c:/Oracle/Ora81/jdbc/lib/classes12.zip;C:/Oracle/Ora81/jdbc/lib/nls_charset12.zip
而這兩個是我新從oracle網站下載的﹐是支持oci8的。oci8是不是支持blob字段﹐而thin不
支持﹖可我的數據庫中有圖片﹐以后會用到的﹐怎么辦呢﹖
而且﹐為什么我用oracle easy config中設定的服務器名都不能成功﹐無論用短名還是全名
都會出現下面的錯誤﹐而我用ip地址代替就成功了。
Exception in thread "main" java.sql.SQLException: IO 異常: The Network Adapter c
ould not establish the connection
成功的﹕
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:@192.168.2.55:1521:orcl",
"scott", "tiger");
失敗的﹕
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:@NewOracle.dadaboxweb.com:1521:orcl",
"scott", "tiger");
 
oracle easy config配置的是本地服务名,跟你的java程序无关,
你必须用hostname或者hostip才行的。至于oci8为什么不行,我想
你仔细研究以下oci8究竟代表什么意义就明白了,但具体应该怎么
用我也不是很清楚,事实上,我从来没有打算把它搞清楚,因为
在java中我用jdbc连接时,我肯定只会用thin,因为这可以使你的
程序完全做到平台无关性。我只关心我需要的东西。
 
謝謝了﹐還問一點﹐請問你是用什么工具開發java﹐比較快速方便。
另外﹐怎么查幫助﹖java中相對應delphi的fieldcount的屬性是哪一個﹖
答了請到http://www.delphibbs.com/delphibbs/dispq.asp?lid=860876拿分。謝謝﹗
 
后退
顶部