我们可以在Java中创建连接对象而无需实际建立连接

时间:2017-08-22 12:11:34

标签: java jdbc connection-string mssql-jdbc

我了解Connection是一个界面,使用DriverManager获取连接的所有基本方法是什么?但它做了什么,它创建并打开一个连接并返回它。那么,有没有办法在Java中创建一个Connection或任何类似的对象,它可以从连接String中提供元数据,dbName等属性?

2 个答案:

答案 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;

更好的方法是将连接细节与代码分开存储 - 例如。在程序启动时读取的属性文件中 - 虽然这需要对现有代码稍作更改。