我必须将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");
}
}
更多是关于交易。您必须检查一下mariadb默认情况下是否自动提交,如果您的连接处于手动提交模式并且不提交事务,那么您的数据将消失。您可能实际上想向DBmanager
添加事务处理功能。
我看到的不关闭连接的问题可能是,当您有许多连接时,您正在阻塞资源。但是,经理类不应该大量出现。
但是为什么当您不再需要它们时(不再需要经理时,为什么不以有序的方式关闭它们呢?关于这个问题,有一个elaborate post,尽管答案在关闭内容上有点道义。
阅读有关Java尝试使用资源。我认为该链接可能对您的问题有用。JDBC with try with resources