python - 将 zxJDBC 与 jython 一起使用不起作用

标签 python mysql class jython

因为我想将我最近的 Minecraft Python/Jython Bukkit 插件的数据存储从平面文件转换为 MySQL 数据库,所以我开始谷歌搜索。为 Python 尝试了 sqlite3 和 MySQLd 但没有成功,所以在搜索 StackOverflow 几个小时后我想到了这个问题和答案,它应该解决我的问题,因为它是同一件事。我尝试按照 this answer 中给出的步骤进行操作,但由于此错误而没有成功:

[15:31:45 WARN]: org.bukkit.plugin.InvalidPluginException: Traceback (most recen
t call last):
File "<iostream>", line 10, in <module>
zxJDBC.DatabaseError: unable to instantiate datasource

[15:31:45 WARN]:        at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlug
in(PythonPluginLoader.java:296)
[15:31:45 WARN]:        at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlug
in(PythonPluginLoader.java:113)
[15:31:45 WARN]:        at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlug
in(PythonPluginLoader.java:83)
[15:31:45 WARN]:        at org.bukkit.plugin.SimplePluginManager.loadPlugin(Simp
lePluginManager.java:305)
[15:31:45 WARN]:        at com.master.bukkit.python.PythonLoader.onLoad(PythonLo
ader.java:113)
[15:31:45 WARN]:        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugin
s(CraftServer.java:260)
[15:31:45 WARN]:        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.reload(Cra
ftServer.java:628)
[15:31:45 WARN]:        at org.bukkit.Bukkit.reload(Bukkit.java:279)
[15:31:45 WARN]:        at org.bukkit.command.defaults.ReloadCommand.execute(Rel
oadCommand.java:23)
[15:31:45 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCo
mmandMap.java:192)
[15:31:45 WARN]:        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCo
mmand(CraftServer.java:542)
[15:31:45 WARN]:        at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchSe 
rverCommand(CraftServer.java:529)
[15:31:45 WARN]:        at net.minecraft.server.v1_7_R1.DedicatedServer.aw(Dedic
atedServer.java:286)
[15:31:45 WARN]:        at net.minecraft.server.v1_7_R1.DedicatedServer.u(Dedica
tedServer.java:251)
[15:31:45 WARN]:        at net.minecraft.server.v1_7_R1.MinecraftServer.t(Minecr
aftServer.java:541)
[15:31:45 WARN]:        at net.minecraft.server.v1_7_R1.MinecraftServer.run(Mine
craftServer.java:453)
[15:31:45 WARN]:        at net.minecraft.server.v1_7_R1.ThreadServerApplication.
run(SourceFile:617)

我使用的导致上述错误的代码:

from com.ziclix.python.sql import zxJDBC

params = {}
params['serverName'] = 'host'
params['databaseName'] = 'dbname'
params['user'] = "username"
params['password'] = "pw"
params['port'] = 3306
db = apply(zxJDBC.connectx, ("org.gjt.mm.mysql.MysqlDataSource",), params)

另外,我试过这段代码:

from com.ziclix.python.sql import zxJDBC

d, u, p, v = "jdbc:mysql://host", "root", "pw", "org.gjt.mm.mysql.Driver"
db = zxJDBC.connect(d, u, p, v)

但它导致了这个错误:

[15:37:20 WARN]: Caused by: Traceback (most recent call last):
File "<iostream>", line 13, in <module>
zxJDBC.DatabaseError: driver [org.gjt.mm.mysql.Driver] not found

[15:37:20 WARN]:        at org.python.core.PyException.doRaise(PyException.java:
200)
[15:37:20 WARN]:        at org.python.core.Py.makeException(Py.java:1239)
[15:37:20 WARN]:        at org.python.core.Py.makeException(Py.java:1243)
[15:37:20 WARN]:        at com.ziclix.python.sql.zxJDBC.makeException(zxJDBC.jav
a:328)
[15:37:20 WARN]:        at com.ziclix.python.sql.connect.Connect.__call__(Connec
t.java:78)
[15:37:20 WARN]:        at org.python.core.PyObject.__call__(PyObject.java:441)
[15:37:20 WARN]:        at org.python.core.PyObject.__call__(PyObject.java:447)
[15:37:20 WARN]:        at org.python.pycode._pyx5.f$0(<iostream>:15)
[15:37:20 WARN]:        at org.python.pycode._pyx5.call_function(<iostream>)
[15:37:20 WARN]:        at org.python.core.PyTableCode.call(PyTableCode.java:165
)
[15:37:20 WARN]:        at org.python.core.PyCode.call(PyCode.java:18)
[15:37:20 WARN]:        at org.python.core.Py.runCode(Py.java:1275)
[15:37:20 WARN]:        at org.python.util.PythonInterpreter.execfile(PythonInte
rpreter.java:235)
[15:37:20 WARN]:        at org.python.util.PythonInterpreter.execfile(PythonInte
rpreter.java:230)
[15:37:20 WARN]:        at net.lahwran.bukkit.jython.PythonPluginLoader.loadPlug
in(PythonPluginLoader.java:244)
[15:37:20 WARN]:        ... 16 more

我实际做了什么(一步一步)?

我从 this link 下载了压缩的 mysql connector/J (在已经链接的 S.O. 问题的回答中给出),解压它,从中复制“mysql-connector-java-3.1.14-bin.jar”,粘贴到这个路径“C:\Users\my_name\Documents\1.7 .2twistedjobs\plugins\MySQL_jython”。之后,我打开控制面板,单击系统,转到高级系统设置,单击环境变量按钮,添加新命名的 CLASSPATH(因为没有该名称的变量),并将此路径设置为值“C:\Users\my_name\Documents\1.7.2twistedjobs\plugins\MySQL_jython\mysql-connector-java-3.1.14-bin.jar”,点击确定。

注意:因为zxJDBC没有导入错误,这很奇怪,因为它明明导入成功了,但是找不到驱动...

提前致谢!

最佳答案

您的第二段代码应该可以工作。它适用于我的机器。您似乎遇到的是 CLASSPATH 问题。您可以尝试将 MySQL 驱动程序 jar 文件放在扩展目录中,在 Windows 上您可以在此处找到:

%SystemRoot%\Sun\Java\lib\ext 

该驱动程序随后可用于您的所有 Java 应用程序(如果您需要的话)。详细信息在 Oracle 的文档中:

http://docs.oracle.com/javase/tutorial/ext/basics/install.html

我想再说两点。首先,即使驱动程序将使用您给它的名称工作,您最终可能希望将其从 org.gjt.mm.mysql.Driver 更改为 com.mysql.jdbc.Driver ,这是现代的重命名版本。 (如果您对原因感兴趣,请在此处查看详细信息:https://stackoverflow.com/a/5808184/155167。)

您的第一段代码将不起作用,因为 org.gjt.mm.mysql 包中没有 MysqlDataSource 类。您引用的那个类实际上在这里:com.mysql.jdbc.jdbc2.optional.MysqlDataSource,但我不知道 那个 片段是否有效。

就像我说的,将 MySQL 驱动程序 jar 正确地放入您的 CLASSPATH 中,它应该可以工作。有关 CLASSPATH 设置的 Oracle 文档位于此处:

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html

祝你好运!

关于python - 将 zxJDBC 与 jython 一起使用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26440410/

相关文章:

python - 无法解压不可迭代的 datetime.date 对象

php - MySQL 查询,我将多条记录添加到一条记录

php - WP 数据库错误未知列 ‘wp_’ in ‘field list’ for query SELECT wp_

C++类名冲突

Python - 运行 pygame

python - 在 python-social-auth 中的同一提供商上拥有多个帐户

python - Python 中的逐字终端打印速度慢?

php - 如何处理 PHP 和 PDO 中的用户文本输入?

java - 购物车 Java 应用程序 (addToCart)

python - 在另一个类的类函数中使用变量(python)