Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java连接到MySQL数据库_Java_Mysql_Jdbc - Fatal编程技术网

将Java连接到MySQL数据库

将Java连接到MySQL数据库,java,mysql,jdbc,Java,Mysql,Jdbc,如何连接到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中的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)


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

添加异常处理、配置等功能。

DriverManager
是一种相当古老的方法。更好的方法是获取
数据源
,或者通过查找已为您配置的app server容器:

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

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

  • 并安装MySQL服务器。照常做就行了。无论何时更改端口号,都要记住它。它默认为3306

  • JDBC驱动程序并放入类路径,提取ZIP文件并将包含的JAR文件放入类路径。特定于供应商的JDBC驱动程序是()的具体实现

    如果您使用的是像Eclipse或Netbeans这样的IDE,那么您可以通过将JAR文件作为库添加到项目属性中的构建路径来将其添加到类路径中

    如果您是在命令控制台中“普通”执行,那么在执行Java应用程序时,需要在
    -cp
    -classpath
    参数中指定JAR文件的路径

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass
  • 用于Java和it访问。仅仅因为使用
    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
  • 到MySQL,使用Java。使用
    main()
    方法创建一个简单的Java类来测试连接

    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合适的驱动程序
    ,则表示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()
    调用在这里是不需要的。这只是为了修复旧的bug
    org.gjt.mm.mysql.Driver
    。如果这一行抛出
    ClassNotFoundException
    ,那么包含JDBC驱动程序类的JAR文件就不会放在类路径中

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

    如果您得到一个
    SQLException:Connection-densed
    连接超时
    或一个特定于MySQL的
    通信异常:
    通信链路故障
    ,则表示数据库根本无法访问。这可能有以下一个或多个原因:

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

  • 要解决其中一个问题,请遵循以下建议:

  • ping
    验证并测试它们
  • 刷新DNS或改用JDBC URL中的IP地址
  • 根据MySQL数据库的
    my.cnf
    进行验证
  • 启动数据库
  • 验证mysqld是否在没有
    --跳过网络选项的情况下启动
  • 重新启动数据库并相应地修复代码,使其在
    中最终关闭连接
  • 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

  • 请注意,关闭
    连接
    非常重要。如果不关闭连接并在短时间内保持大量连接,则数据库可能会耗尽连接,应用程序可能会中断。始终以一种方式获取
    连接
    。或者,如果您还没有使用Java 7,请在
    try finally
    块的
    finally
    中显式关闭它。最后关闭
    只是为了确保在出现异常时也关闭它。这也适用于
    语句
    PreparedStatement
    ResultSet

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



    对DB连接使用单例模式是一种糟糕的方法。除其他问题外,请参见:。这是一个1开头的错误。

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


    访问

    您的类路径中需要有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");
    }
    

    连接
    我不久前使用过,它看起来是最简单的方法,但也有人建议我在那里做
    如果
    声明-完全正确

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

    可能有一些情况,而
    getConnection
    可以返回
    null
    :)

    初始化数据库常量 创造 jdbc:mysql://localhost:3306/javabase
    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);
    }
    
    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);
    }
    
    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");
    }
    
    Connection con = DriverManager.getConnection(
                         "jdbc:myDriver:DatabaseName",
                         dBuserName,
                         dBuserPassword);
    if (con != null){
     //..handle your code there 
    }
    
    // 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;
    
    // 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();
            }
        }
    }
    
    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();
    }
    
    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");  
    
    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);
    }
    
    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;
        }
    }
    
    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
    
    export CLASSPATH=".:mysql-connector-java-VERSION.jar"
    java MyClassFile
    
    java -cp .:mysql-connector-java-VERSION.jar MyClassFile
    
    java -cp "C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19.jar" 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);
            }
    
        }  
    
    }