将java连接到mysql数据库

c7rzv4ha  于 2021-06-19  发布在  Mysql
关注(0)|答案(14)|浏览(357)

如何连接到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
ca1c2owp

ca1c2owp1#

以下是从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();

添加异常处理、配置等。

vjrehmav

vjrehmav2#

下面是如何安装mysql和jdbc以及如何使用它的逐步说明:
下载并安装mysql服务器。照常做就行了。无论何时更改端口号,都要记住它。它是默认的 3306 .
下载jdbc驱动程序并放入classpath,提取zip文件并将包含jar的文件放入classpath。特定于供应商的jdbc驱动程序是JDBCAPI的具体实现(这里是教程)。
如果您使用的是像eclipse或netbeans这样的ide,那么您可以通过将jar文件作为库添加到项目属性中的构建路径来将其添加到类路径中。
如果您是在命令控制台中“普通”执行此操作,那么您需要在命令控制台中指定jar文件的路径 -cp 或者 -classpath 执行java应用程序时的参数。

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

这个 . 只是将当前目录也添加到类路径中,以便它可以定位 com.example.YourClass 以及 ; 是类路径分隔符,与windows中的一样。在unix和克隆中 : 应该使用。
在mysql中创建数据库。让我们创建一个数据库 javabase . 你当然想统治世界,所以让我们也使用utf-8。

CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

为java创建一个用户并授予其访问权限。只是因为使用 root 是个坏习惯。

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

对, java 是用户名和 password 这里是密码。
确定jdbc url。要使用java连接mysql数据库,需要以下语法的jdbc url:

jdbc:mysql://hostname:port/databasename
``` `hostname` :安装mysql server的主机名。如果它安装在运行java代码的同一台机器上,那么您只需使用 `localhost` . 也可以是ip地址,如 `127.0.0.1` . 如果遇到连接问题并使用 `127.0.0.1` 而不是 `localhost` 如果解决了,那么您的网络/dns/hosts配置中就有问题了。 `port` :mysql服务器侦听的tcp/ip端口。这是默认设置 `3306` . `databasename` :要连接到的数据库的名称。那是 `javabase` .
所以最终的url应该是这样的:

jdbc:mysql://localhost:3306/javabase

使用java测试与mysql的连接。使用 `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` . 请解释一下。如果这条线 `ClassNotFoundException` ,则包含jdbc驱动程序类的jar文件不会被放置在类路径中。
请注意,在连接之前,不需要每次都加载驱动程序。在应用程序启动期间只需一次就足够了。
如果你得到一个 `SQLException: Connection refused` 或者 `Connection timed out` 或者mysql特定的 `CommunicationsException: Communications link failure` ,则表示数据库根本无法访问。这可能有以下一个或多个原因:
jdbc url中的ip地址或主机名错误。
本地dns服务器无法识别jdbc url中的主机名。
jdbc url中缺少端口号或端口号错误。
数据库服务器已关闭。
数据库服务器不接受tcp/ip连接。
数据库服务器的连接已用完。
java和db之间的某些东西正在阻塞连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
验证和测试 `ping` .
刷新dns或改用jdbc url中的ip地址。
验证基于 `my.cnf` mysql数据库。
启动数据库。
验证mysqld是否在没有 `--skip-networking option` .
重新启动db并相应地修复代码,以关闭数据库中的连接 `finally` .
禁用防火墙和/或配置防火墙/代理以允许/转发端口。
请注意,关闭 `Connection` 非常重要。如果不关闭连接并在短时间内获得大量连接,则数据库可能会耗尽连接,应用程序可能会中断。始终获得 `Connection` 在一个 `try-with-resources` 声明。或者如果您还没有使用Java7,请显式地关闭它 `finally` 的 `try-finally` 阻止。接近 `finally` 只是为了确保在出现异常时也能关闭它。这也适用于 `Statement` ,  `PreparedStatement` 以及 `ResultSet` .
就连接性而言就是这样。您可以在这里找到一个更高级的教程,该教程介绍如何在基本dao类的帮助下在数据库中加载和存储完整的java模型对象。
对db连接使用单例模式是一种不好的方法。除其他问题外,请参见:http://stackoverflow.com/q/9428573/. 这是一个首发失误。
ou6hu8tu

ou6hu8tu3#

mysql jdbc与usessl的连接。

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);
}
nbewdwxp

nbewdwxp4#

Connection 我用了一段时间前,它看起来像是最简单的方法,但也有建议,使那里 if 声明-没错

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

或者类似的:)
可能有一些情况,而 getConnection 可以返回 null :)

gorkyyrv

gorkyyrv5#

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();
wwtsj6pe

wwtsj6pe6#

初始化数据库常量

创建常量属性数据库用户名、密码、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();
}

这是所有:)如果有任何改进编辑它!希望这有帮助。

af7jpaap

af7jpaap7#

在类路径中需要有mysql连接器jar。
在javajdbcapi中,一切都是通过数据库实现的。使用jdbc我们可以编写java应用程序
1向db(任何关系数据库)发送查询或更新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");
}
cqoc49vn

cqoc49vn8#

您可以在这里看到从java应用程序连接mysql数据库的所有步骤。对于其他数据库,只需在第一步中更改驱动程序即可。请确保您提供正确的数据库路径和正确的用户名和密码。
访问http://apekshit.com/t/51/steps-to-connect-database-using-java

j2datikz

j2datikz9#

短代码

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;
    }
}
ljsrvy3e

ljsrvy3e10#

怎样
设置驱动程序以运行快速示例

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:设置classpath变量。

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

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

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

注:class.forname(“com.mysql.jdbc.driver”);现在不赞成这样做。
希望这能帮到别人!

tp5buhyn

tp5buhyn11#

简短而甜蜜的代码。

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();
}
qc6wkl3g

qc6wkl3g12#

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");
5w9g7ksd

5w9g7ksd13#

下载jdbc驱动程序
下载链接(选择独立于平台):https://dev.mysql.com/downloads/connector/j/
将jdbc驱动程序移到c驱动器
解压缩文件并移动到c:\驱动器。你的驱动程序路径应该是 C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19 运行java

java -cp "C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19.jar" testMySQL.java

testmysql.java文件

import java.sql.*;
import java.io.*;

public class testMySQL {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        try
        {  
            Class.forName("com.mysql.cj.jdbc.Driver");  
            Connection con=DriverManager.getConnection(  
                "jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");  
            Statement stmt=con.createStatement();  
            ResultSet rs=stmt.executeQuery("show databases;");  
            System.out.println("Connected");  
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }  

}

lfapxunr

lfapxunr14#

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);

相关问题