有两种方法
1.java se 6以后实现了jsr 223规范
用
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngineManager scriptEngine = factory.getEngineByName("javascript");//或者"js"
scriptEngine.eval(code);//执行一段脚本,code是js代码
很方便调用脚本
2.可以使用脚本语方本身提供的与java的集成手段
与jython集成
使用jsr223:
前提下载jython的包,已实现jsr223
(建议在官网上下载,在安装目录下有jython.jar,http://repo2.maven.org/maven2/org/python/jython/2.5.0/
这里也有,但是这个包里没有jsr223的实现,看包下存不存在org.python.jsr223)
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngineManager scriptEngine = factory.getEngineByName("python");//或者"jython"
scriptEngine.eval(code);
使用PythonInterpreter,可以调用exec(String code)方法:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec(code);
访问数据库
使用jdbc:
from oracle.jdbc.driver import OracleDriver
from java.sql import DriverManager
username = 'hr'
password = '123456'
url = 'jdbc:oracle:thin:@localhost:1521:XE'
driver = OracleDriver()
DriverManager.registerDriver(driver)
conn = DriverManager.getConnection(url, username, password)
stmt = conn.createStatement()
sql = "select salary from EMPLOYEES t where t.salary<2300"
rs = stmt.executeQuery(sql)
while (rs.next()):
print rs.getInt('salary')
rs.close()
stmt.close()
结果:
2200
2100
2200
使用zxJDBC :
from com.ziclix.python.sql import zxJDBC
url = 'jdbc:oracle:thin:@localhost:1521:XE'
username = 'hr'
password = '123456'
driverName = 'oracle.jdbc.driver.OracleDriver'
mysqlConn = zxJDBC.connect(url,username, password,driverName)
cursor = mysqlConn.cursor()
cursor.execute("select last_name from EMPLOYEES t where t.salary<2300");
#print cursor.fetchone()
list = cursor.fetchall()
for record in list:
print "name:"+record[0]
#print cursor.description[0]
#print cursor.description[1]
结果:
name:麦克
name:Olson
name:Philtanker
从数据库中查出的中文内容正常的。
而在代码里面的中文全部是乱码或抛异常,未解决。
与jruby集成
使用jsr223:
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngineManager scriptEngine = factory.getEngineByName("jruby");//或者"ruby"
scriptEngine.eval(code);
访问数据库
require 'java'
module JavaLang
include_package "java.lang"
end
module JavaSql
include_package 'java.sql'
end
begin
username = 'hr'
password = '123456'
url = 'jdbc:oracle:thin:@localhost:1521:XE'
driverName = 'oracle.jdbc.driver.OracleDriver'
JavaLang::Class.forName(driverName).newInstance
conn = JavaSql::DriverManager.getConnection(url, username, password)
stmt = conn.createStatement
sql = "select last_name from EMPLOYEES t where t.salary<2300"
rs = stmt.executeQuery(sql)
while (rs.next) do
puts "名字:"+rs.getString("last_name")
end
rs.close
stmt.close
conn.close()
rescue JavaLang::ClassNotFoundException
puts "ClassNotFoundException"
rescue JavaSql::SQLException
puts "SQLException"
end
结果:
名字:楹﹀厠
名字:Olson
名字:Philtanker
从数据库中查出的中文内容为乱码的。
而在代码里面的中文正常。
与groovy集成
使用jsr223:
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngineManager scriptEngine = factory.getEngineByName("groovy");//或者"Groovy"
scriptEngine.eval(code);
使用GroovyShell:
GroovyShell shell = new GroovyShell();
Script script = shell.parse(code);
Object result = script.run();
访问数据库
import groovy.sql.Sql
def username = 'hr'
def password = '123456'
def url = 'jdbc:oracle:thin:@localhost:1521:XE'
def driverName = 'oracle.jdbc.driver.OracleDriver'
def sql = Sql.newInstance(url, username, password, driverName)
sql.eachRow("select last_name from EMPLOYEES t where t.salary<2300") {
println "名字:${it.last_name}"
}
结果:
名字:麦克
名字:Olson
名字:Philtanker
在使用groovy过程中碰到了一个异常
Exception in thread "main" java.lang.VerifyError: (class: groovy/runtime/metaclass/java/util/ArrayListMetaClass, method: super$2$invokeMethod signature: (Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;ZZ)Ljava/lang/Object;) Illegal use of nonvirtual function call
这个异常解决花了很长时间
是因为在原来项目中存在json-lib-2.1.jar(有可能名称为json-lib-2.1-jdk15.jar),这个包是用来处理json的,与groovy1.7.5存在冲突,更新为json-lib-2.3.jar即可
(json-lib里有一些groovy运行时处理的内容)
分享到:
相关推荐
对于Jruby、Jython和Groovy三种动态语言,长期以来很多人犹豫于如何选择它们。本文提出一个非常有力的例证证明:如果你是一个基于Java虚拟机的开发者,那么请放弃Jruby和Jython。
主要介绍了Java调用python的方法(jython),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java与Jython的相互调用,对初学者很有帮助
java调用python脚本所需jar包,最新的版本,亲测可用,希望对你有帮助。jython-standalone-2.7.0.jar,jython-standalone-2.7.0.jar,
Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它...
Jython 示例 介绍 这是一个从 Java 执行 Python 脚本的简单示例。 也可以看看: 编译 mvn clean package 跑步 java -jar target/jython-example-1.0-SNAPSHOT.jar
Clojure是一个JVM的动态函数式语言,最近发布了1.0版本,版本中Clojure提供了一个...Clojure语言是一个JVM(包括Groovy,Jython和JRuby等语言)的新语言,它提供了活力,简洁得代码,并且与Java具有良好的相互操作性。
java中jython操作把python数据类型转成java类型 例如list->List dict->Map set->Set 以及一些基本操作的包装整合
这里java中执行python脚本工具类,需要使用jython.jar java中执行python脚本工具类,学习的时候写着玩: import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java....
该资源包含jython2.5.4.jar和jython2.7.0.jar,jython的版本要与jdk的版本要对应,这样可以解决“Unsupported major.minor version 51.0”问题。其中,对于jdk1.6.x的版本,请使用jython2.5.4.jar jdk1.7.x的版本,...
主要介绍了Java实现调用jython执行python文件的方法,结合实例形式分析了Java调用jython执行python文件的常见操作技巧及相关问题解决方法,需要的朋友可以参考下
Jython - Python的Java语言实现 jython_installer-2.5.2rc2.zip 注意,需要先安装JDK 1, 解压到某处 2, 进入该解压目录, 执行jython.bat
Jython for Java Programmers.chm Java程序员学习Jython的教程。
今天小编就为大家分享一篇关于Java与Python之间使用jython工具类实现数据交互,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
启动IBM WAS集群上的所有服务器,使用Jython实现,调用方法wsadmin.sh -f StartAllServers.py
自己总结了一下jython的特性。供大家共同学习。 Jython 是一种完整的语言,...其实,Jython 说简单一些,就是用 Java 语言实现的 Python 解释器,这种关系也就意味着你可以用 Python 语言编写程序而同时使用 Java 库。
Jython is an open source implementation of the high-level, dynamic, object-oriented scripting language Python seamlessly integrated with the Java platform. The predecessor to Jython, JPython, is ...
java调用Python示例,详情请参考博文:http://blog.csdn.net/l1028386804/article/details/50915556
java调用python脚本所需的jar包,可以在eclipse中执行python脚本, jython-2.7.1b3.jar