初学者求教?(JAVA高手请帮忙) (300分)

D

dxd0222

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的代码,用:java.exe Example JDBC:ORACLE:ORACLE Scott tiger
或者用:java.exe JDBC:ODBC:DO scott tiger
(注:DO使我的ODBC数据源名称)
调用都产生错误:no suitable driver
我是否要设置其他的东西,请帮忙!!!!
import java.sql.*;
class Example
{
Connection oracleConn;
public static void main(String arg[])
{
if(arg.length < 3)
{
System.err.println("Example use:");
System.err.println("java Example <url> <username> <password>");
System.exit(1);
}
Example ex = new Example();
ex.initdb(arg[0],arg[1],arg[2]);
ex.testdb();
}
public void initdb(String url, String user, String passwd)
{
try
{
System.out.println(url + " " + user + " " + passwd);
oracleConn = DriverManager.getConnection(url,user,passwd);
}
catch(SQLException e)
{
System.err.println("Database connection failed: ");
System.err.println(e.getMessage());
System.exit(2);
}
}
public void testdb()
{
String custID = null;
Customer cust = new Customer(oracleConn);
try
{
custID = cust.insertNewCustomer(
"Jones", "Bill", "555-1234", "5 Main Street", "01234");
}
catch(SQLException e)
{
System.err.println("Insert failed:");
System.err.println(e.getMessage());
System.exit(3);
}
try
{
CustomerInfo info = cust.getCustomer(custID);
}
catch(SQLException e)
{
System.err.println("read failed;");
System.err.println(e.getMessage());
System.exit(4);
}
}
}
//public
class Customer
{
private Connection conn;
private PreparedStatement insertNewCustomer;
private CallableStatement getNewID;
public static CallableStatement checkZip;
public static CallableStatement checkID;
public Customer(Connection c)
{
conn = c;
try
{
insertNewCustomer = conn.prepareStatement("INSERT INTO customers VALUES(?,?,?,?,?,?)");
getNewID = conn.prepareCall("{call getNewID(?)}");
checkID = conn.prepareCall("{call checkID(?,?)}");
checkZip = conn.prepareCall("{call checkZip(?,?)}");
}catch(SQLException e)
{
System.err.println("Connot create statements");
}
}
public String insertNewCustomer(String lname,String fname,String pnum,String addr,String Zip)
throws InsertFailedException, SQLException
{
String newID;
if((newID = getNewID()) == null)
{
throw new InsertFailedException("could not get new ID");
}
insertNewCustomer.setString(1,newID);
insertNewCustomer.setString(2,lname);
insertNewCustomer.setString(3,fname);
insertNewCustomer.setString(4,pnum);
insertNewCustomer.setString(5,addr);
insertNewCustomer.setString(6,Zip);
if(insertNewCustomer.executeUpdate() != 1) {
throw new InsertFailedException("Could not execute insert");
}
return(newID);
}
public CustomerInfo getCustomer(String custID)
throws SelectException, SQLException{
if(!validateID(custID)) {
throw new SelectException("no customer with ID: " + custID);
}
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Customer WHERE CustID = " + custID);
CustomerInfo info = new CustomerInfo();
info.CustomerID = rs.getString(1);
info.LastName = rs.getString(2);
info.FirstName = rs.getString(3);
info.PhoneNumber = rs.getString(4);
info.StreetAddress = rs.getString(5);
info.Zip = rs.getString(6);
return(info);
}
public static synchronized boolean validateZip(String Zip)
throws SQLException {
checkZip.setString(1,Zip);
checkZip.registerOutParameter(2,Types.BIT);
checkZip.executeUpdate();
return(checkZip.getBoolean(2));
}
public static synchronized boolean validateID(String id)
throws SQLException {
checkID.setString(1,id);
checkID.registerOutParameter(2,Types.BIT);
checkID.executeUpdate();
return(checkID.getBoolean(2));
}
private String getNewID() throws SQLException {
getNewID.registerOutParameter(1,Types.VARCHAR);
getNewID.executeUpdate();
return(getNewID.getString(1));
}
}
class InsertFailedException extends SQLException
{
public InsertFailedException() {}
public InsertFailedException(String reason) {super(reason);}
}
class SelectException extends SQLException
{
public SelectException() {}
public SelectException(String reason) {super(reason);}
}
class CustomerInfo
{
String CustomerID;
String LastName;
String FirstName;
String PhoneNumber;
String StreetAddress;
String Zip;
}
 
错误提示没有合适的驱动,自然是 ClassPath 的问题了,自己检查了.
 
查看ODBC的绑定,你的ODBC机上,有没有装ORACEL的客户端
 
我同意楼上那位兄弟的回答
 
代码:
			System.out.println(url + " " + user + " " + passwd);
			oracleConn = DriverManager.getConnection(url,user,passwd);
你的Driver没有装载阿,怎么能够直接用DriverManager.getConnection?
少了一句
String driverName ="oracle.jdbc.driver.OracleDriver";
Class.forName(driverName).newInstance();

 
to: 曹晓钢
请你多帮帮我,我是一个初学者,上面的例子是我从《java2从入门到精通》上操下来的,
我按你的办法试了一下,还是不行,提示信息如下:
Exception in thread "main" java.lang.NoClassDefFoundError: Example/class
 
这个就是你的classpath错了。
你应该加入classpath
比如java -cp . yourClassName
 
to: 曹晓钢
应该加在什么地方?
我看了好几天书,没看懂,怎么处理?
我的问题可能有点笨:
oracle 的JDBC驱动程序是那个文件,我不知道?
这个路径应给包含那些文件?
我用的是oracle9i提供的java环境
 
我如果加上下面的语句,用java.exe JDBC:ODBC:DO scott tiger命令执行就可以,
但我现在弄不明白JDBC是怎么回事?
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
Connection Con = null;
Statement Stmt = null;
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.out.print("Connect to Database error: " + e.getMessage());
}
 
你这个JDBC:ODBC:DO是用jdbc-odbc桥连上去的。不算,不算。
Oracle JDBC在Oracle_Insall_Folder/jdbc/lib/classes12.zip
把这个包加进来,然后用oracle.jdbc.driver.OracleDriver替换你的sun.jdbc.odbc.JdbcOdbcDriver
就行了
 
to: 曹晓钢
我将这个路径加到ClassPath中,提示信息还是和原先一样,
请问,是不是要把classes12.zip解压后使用
 
绝对是ClassPath没有加入Oracle JDBC drivers包的问题!
 
请问:
命令行方式是不是和JBuilder有冲突,我安装Jbuilder5.0之前,在DOS命令行方式下
只有上面写的一个程序显示
Exception in thread "main" java.lang.NoClassDefFoundError: Example/class
现在所有的以前一直运行正常的程序,都提示类似的信息,
我该怎么办?
现在用JDBC在JBuilder5.0上可以连接到ORACLE数据库了,
先谢谢 曹晓钢 大侠!!!!!!!
 
这个就是你的classpath错了。
你应该加入classpath
比如java -cp . yourClassName
这个不是说过了吗?
这是因为你在命令行下面没有把当前目录加入到classpath里面
 
谢谢 曹晓钢 大侠!!!!!!!
 
顶部