【发布时间】:2020-04-03 01:13:28
【问题描述】:
我有一个项目需要连接到数据库。我正在从 config.xml 文件中读取数据库连接信息,但是,我被困在为特定 db 引擎定义 DataSource 的部分(从技术上讲,它是 dbms,但这些术语似乎可以互换使用)。下面是相关代码sn-p:
String engine = get(xmldoc, "engine");
if (engine == "postgres")
{
PGSimpleDataSource ds = new PGSimpleDataSource();
}
else if (engine == "mssql")
{
SQLServerDataSource ds = new SQLServerDataSource();
}
else if (engine == "sqlite")
{
SQLiteDataSource ds = new SQLiteDataSource();
}
else
{
throw new Exception(String.format("Unknown DBMS type %s", engine));
}
ds.setServerName(get(xmldoc, "hostname"));
ds.setDatabaseName(get(xmldoc, "databasename"));
ds.setUser(get(xmldoc, "username"));
当我尝试编译它时,每次对 ds 的引用都会得到一堆 error: cannot find symbol。经过一番挖掘,我发现这是因为我的 ds 变量是声明它的 if 语句的本地变量(参考:Cannot find symbol if statement error)。不过,与那个问题不同的是,我不能简单地在一开始就声明它,因为我不知道它将是什么特定的 DataSource。
那么,动态设置我的数据源的最佳方法是什么?最好不要将我所有的初始化代码都放在每个 if 语句中,因为那样我就必须把我所有的数据库调用也放在那里。是否有某种方法可以将ds 最初声明为通用数据源,然后将其转换为 if 语句中的特定数据源?
【问题讨论】:
标签: java database compiler-errors datasource