社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

重新整理mysql驱动程序时出现不需要的错误[重复]

vikky • 4 年前 • 1026 次点击  

如何在Java中连接到MySQL数据库?

当我尝试的时候,我得到了

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

或者

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

或者

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51818
 
1026 次点击  
文章 [ 13 ]  |  最新文章 4 年前
YakovL Corrupted_S.K
Reply   •   1 楼
YakovL Corrupted_S.K    6 年前

短代码

public class DB {

    public static Connection c;

    public static Connection getConnection() throws Exception {
        if (c == null) {
            Class.forName("com.mysql.jdbc.Driver");
            c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password");
        }
        return c;
    }

    // Send data TO Database
    public static void setData(String sql) throws Exception {
        DB.getConnection().createStatement().executeUpdate(sql);
    }

    // Get Data From Database
    public static ResultSet getData(String sql) throws Exception {
        ResultSet rs = DB.getConnection().createStatement().executeQuery(sql);
        return rs;
    }
}
Nhat Dinh
Reply   •   2 楼
Nhat Dinh    4 年前
同质光波导
  • 设置驱动程序以运行快速示例
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J

2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:

No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development

java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
  • 设置类路径

方法1:设置类路径变量。

export CLASSPATH=".:mysql-connector-java-VERSION.jar"
java MyClassFile

在上面的命令中,我将类路径设置为当前文件夹和mysql-connector-java-VERSION.jar文件。所以当 java MyClassFile 命令执行后,java应用程序启动程序将尝试在类路径中加载所有java类。 它发现了 Drive class=>BOOM错误已消失。

方法2:

java -cp .:mysql-connector-java-VERSION.jar MyClassFile

注意:Class.forName(“com.mysql.jdbc.Driver”);这在2019年4月的这个时候是不推荐的。

希望这能帮助别人!

Sarat Chandra
Reply   •   3 楼
Sarat Chandra    7 年前

MySql JDBC连接:

Class.forName("com.mysql.jdbc.Driver");     

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");         
Statement stmt=con.createStatement();            
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");  
xlm Jwalant
Reply   •   4 楼
xlm Jwalant    7 年前

您可以看到从Java应用程序连接MySQL数据库的所有步骤 here . 对于其他数据库,只需在第一步中更改驱动程序。请确保提供正确的数据库路径和正确的用户名和密码。

访问 http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

xxxvodnikxxx
Reply   •   5 楼
xxxvodnikxxx    8 年前

Connection 我以前用过,看起来是最简单的方法,但也有人建议我 if 声明-完全正确

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);
if (con != null){
 //..handle your code there 
}

或者类似的:)

可能有什么案子 getConnection 可以返回 null :)

M. S. KhiLan PaTeL
Reply   •   6 楼
M. S. KhiLan PaTeL    4 年前

简短而甜蜜的代码。

try {       
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("Driver Loaded");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
    //Database Name - testDB, Username - "root", Password - ""
    System.out.println("Connected...");         
} catch(Exception e) {
    e.printStackTrace();
}

对于SQL server 2012

try {
    String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; 
    //KHILAN is Host    and 1433 is port number     
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    System.out.println("Driver Loaded");
    conn = DriverManager.getConnection(url);
    System.out.println("Connected...");
} catch(Exception e) {
    e.printStackTrace();
}
kapil das
Reply   •   7 楼
kapil das    10 年前

在类路径中需要有mysql连接器jar。

在Java JDBC API中,一切都是用数据库来实现的。使用JDBC,我们可以编写Java应用程序
一。向数据库(任何关系数据库)发送查询或更新SQL 2。从数据库检索和处理结果

通过以下三个步骤,我们可以从任何数据库检索数据

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");

while (rs.next()) {
    int x = rs.getInt("a");
    String s = rs.getString("b");
    float f = rs.getFloat("c");
}
AJC
Reply   •   8 楼
AJC    6 年前

使用useSSL的MySQL JDBC连接。

private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");

private String connectToDb() throws Exception {
   String jdbcDriver = "com.mysql.jdbc.Driver";
   String dbUrl = "jdbc:mysql://" + db_server  +
        "?verifyServerCertificate=false" +
        "&useSSL=true" +
        "&requireSSL=true";
    System.setProperty(jdbcDriver, "");
    Class.forName(jdbcDriver).newInstance();

    Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
    Statement statement = conn.createStatement();
    String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\"";
    ResultSet resultSet = statement.executeQuery(query);
    resultSet.next();
    return resultSet.getString(1);
}
Kilian Foth
Reply   •   9 楼
Kilian Foth    13 年前

以下是从MySQL数据库中获取数据的最低要求:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/foo", "root", "password");

Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();

添加异常处理、配置等。

heffaklump
Reply   •   10 楼
heffaklump    13 年前
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";

// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
YourAboutMeIsBlank Madan Sapko
Reply   •   11 楼
YourAboutMeIsBlank Madan Sapko    4 年前

初始化数据库常量

创建常量属性数据库用户名、密码、URL和驱动程序、轮询限制等。

// init database constants
// com.mysql.jdbc.Driver
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit

初始化连接和属性

建立连接后,最好存储以供重用。

// init connection object
private Connection connection;
// init properties object
private Properties properties;

创建属性

properties对象保存连接信息,检查它是否已设置。

// create properties
private Properties getProperties() {
    if (properties == null) {
        properties = new Properties();
        properties.setProperty("user", USERNAME);
        properties.setProperty("password", PASSWORD);
        properties.setProperty("MaxPooledStatements", MAX_POOL);
    }
    return properties;
}

连接数据库

现在使用初始化的常量和属性连接到数据库。

// connect database
public Connection connect() {
    if (connection == null) {
        try {
            Class.forName(DATABASE_DRIVER);
            connection = DriverManager.getConnection(DATABASE_URL, getProperties());
        } catch (ClassNotFoundException | SQLException e) {
            // Java 7+
            e.printStackTrace();
        }
    }
    return connection;
}

断开数据库连接

完成数据库操作后,请关闭连接。

// disconnect database
public void disconnect() {
    if (connection != null) {
        try {
            connection.close();
            connection = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

一切都在一起

使用这个类 MysqlConnect 直接更改数据库名称、用户名和密码等。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class MysqlConnect {
    // init database constants
    private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";
    private static final String MAX_POOL = "250";

    // init connection object
    private Connection connection;
    // init properties object
    private Properties properties;

    // create properties
    private Properties getProperties() {
        if (properties == null) {
            properties = new Properties();
            properties.setProperty("user", USERNAME);
            properties.setProperty("password", PASSWORD);
            properties.setProperty("MaxPooledStatements", MAX_POOL);
        }
        return properties;
    }

    // connect database
    public Connection connect() {
        if (connection == null) {
            try {
                Class.forName(DATABASE_DRIVER);
                connection = DriverManager.getConnection(DATABASE_URL, getProperties());
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

    // disconnect database
    public void disconnect() {
        if (connection != null) {
            try {
                connection.close();
                connection = null;
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

如何使用?

初始化数据库类。

// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();

在你代码的其他地方。。。

String sql = "SELECT * FROM `stackoverflow`";
try {
    PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
    ... go on ...
    ... go on ...
    ... DONE ....
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    mysqlConnect.disconnect();
}

就这些 :) 如果有什么要改进的话就编辑吧!希望这对你有帮助。

Aaron Hall BalusC
Reply   •   12 楼
Aaron Hall BalusC    6 年前

以下是一个逐步说明如何安装MySQL和JDBC以及如何使用它的步骤:

  1. Download 安装MySQL服务器 . 照常做就行了。无论何时更改端口号,都要记住它。这是默认的 3306 .

  2. Download JDBC驱动程序并放入类路径 ,提取ZIP文件并将包含的JAR文件放在类路径中。特定于供应商的JDBC驱动程序是 JDBC API ( tutorial here ).

    如果您使用的是Eclipse或Netbeans之类的IDE,那么可以将JAR文件添加为 图书馆 生成路径 在项目的属性中。

    如果在命令控制台中执行“普通”操作,则需要在 -cp -classpath 执行Java应用程序时的参数。

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    这个 . 只是为了增加 现在的 目录到类路径,以便它可以找到 com.example.YourClass 以及 ; 是Windows中的类路径分隔符。在Unix和克隆中 : 应该使用。

  3. 创建 database 在MySQL中 . 让我们创建一个数据库 javabase . 你当然想统治世界,所以我们也用UTF-8吧。

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Create an user 对于Java和 grant it访问 . 仅仅因为使用 root 是个坏习惯。

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    对, java 是用户名和 password 密码在这里。

  5. Determine JDBC URL . 要使用Java连接MySQL数据库,需要使用以下语法的JDBC URL:

    jdbc:mysql://hostname:port/databasename
    • hostname :安装MySQL服务器的主机名。如果它安装在运行Java代码的同一台机器上,那么您可以使用 localhost . 它也可以是类似于 127.0.0.1 . 如果遇到连接问题并使用 127.0.0.1条 而不是 本地服务器 解决了这个问题,那么您的network/DNS/hosts配置就有问题了。

    • port :MySQL server侦听的TCP/IP端口。这是默认的 3306个 .

    • databasename :要连接到的数据库的名称。那是 javabase软件 .

    所以最终的URL应该是:

    jdbc:mysql://localhost:3306/javabase
  6. Test the connection 使用Java到MySQL . 创建一个简单的Java类 main() 方法测试连接。

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    如果你得到一个 SQLException: No suitable driver ,则意味着JDBC驱动程序根本没有自动加载,或者JDBC URL错误(即,任何加载的驱动程序都无法识别它)。通常,当您将JDBC4.0驱动程序放在运行时类路径中时,应该自动加载它。要排除其中一个,您始终可以按以下方式手动加载:

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    请注意 newInstance() 呼叫是 需要这里。只是为了修好那辆老爷车 org.gjt.mm.mysql.Driver . Explanation here . 如果这条线抛出 ClassNotFoundException ,那么包含JDBC驱动程序类的JAR文件就不会放在类路径中。

    注意,您不需要加载驱动程序 每次 之前 连接。在应用程序启动期间只需要一次就足够了。

    如果你得到一个 SQLException: Connection refused Connection timed out 或特定于MySQL的 CommunicationsException: Communications link failure ,则意味着根本无法访问数据库。这可能有以下一个或多个原因:

    1. JDBC URL中的IP地址或主机名错误。
    2. 本地DNS服务器无法识别JDBC URL中的主机名。
    3. JDBC URL中缺少端口号或端口号错误。
    4. 数据库服务器已关闭。
    5. 数据库服务器不接受TCP/IP连接。
    6. 数据库服务器已断开连接。
    7. Java和DB之间的某些东西正在阻塞连接,例如防火墙或代理。

    要解决上述问题,请遵循以下建议:

    1. 用验证和测试 ping .
    2. 刷新DNS或在JDBC URL中使用IP地址。
    3. 基于 my.cnf MySQL数据库的。
    4. 启动数据库。
    5. 验证mysqld是否在没有 --skip-networking option .
    6. 重新启动数据库并相应地修复代码,以关闭 finally .
    7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

    请注意,关闭 Connection 极其 很重要。如果不关闭连接并在短时间内获得大量连接,则数据库可能会耗尽连接,应用程序可能会中断。总是获得 连接 在一个 try-with-resources statement . 或者如果您还没有使用Java7,请显式地在 最后 一个 try-finally 封锁。接近 最后 只是为了确保它在发生异常时也能关闭。这也适用于 Statement , PreparedStatement ResultSet .

就连接性而言,就是这样。你可以找到 here 一个更高级的教程,介绍如何在一个基本的DAO类的帮助下,在数据库中加载和存储具有完整价值的Java模型对象。


对DB连接使用Singleton模式是一种糟糕的方法。参见其他问题: http://stackoverflow.com/q/9428573/ . 这是一个首发失误。

Sean Owen
Reply   •   13 楼
Sean Owen    13 年前

DriverManager 是一种相当古老的做事方式。最好的办法是 DataSource ,或者通过查找已为您配置的应用服务器容器:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");

或者直接从数据库驱动程序中实例化和配置一个:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

然后从中获取连接,如上所述:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();