我正在学习一篇将java类连接到MySQL (http://zetcode.com/db/mysqljava/)的教程。我可以让代码在Eclipse中编译和运行,但是在尝试在命令行运行它时,我做了一些错误的事情。我正在使用OSX的终端btw。
我执行以下步骤来编译
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);
}
}
}
}发布于 2014-04-28 17:14:25
在编译类之后从命令提示符运行时,请使用以下代码
java -classpath .;mysql-connector-java-5.0.8-bin.jar Version将jar和java文件放在同一目录中,然后尝试。如果有的话,使用";“代替前面提到的":”above.include包名称。我已经测试过它的工作情况。
发布于 2014-06-27 05:40:45
您不应该从src目录编译源代码。编译应该从项目目录中完成。项目目录包含bin、src和lib目录。
Linux tree命令以树状格式列出我们项目目录。
$ tree
.
├── bin
│ └── zetcode
│ └── Version.class
├── lib
│ └── mysql-connector-java-5.1.31-bin.jar
└── src
└── zetcode
└── Version.java二进制文件放入bin目录,库放入lib,源代码放入src目录。请注意,目录必须与包名称匹配。
为了编译源代码,我们使用以下命令:
$ javac -d bin src/zetcode/Version.java
使用-d选项,我们为创建的类文件设置目录。
以下命令执行该程序:
$ java -cp bin:lib/mysql-connector-java-5.1.31-bin.jar zetcode.Version
5.5.37-0ubuntu0.14.04.1https://stackoverflow.com/questions/23330160
复制相似问题