简体   繁体   English

如何为jjs / Nashorn JavaScript指定CLASSPATH?

[英]how to specify the CLASSPATH for for jjs/Nashorn javascript?

i want to load a 3rd party class in my Nashorn javascript which runs as a excitable shell script.i check the thread below but got no hint. 我想在我的Nashorn javascript中加载一个第三方类,它作为可激励的shell script.i检查下面的线程,但没有任何提示。

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

here is my script 这是我的剧本

#!/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();

get this error while runing 运行时出现此错误

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; 线程“主”中的异常java.lang.RuntimeException:java.sql.SQLException:找不到适用于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; 在jdk.nashorn.tools.Shell.apply(Shell.java:381)在jdk.nashorn.tools.Shell.apply(jdk.nashorn.tools.Shell.runScripts(Shell.java)在jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:382) :310),位于jdk.nashorn.tools.Shell.run(Shell.java:166),位于jdk.nashorn.tools.Shell.main(Shell.java:130),位于jdk.nashorn.tools.Shell.main(Shell。 java:109)由以下原因引起:java.sql.SQLException:找不到适用于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 在java.sql.DriverManager.getConnection(DriverManager.java:689)在java.sql.DriverManager.getConnection(DriverManager.java:247)在java.lang.invoke.MethodHandleImpl $ BindCaller $ T / 802581203.invoke_V(MethodHandleImpl.java :960)在jdk.nashorn.internal.scripts.Script $ jdbc_test.runScript(./ jdbc-test.js:7)在jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:498)在jdk。 nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:206)位于jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378)...还有5个

In addition to including the JDBC driver jar in the classpath, you must load the driver class so that it will register with JDBC. 除了在类路径中包括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();

What was missing was the call to classForName(String) before attempting to create the connection. 缺少的是尝试创建连接之前对classForName(String)的调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM