gpt4 book ai didi

java - 如何为 jjs/Nashorn javascript 指定 CLASSPATH?

转载 作者:行者123 更新时间:2023-11-28 19:45:58 24 4
gpt4 key购买 nike

我想在我的 Nashorn javascript 中加载第 3 方类,该类作为可兴奋的 shell 脚本运行。我检查了下面的线程,但没有得到任何提示。

如何在 Nashorn 的 javascript 中访问我的类中的方法 how to access methods from my class inside javascript in Nashorn

这是我的脚本

#!/usr/java/default/bin/jjs -scripting

var db_url = "jdbc:sqlserver://1.2.3.4:1433;databaseName=email;user=email;password=email;";
var user = "email";
var pass = "email";

var conn = java.sql.DriverManager.getConnection(db_url,user,pass);
var stmt = conn.prepareStatement("select version()");
var rs = stmt.executeQuery();

while(rs.next()){
var name = rs.getString(1);
println("version=" + name);
}
rs.close();
stmt.close();
conn.close();

运行时出现此错误

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://1.2.3.4:1433;databaseName=email;user=email;password=email; at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:382) at jdk.nashorn.tools.Shell.apply(Shell.java:381) at jdk.nashorn.tools.Shell.runScripts(Shell.java:310) at jdk.nashorn.tools.Shell.run(Shell.java:166) at jdk.nashorn.tools.Shell.main(Shell.java:130) at jdk.nashorn.tools.Shell.main(Shell.java:109) Caused by: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://12.3.4:1433;databaseName=email;user=email;password=email; at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at java.lang.invoke.MethodHandleImpl$BindCaller$T/802581203.invoke_V(MethodHandleImpl.java:960) at jdk.nashorn.internal.scripts.Script$jdbc_test.runScript(./jdbc-test.js:7) at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:498) at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:206) at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378) ... 5 more

最佳答案

除了在类路径中包含 JDBC 驱动程序 jar 之外,您还必须加载驱动程序类,以便它能够向 JDBC 注册。

#!/usr/bin/env jjs -scripting -J-Djava.class.path=/usr/local/java/sqljdbc-1.1.1320.0.jar

// jjs requires -- to start passing arguments to the script in Java 8u40b12

if ($ARG.length < 4) {
print("Usage: ${__FILE__} -- server database user password");
exit(1);
}
var server = $ARG[0],
database = $ARG[1],
user = $ARG[2],
pass = $ARG[3];

var db_url = "jdbc:sqlserver://${server}:1433;databaseName=${database};";

java.lang.Class.forName('com.microsoft.sqlserver.jdbc.SQLServerDriver')

var conn = java.sql.DriverManager.getConnection(db_url,user,pass);
var stmt = conn.prepareStatement("select version()");
var rs = stmt.executeQuery();

while(rs.next()){
var name = rs.getString(1);
println("version=" + name);
}
rs.close();
stmt.close();
conn.close();

缺少的是在尝试创建连接之前对 classForName(String) 的调用。

关于java - 如何为 jjs/Nashorn javascript 指定 CLASSPATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com