为什么Class.forName会报错

walter223 2009-09-14 10:35:02
用的是MyEclipse6.5,Tomcat6.0,在编写jsp的时候没有出错,具体代码如下:
<%
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
String url="jdbc:sqlserver://192.168.***.***:1433;DatabaseName=***";
……
%>
MyEclipse6.5自带的Tomcat好像运行不了,于是启动自己安装的Tomcat,可以读取数据库内容。
但在java文件中
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
同一句,却有个叉叉,报的是 Unhandled exception type ClassNotFoundException,同一个项目,环境应该没有问题,包应该也添加好了的,而且在MyEclipse6.5的打Class.会出class()、forName()等几个方法的,这究竟是什么问题?
...全文
3597 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
AR_Lee 2009-09-23
  • 打赏
  • 举报
回复
我也刚遇到这个问题,是在建javabean的时候,Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 那行前面一把红叉,鼠标放到这行代码上就提示我添加 throws InstantiationException, Exception, Throwable.
我把语句替换了:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");没有提示了。不解
walter223 2009-09-15
  • 打赏
  • 举报
回复
哎,折腾半天总算搞明白了。
在jsp页面上,不需要抛出错误,而在java中连接数据库必须用到Java异常即java提供的用于处理程序中错误的一种机制。
分别在方法中添加throws InstantiationException, Exception, Throwable即可通过。
另外在jsp页面中可以接受sqljdbc.jar,于是驱动是Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
而到了java页面中使用sqljdbc.jar的话会报No suitable driver 的错误,于是只能改用msbase.jar、mssqlserver.jar、msutil.jar ,而相对驱动也必须更改为Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
所以觉得网上说的sqlserver2000使用字符串com.microsoft.sqlserver.jdbc.SQLServerDriver而sqlserver2005使用字符串com.microsoft.jdbc.sqlserver.SQLServerDriver应该是误解了。
虽然还不清楚为什么java页面中不能使用sqljdbc.jar,但问题解决了,感谢各位大大,现在结贴。
walter223 2009-09-14
  • 打赏
  • 举报
回复
To yingkeda:
我的项目没有在myeclipse的tomcat下发布,只是手工拷贝到自己装的Tomcat中的webapps中去,而且那个jsp是可以运行成功,访问到数据库的。
而我的问题是在同一个项目中用java这种文件格式访问数据库的情况,所以才比较奇怪,我觉得环境应该是一样的,但是就是报错。
walter223 2009-09-14
  • 打赏
  • 举报
回复
请问是什么格式不对呢?
还有就是并不是说编译的时候出错,在MyEclipse6.5打入Class.后MyEclipse6.5会出class()、forName()等几个方法的,说明是有Class.forName的方法的,但把整句Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();就会出红叉了,把鼠标移到Class上面显示Unhandled exception type InstantiationException。
这是包的问题么,如果是请详细讲下引入包的步骤,是从配置jdk那步开始还是说安装Tomcat时要设置什么,还是安装MyEclipse时要配置什么,因为我只是把jar在项目中Build Path到Libraries里面去了。而classpath也只是按网上说的加进去的。
由于网上好像没有类似的问题,所以个人认为很有可能是环境配置的问题,JDBC的三个包没有加进去,我试试加进去,但是为什么在jsp中没有加还是可以调用到数据库呢?
岁月之梦 2009-09-14
  • 打赏
  • 举报
回复
你的项目是在myeclipse的tomcat下发布的?但你又在外面装了一个,你外面的跟你的项目绑定没有!没有的话让你外面的tomcat在运行时候加载项目,这些都是在你包正确导入的前提下!
jst4me 2009-09-14
  • 打赏
  • 举报
回复
ClassNotFoundException 应该是你的JAR包没有找到,仔细查看下设置是否正确
luocheng0123 2009-09-14
  • 打赏
  • 举报
回复
好像是你写的格式不对,楼主查一下,你写的格式不对就没有办法引入包
lookhang 2009-09-14
  • 打赏
  • 举报
回复
JDBC有三个包:msbase.jar、mssqlserver.jar、msutil.jar

我一直都用JTDS~
walter223 2009-09-14
  • 打赏
  • 举报
回复
classpath为.;%JAVA_HOME%\lib;%Java_home%\lib\dt.jar;%Java_home%\lib\tools.jar;%Java_home%\jre\lib\ext\sqljdbc.jar;%Java_home%\jre\lib\rt.jar;
相关驱动包应该全,毕竟jsp页面上面显示无误。
sqlserver2000和sqlserver2005的字符串也是不同的,这个知道:com.microsoft.sqlserver.jdbc.SQLServerDriver跟com.microsoft.jdbc.sqlserver.SQLServerDriver的不同,版本没有错。
另外Class.forName("")返回的是类,.newInstance()返回一实例,虽然网上都说只需要Class.forName("")就可以了,但是在jsp页面中,如果没有实例化的话还是报错,所以把.newInstance()加进去了。
zhangwenmin 2009-09-14
  • 打赏
  • 举报
回复
检查名字正确性,jar包路径是否正确
liuhe688 2009-09-14
  • 打赏
  • 举报
回复
检查一下classpath下有没有相关的驱动包,sqlserver2000和sqlserver2005的字符串也是不同的, 你用的是哪个?另外再顺便说一下,程序中用.newInstance()没有什么意义,当执行完Class.forName("")之后,驱动类被加载到内存,自动执行驱动类的静态块,在这个静态块中驱动类会把自己注册到DriverManager中,所以只需用Class.forName("")就行了.
walter223 2009-09-14
  • 打赏
  • 举报
回复
包是指sqljdbc.jar?如果是这个,那已经添加了。
酒剑仙 2009-09-14
  • 打赏
  • 举报
回复
关注。有包没有?
xiaozhangnima 2009-09-14
  • 打赏
  • 举报
回复
明显是驱动不对,看那驱动路径
walter223 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xiaozhangnima 的回复:]
不是有异常才去捕获
Java异常是java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的异常事件(如:除0溢出,数组下标越界,所要读取文件不存在)。
设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

[/Quote]

哦。

加了try进去后运行
报Exception in thread "main" java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
xiaozhangnima 2009-09-14
  • 打赏
  • 举报
回复
不是有异常才去捕获
Java异常是java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的异常事件(如:除0溢出,数组下标越界,所要读取文件不存在)。
设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。
walter223 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 youjianbo_han_87 的回复:]
我靠,这么多比我还菜的,这句话是说你有异常没有捕获
加上
try
{

//你的代码。

}catch(ClassNotFoundException e)
{
    //处理异常
}


[/Quote]
加个try是可以编译啊,但是编译的时候不是一样不会通过么,那有什么意义呢
youjianbo_han_87 2009-09-14
  • 打赏
  • 举报
回复
我靠,这么多比我还菜的,这句话是说你有异常没有捕获
加上
try
{

//你的代码。

}catch(ClassNotFoundException e)
{
//处理异常
}

walter223 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 javamao007 的回复:]
在项目部署在tomcat下 试试
[/Quote]
请问怎么部署?我是把WebRoot拷贝到自己装的Tomcat中的webapps中去的,Myeclipse发布项目还不会。
伯虎点蚊香 2009-09-14
  • 打赏
  • 举报
回复
在项目部署在tomcat下 试试
加载更多回复(1)

51,406

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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