我对java非常陌生,而且学习速度很快。我有一个遗留的coldfusion10应用程序,我希望以增量方式使用java类,而不是coldfusioncfcs,以此来迁移出cfland。到目前为止,我已经写好的课程都能用上。
我现在要测试如何使用cf使用的相同java连接器(在本例中是mysql-connector-java-commercial-5.1.25-bin.jar,在localhost dev机器上使用)与mysql数据库交互。
为了简化测试,我的测试类和连接器jar都在同一个文件夹(windows机器)中。
问题在于这种说法: Class.forName("com.mysql.jdbc.Driver");
-我要走了 Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
.
现在,如果我解压缩连接器jar,使文件夹出现在我的测试文件夹中: com\mysql\jdbc\Driver.class
(以及jar中的所有其他文件),我的测试类工作正常,记录被插入到db表中。酷!
但是,如果我删除实际的文件夹并依赖于jar本身,那就是当我得到classnotfoundexception时。
在我的其他学习/测试(使用我自己生成的jar文件)中,一个相关的类被从jar中提取出来。但是对于这个mysql测试的特定jar,情况并非如此。
我应该注意什么-显然我错过了什么?
谢谢。我真的很期待搬进 java 岛
默里
3条答案
按热度按时间yqyhoc1h1#
仅将jar文件放在当前目录中是不够的。您必须告诉java将mysql jar文件包含在
classpath
. 这可以通过在java命令行上用-cp
参数,或CLASSPATH
环境变量。0s7z1bwu2#
我使用postgres&h2而不是mysql。所以我不知道你对mysql有什么问题。但我刚刚能够用运行时提供的mysql驱动程序创建一个新项目。继续读下去,以我为榜样。
maven驱动的项目示例
现在的java项目通常由依赖关系管理和构建自动化工具(如maven、gradle或ivy)管理。
我使用maven快速启动原型启动了一个新的java项目。
在该原型提供的pom文件中,我做了两个更改:
更改了
<maven.compiler.source>
&<maven.compiler.target>
从1.7
至11
使用java11,目前长期支持的版本。添加了一个与您提到的jdbc驱动程序相似的依赖项:
然后我在
App
'类'main
方法。当我运行这个时,没有抛出异常。所以这个班似乎找到了。
完成pom:
完整应用程序类:
注意事项:
我在控制台输出中注意到,特定的jdbc驱动程序已经过时了。您应该调查当前使用的正确的jdbc驱动程序。
装载等级
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.driver'。驱动程序是通过spi自动注册的,通常不需要手动加载驱动程序类。Class.forName
是加载jdbc驱动程序的老式方法,不再需要。jdbc驱动程序加载在几年前有了很大的改进。今天的jdbc驱动程序是通过java的服务提供者接口(spi)工具加载的。但是那Class.forName
代码对于探索您的这个问题仍然有用,可以验证类是否可以在类路径上找到。通常最好使用
DataSource
用于获取数据库连接。您的jdbc驱动程序可能提供了DataSource
. 此类将保存连接到数据库服务器所需的信息,例如查找数据库服务器的地址,以及通过数据库服务器进行身份验证的用户名和密码。1bqhqjot3#
好 啊。感谢您的快速、有用和有趣的输入!:-)
两件事:
运行使用
java
来自@schtever works的回答:java -classpath .;mysql-connector-java-commercial-5.1.25-bin.jar MySQLAccessMain
. 我不知道那件事.;
语法。谢谢您。因为我最终将在coldfusion上下文中执行这个类(至少现在是这样),下面的cfm可以工作,因为,当然,coldfusion处理到它的jar堆的类路径。
这是java测试类
这是cfm版本
当然在应用中。cfc:
:-)快乐露营者!再次感谢。