【发布时间】:2014-06-13 08:30:24
【问题描述】:
我正在学习将 java 类连接到 MySQL (http://zetcode.com/db/mysqljava/) 的教程。我可以让代码在 Eclipse 中编译和运行,但是当我试图在命令行运行它时我做错了。顺便说一句,我正在使用 OSX 的终端。
我执行以下编译
cd dropbox/workspace/mysqltut/src/zetcode
javac Version.java
这成功创建了 Version.class 文件。
我的问题的简单版本是,如何从命令行运行它?下面详细介绍了我使用教程显示的行的尝试以及我为使类文件正常运行而做出的变化。
如果我尝试使用教程命令行运行它:java -cp .:lib/mysql-connector-java-5.1.30-bin.jar zetcode/Version.java,我会得到Error: Could not find or load main class zetcode.Version
所以我想,哦,我已经在 zetcode 中,所以我修改它并使用 java -cp .:lib/mysql-connector-java-5.1.30-bin.jar Version.java,这次我得到以下信息:
Exception in thread "main" java.lang.NoClassDefFoundError: Version (wrong name: zetcode/Version)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
不确定wrong name: zetcode/Version 是什么意思。我已经在zetcode了。请记住,在lib 之前,我找不到开关.: 的含义。我只是离开教程。所以我尝试将该开关更改为../,因为lib 比zetcode 高一级(与src 处于同一级别)。我又收到了Error: Could not find or load main class Version。
我显然只是在错误地处理执行语法,因为它在 IDE 中运行良好。提前致谢。
如果您需要源代码,我正在使用:
package zetcode;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Version {
public static void main(String[] args) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/";
String user = "root";
String password = "";
try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery("SELECT VERSION()");
if (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(Version.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
} finally {
try {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (con != null) {
con.close();
}
} catch (SQLException ex) {
Logger lgr = Logger.getLogger(Version.class.getName());
lgr.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
}
【问题讨论】:
-
我认为您需要将当前目录添加到类路径中。试试
:lib/mysql-connector-java-5.1.30-bin.jar;.