Java 控制台執行帶自訂包定義的類,出現“Exception in thread "main" java.lang.NoClassDefFoundError: ConnectSQLServer (wrong name: sine/ConnectSQLServer)”
1、先說明一下代碼實現:自訂package sine,
原始碼儲存路徑為:E:\JSP\HibernateDemo\HibernateDemoProject\src\sine\ConnectSQLServer.java
package sine;import java.sql.*;public class ConnectSQLServer { public static void main(String args[]){ String url="jdbc:sqlserver://localhost:1433;DatabaseName=pubs"; String user_name="sa"; String user_password="sine88"; String sqlStr="select * from jobs;"; try{ Connection con=DriverManager.getConnection(url,user_name,user_password); System.out.println("Connect Success!"); Statement st=con.createStatement(); System.out.println("Create Statement Success!"); ResultSet rs=st.executeQuery(sqlStr); System.out.println("Query Success!"); System.out.println("-----------------------"); while(rs.next()){ System.out.println(rs.getString("job_desc")); } rs.close(); st.close(); con.close(); } catch(Exception err){ System.out.println("Connect failed!"); err.printStackTrace(System.out); } }}
2、切換到java原始碼所在的檔案夾目錄下,編譯java代碼。
E:\JSP\HibernateDemo\HibernateDemoProject\src\sine>javac ConnectSQLServer.java
3、位元組碼的解釋與運行:java ConnectSQLServer 出現如下錯誤資訊:
E:\JSP\HibernateDemo\HibernateDemoProject\src\sine>java ConnectSQLServer
Exception in thread "main" java.lang.NoClassDefFoundError: ConnectSQLServer (wrong name: sine/ConnectSQLServer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
4、解決方案
先將控制台上的目錄切換到包名的上一個檔案夾處,例如,這裡的package名稱為sine,那麼這裡就切換到sine的上一層目錄,也就是src目錄下,
然後執行如下命令:E:\JSP\HibernateDemo\HibernateDemoProject\src>java sine.ConnectSQLServer
此時結果如下:
E:\JSP\HibernateDemo\HibernateDemoProject\src>java sine.ConnectSQLServer
Connect Success!
Create Statement Success!
Query Success!
-----------------------
New Hire - Job not specified
Chief Executive Officer
Business Operations Manager
Chief Financial Officier
Publisher
Managing Editor
Marketing Manager
Public Relations Manager
Acquisitions Manager
Productions Manager
Operations Manager
Editor
Sales Representative
Designer
屆時,問題解決。 同理,加入包名是:org.sine,那麼執行的時候就需要切換到org的上一個目錄下了。