使用class.forname方法使用数据库的驱动程序后如何发布?

haichuang 2001-10-23 02:15:20
我有一个JAVA程序使用了class.forname动态注册数据库的驱动程序,可无论我如何设置环境变量,它都说这个类找不到,为何?
附源码:
package beangender;

import java.sql.*;
import common.tools.string.StringTool;
import java.io.*;

/**
* Title: JavaBean gender
* Description:
* Copyright: Copyright (c) 2001
* Company: RedDot.com
* @author Haichuang xing
* @version 1.0
*/

public class Bean {
private String beanName;
private String tableName;
private Connection myConn;
private Statement myStat;
private String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String sConnStr="jdbc:microsoft:sqlserver://dbserver:1433";
private String database="ioffice";
private String userName="sa";
private String password="";

private ResultSetMetaData myResult;
public Bean() {
}
public String genCode() throws Exception{
Class.forName(driver); //就是这一句,老说com.microsoft.jdbc.sqlserver.SQLServerDriver类找不到,我已经设置好了classpath,而且此程序在jbuilder5中是可以运行的,但不能拿出来在命令行下执行。
myConn = DriverManager.getConnection(sConnStr,userName,password);
myConn.setCatalog(database);
myStat=myConn.createStatement();
StringBuffer code=new StringBuffer("public class "+beanName+"{\n");
myResult=myStat.executeQuery("select * from ["+tableName+"]").getMetaData();
for(int i=1;i<=myResult.getColumnCount();i++){
code.append("\tprivate "+myResult.getColumnClassName(i)+" "+StringTool.lowCaseFirChr(myResult.getColumnName(i))+";\n");
}
code.append("\n");
for(int i=1;i<=myResult.getColumnCount();i++){
code.append("\tpublic void set"+StringTool.upCaseFirChr(myResult.getColumnName(i))+"(String "+StringTool.lowCaseFirChr(myResult.getColumnName(i))+"){\n");
code.append("\t\tthis."+StringTool.lowCaseFirChr(myResult.getColumnName(i))+" = "+StringTool.lowCaseFirChr(myResult.getColumnName(i))+";\n\t}\n");
code.append("\tpublic "+myResult.getColumnClassName(i)+" get"+StringTool.upCaseFirChr(myResult.getColumnName(i))+"(){\n");
code.append("\t\treturn this."+StringTool.lowCaseFirChr(myResult.getColumnName(i))+";\n\t}\n");
}
code.append("}");
return code.toString();
}
public void setDriver(String driver){
this.driver=driver;
}
public String getDriver(){
return this.driver;
}
public void setConnStr(String connStr){
this.sConnStr=connStr;
}
public String getConnStr(){
return this.sConnStr;
}
public void setDatabase(String database){
this.database=database;
}
public String getDatabase(){
return this.database;
}
public void setUserName(String userName){
this.userName=userName;
}
public String getUserName(){
return this.userName;
}
public void setPassword(String password){
this.password=password;
}

public void setBeanName(String beanName){
this.beanName=beanName;
}
public String getBeanName(){
return beanName;
}
public void setTableName(String tableName){
this.tableName=tableName;
}
public String getTableName(){
return tableName;
}
public void saveTo(String filePath) throws Exception{
FileOutputStream myFile=new FileOutputStream(new File(filePath));
myFile.write(genCode().getBytes());
}
}
...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobokong 2001-10-25
  • 打赏
  • 举报
回复
再帮你抬一次
haichuang 2001-10-24
  • 打赏
  • 举报
回复
Manifest.mf文件已经正确设置,程序可以运行,但是执行到Class.forName(driver); 这一句时就产生一个driver类找不到的异常,但实际上在classpath中已经配置了此类的正确信息。
bobokong 2001-10-24
  • 打赏
  • 举报
回复
up
haichuang 2001-10-24
  • 打赏
  • 举报
回复
还有没有人回答,没人回就结贴了!
bobokong 2001-10-23
  • 打赏
  • 举报
回复
如果要运行jar,需在jar中的Manifest.mf文件设置Main-Class:<ClassName>
haichuang 2001-10-23
  • 打赏
  • 举报
回复
谢谢你的回答,我已经找到原因,但不知对不对:
好像是在classpath环境变量中的目录来长文件名中间有空格的问题,这样调用就可以了:
java -classpath "BeanGender.jar;%classpath%;" beangender.BeanGender
但是不知道为什么这样调用不行:
java -jar BeanGender.jar -classpath "%classpath%;"

高手能否给个答案?
bobokong 2001-10-23
  • 打赏
  • 举报
回复
上面说错了
你需要把jbuild下的某个jar设到classpath中
bobokong 2001-10-23
  • 打赏
  • 举报
回复
是class.forName(String className)
N大写

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧