我必须在我的大学项目中使用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="[email protected]";//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");     } } 

===============>>#1 票数:1

对于正在研究的项目,可以将您的数据库管理器与客户端代码建立连接,然后使用try-with-resources构造自动将其关闭。

也许您会发现可以检查Connection Pool工具并将其进一步应用到您的项目中或用作示例(例如HikariCP ,这是一个很好的介绍 )。

  ask by JunYoung Yoon translate from so

===============>>#2 票数:0

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

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

但是,为什么当您不再需要它们时(当您不再需要管理器时)以有序的方式关闭它们呢? 关于这一点,有一篇详尽的文章 ,尽管答案是关于关闭内容有点道义主义。

  ask by JunYoung Yoon translate from so

===============>>#3 票数:0

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

  ask by JunYoung Yoon translate from so

本文未有回复,本站智能推荐: