我正在学习将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
。
我显然是jsut处理执行的语法,因为它在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);
}
}
}
}
答案 0 :(得分:0)
编译课程后从命令提示符运行时使用此
java -classpath .;mysql-connector-java-5.0.8-bin.jar Version
将jar和java文件保存在同一目录中并尝试。使用 ”;”而不是如上所述的“:”。包括包名称,如果有的话。我已经测试了它的工作。
答案 1 :(得分:0)
您不应该从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.1