MariaDB是否自动断开连接,还是我必须手动断开连接?

问题描述 投票:0回答:2

我必须将MariaDB用于我的大学项目。这是我第一次这样做,所以我不太了解如何使用和编码JDBC Driver和mariaDB。现在,在查看示例的同时,我正在许多地方实现代码。如我所见,所有示例似乎都使用“ DriverManager.getConnection”

创建Statement并建立连接

现在我有一个问题。我将创建一个DBmanager类,该类可以连接,创建表,执行查询以及执行可在一行中更新表上数据的代码。

我以为所有示例都可以在一种方法中单独运行,并且来自不同的地方,所以我只能尝试建立新的连接并创建无法关闭的代码。但是我有一种直觉,认为这将是一个问题。

有什么方法可以让一个连接保持连接状态,以发送命令并将其断开与DB.disconnect()的连接?如果您能告诉我我的想法是对还是错,我将不胜感激。

下面的代码是我到目前为止编写的代码。

  • [如果您觉得我的英语难以阅读或理解,很抱歉。我正在使用翻译器,因此,我的英语无法按预期显示。
import java.sql.*;
import java.util.Properties;
public class DBManager {
    /*********INNITIAL DEFINES********/
    final static private String HOST="sumewhere.azure.com";//Azure DB URL
    final static private String USER="id@somewhere";//root ID
    final static private String PW="*****";//Server Password
    final static private String DRIVER="org.mariadb.jdbc.Driver";//DB Driver info

    private String database="user";


    /***************API***************/

    void setDB(String databaseinfo){
        database=databaseinfo;
    }

    private void checkDriver() throws Exception
    {
        try
        {
            Class.forName("org.mariadb.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MariaDB JDBC driver NOT detected in library path.", e);
        }
        System.out.println("MariaDB JDBC driver detected in library path.");
    }

    public void checkOnline(String databaseinfo) throws Exception
    {
        setDB(databaseinfo);
        this.checkDriver();
        Connection connection = null;
        try
        {
            String url = String.format("jdbc:mariadb://%s/%s", HOST, database);

            // Set connection properties.
            Properties properties = new Properties();
            properties.setProperty("user", USER);
            properties.setProperty("password", PW);
            properties.setProperty("useSSL", "true");
            properties.setProperty("verifyServerCertificate", "true");
            properties.setProperty("requireSSL", "false");

            // get connection
            connection = DriverManager.getConnection(url, properties);
        }
        catch (SQLException e)
        {
            throw new SQLException("Failed to create connection to database.", e);
        }
        if (connection != null)
        {
            System.out.println("Successfully created connection to database.");
        }
        else {
            System.out.println("Failed to create connection to database.");
        }
        System.out.println("Execution finished.");
    }

    void makeCcnnection() throws ClassNotFoundException
    {
        // Check DB driver Exists
        try
        {
            Class.forName("org.mariadb.jdbc");
        }
        catch (ClassNotFoundException e)
        {
            throw new ClassNotFoundException("MariaDB JDBC driver NOT detected in library path.", e);
        }
        System.out.println("MariaDB JDBC driver detected in library path.");
        Connection connection = null;
    }

    public void updateTable(){}

    public static void main(String[] args) throws Exception {
        DBManager DB = new DBManager();
        DB.checkOnline("DB");
    }
}
java mysql jdbc mariadb
2个回答
0
投票

更多是关于交易。您必须检查一下mariadb默认情况下是否自动提交,如果您的连接处于手动提交模式并且不提交事务,那么您的数据将消失。您可能实际上想向DBmanager添加事务处理功能。

我看到的不关闭连接的问题可能是,当您有许多连接时,您正在阻塞资源。但是,经理类不应该大量出现。

但是为什么当您不再需要它们时(不再需要经理时,为什么不以有序的方式关闭它们呢?关于这个问题,有一个elaborate post,尽管答案在关闭内容上有点道义。


0
投票

阅读有关Java尝试使用资源。我认为该链接可能对您的问题有用。JDBC with try with resources

© www.soinside.com 2019 - 2024. All rights reserved.