以下是我的代码。
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* @author Yohan
*/
public abstract class DBMaster
{
public static Connection con;
/**
*
* Initializes the connection
*/
public void createConnection()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
try
{
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","");
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}
}
public void closeConnection()
{
}
/**
*
* check if the connection is successful or not
*/
public void checkConnection()
{
ResultSet resultset=null;
String cmd="select * from user";
try
{
Statement statement=con.createStatement();
resultset=statement.executeQuery(cmd);
}
catch(SQLException ex)
{
if(ex.getLocalizedMessage().equals("No operations allowed after connection closed."))
{
createConnection();
System.out.println("System Loaded");
}
}
catch(NullPointerException ne)
{
createConnection();
System.out.println("System Loaded");
}
}
}
如您所见,这是一个超类,子类将在其中扩展。扩展后,子类将使用static
变量con
。子类将包含数据库代码。
我在Web应用程序中实现了这个类,其中使用了JSP和Sevlet。现在我的问题是,可以在Web应用程序中“共享”JDBC连接吗?这里的Connection
是static
,那么“connection1”会与“connection2”混淆并做一些讨厌的工作吗?
例如,在此Web应用程序中,“connection1”正在删除记录,而“connection2”正在更新记录。 “connection1”属于“web应用程序用户1”,“connection2”属于“web应用程序用户2”。连接1可以与连接2混合并执行“更新”,而不是删除记录吗?
据我所知,这段代码允许非常快速的数据库访问,目前没有问题(只测试一个Web应用程序用户),但我愿意了解更多。