我创建了这个返回连接对象的类。我使用过MySQL数据库。
public class Connect_db {
public Connection getConnection(String db_name,String user_name,String password)
{
Connection con=null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/"+db_name+"?user="+user_name+"&password="+password);
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}
}
现在我要做的就是实例化一次这个类并获取连接对象。 我想在整个应用程序中使用同一个对象。 另一个解决方案也将受到赞赏。
答案 0 :(得分:9)
我想你需要单身模式,这里有一个简单的例子:
public class Connect_db {
static Connection con=null;
public static Connection getConnection()
{
if (con != null) return con;
// get db, user, pass from settings file
return getConnection(db, user, pass);
}
private static Connection getConnection(String db_name,String user_name,String password)
{
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/"+db_name+"?user="+user_name+"&password="+password);
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}
}
然后你就可以使用这样的连接:
Connect_db.getConnection().somemethods();
但是,你应该想一想 - 当多个线程试图向数据库发出请求时,这在多线程环境中是如何工作的。
答案 1 :(得分:1)
非常原始的方式,您可以通过
获取Connection实例Connect_db.getConnection(DBNAME,用户名,passwd中);
在任何类中,因为它是静态方法。
public class Connect_db {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("MySQL db driver isnot on classpath");
}
}
public static Connection getConnection(String db_name,String user_name,String password) throws SQLException
{
return DriverManager.getConnection("jdbc:mysql://localhost/"+db_name+"?user="+user_name+"&password="+password);
}
}
如果您的应用程序是多线程的,并且应该很好地使用池
答案 2 :(得分:1)
我真的很喜欢Lashane的回复,我用代码创建了DataSource
解决方案。我还将其重新设计为仅存储DataSource
而不是Connection
,以防您想要打开多个。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class SignalDB {
private static MysqlDataSource ds = null;
public static MysqlDataSource getDataSource(String db_name) {
if (ds == null) {
// db variables set here
getDataSource(db_url, db_user, db_password, db_port);
}
ds.setDatabaseName(db_name);
return ds;
}
private static void getDataSource(String db_url, String db_user, String db_password, int db_port) {
try {
ds = new MysqlDataSource();
ds.setServerName(db_url);
ds.setUser(db_user);
ds.setPassword(db_password);
ds.setPort(db_port);
} catch (Exception e) {
System.out.println("MysqlDataSource err: " + e.getMessage());
e.printStackTrace();
}
}
}
然后你可以使用:
创建连接 con = SignalDB.getDataSource("database_name").getConnection();
我每次都添加了连接到不同数据库的能力,在某些情况下,就像我们一样,它是你需要做的动态。
希望这有帮助。