我在网上搜索试图找到使用java和JDBC连接MySQL的解决方案。不幸的是,我找到了多个答案,没有一个能解决我的问题。
我从MySQL下载了JDBC,并解压缩了该文件以找到.jar。我将.jar放在我的C:/ Program Files(X86)/ Java / JDK ... / JRE / lib / ext文件夹中。我将环境变量类路径(可能是CLASSPATH,ClassPath ??)设置为以下内容:
%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext
我根据我见过的所有不同解决方案使用我编写的脚本来获取此内容:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySql {
public static void main(String[] args)
{
Connection con = getConnection();
if (con != null) {
System.out.println("Connection Made");
}
else {
System.out.println("Connection not made");
}
}
private static Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java");
System.out.println("Connection Made");
conn.close();
}
catch (SQLException e)
{
System.out.println(e.getMessage());
System.exit(0);
}
catch (ClassNotFoundException e)
{
System.out.println(e.getMessage());
System.exit(0);
}
return con;
}
}
它使用javac MySql.java编译。然后当它运行时(java MySql)我得到com.mysql.jdbc。我已经读过我不需要注册驱动程序,但是当我删除Class.forName时,我得到的是“无法找到JDBC驱动程序”错误。
我无法将问题缩小到: 1)。类路径未正确设置。 2)。不正确的java连接代码。 3)。无法找到MySQL服务器。
任何帮助都将不胜感激。
编辑 -
我将.jar文件放在桌面上以进行测试。更改了系统类路径变量:
%CLASSPATH%;.;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar
然后当我为错误陈述添加跟踪时,我得到:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass<Unkown Source>
at java.lang.ClassLoader.loadclass (Unknown source)
at sun.misc.Launcher$AppClassLoader.loadclass(Unkown Source)
etc.
etc.
编辑2 - 我花了两天时间使用Connect Java to a MySQL database作为资源,我所遵循的所有说明都没有解决我的问题。
答案 0 :(得分:4)
而不是
System.out.println(e.getMessage());
这样做
e.printStackTrace();
你会看到例外是:
java.lang.ClassNotFoundException: com.mysql.jdbc
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at MySql.getConnection(MySql.java:24)
at MySql.main(MySql.java:10)
删除Class.forName。您可能会获得访问被拒绝或其他一些错误,但它将解决ClassNotFoundException。以下是应该有效的最终编辑版本:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySql {
public static void main(String[] args)
{
Connection con = getConnection();
if (con != null) {
System.out.println("Connection Made");
}
else {
System.out.println("Connection not made");
}
}
private static Connection getConnection() {
Connection con = null;
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java");
System.out.println("Connection Made");
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
System.exit(0);
}
return con;
}
}
答案 1 :(得分:1)
如果你需要Class.forName(),你必须使用正确的类:
Class.forName("com.mysql.jdbc.Driver");
但是已经不再需要JDBC 4了。
创建完整的Exception堆栈跟踪并使用结果在此处进行搜索 - 之前已解决了大多数常见错误。
NoSuitableDriverFound是一个非常强大的指示,当您运行代码时,类路径中缺少mysql-connector.jar(而不是.zip ....)。
你可以尝试这样:
运行java -cp .;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar MySql
答案 2 :(得分:0)
我认为你必须在类路径中添加包含驱动程序的jar文件名的路径。像这样:
%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext\mysql-connector-java-xxx.jar
答案 3 :(得分:0)
如果您的Java版本为6或更高版本,则不需要Class.formName(...)
代码。
并确保一切正常,按以下方式编译和执行代码。
编译:
java -cp PATH_TO_DRIVER; YOUR_CLASS.java
执行:
java -cp PATH_TO_DRIVER; YOUR_CLASS
将YOUR_CLASS更改为您的类名称,将PATH_TO_DRIVER更改为您下载MySQL驱动程序的路径。
希望它有所帮助!
答案 4 :(得分:0)
试试这段代码!
public static void main(String[] argv) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your MySQL JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("MySQL JDBC Driver Registered!");
Connection connection = null;
try {
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/yourSCHEMAname,"login", "password");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
}