我了解Connection
是一个界面,使用DriverManager
获取连接的所有基本方法是什么?但它做了什么,它创建并打开一个连接并返回它。那么,有没有办法在Java中创建一个Connection或任何类似的对象,它可以从连接String中提供元数据,dbName等属性?
答案 0 :(得分:-1)
Connection
(会话)是没用的。除了您已经知道您是否尚未建立连接之外,您无法获得任何额外信息。因此,要建立连接,您必须了解所有连接属性,获取您已经知道的数据没有任何意义。如果您需要获取会话元数据,除了首先建立会话之外没有其他方式。
在您的情况下,您可以从连接字符串中解析出所需的属性。由于每个数据库供应商都可以接受他们自己的格式,因此您应该参考to MSSQL documentation来确定为您提供所需参数的规则。
例如,根据MS docs,我们有以下exameple:
jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;
这是解析dabase名称的正则表达式:
databaseName=(.+?);
以下是Java中的示例
public static void main(String[] args) {
String connString = "jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;";
Pattern regexp = Pattern.compile("databaseName=(.+?);");
Matcher dbName = regexp.matcher(connString);
if(dbName.find()){
System.out.println("Your dbName: " + dbName.group(1));
}else{
System.err.println("dbName is not specified in the URL");
}
}
答案 1 :(得分:-1)
不,没有连接就不可能获得Connection
(除非你自己创建了界面)。
听起来您的数据库名称在现有代码中的某处是硬编码的。如果是这样,也许你可以将它提取到一个常量,也可以被你的新代码引用。然后,您将直接将数据库名称作为String
,而不是通过Connection
对象间接进行。如果数据库名称嵌入在连接URL中,则可能必须将其分离并构造URL。 E.g。
public static final String DATABASE_NAME = "MyDatabase";
private static final String CONNECTION_URL = "jdbc:sqlserver://localhost;databaseName=" + DATABASE_NAME;
更好的方法是将连接细节与代码分开存储 - 例如。在程序启动时读取的属性文件中 - 虽然这需要对现有代码稍作更改。