首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象不同数据库的数据类型异构性

抽象不同数据库的数据类型异构性
EN

Stack Overflow用户
提问于 2012-10-12 01:24:11
回答 1查看 94关注 0票数 0

在我当前的项目中,我需要抽象不同数据库之间的数据类型异构性。

例如,我在MySQL数据库中有一个表。表名为FIRSTTABLE(badgeID *Integer* , pref INT)

我在Apache-Derby数据库中有一个表。表名为FIRSTTABLE (badgeID *varchar(12)*, pref INT)

现在,同时查询MySQL数据库和Apache Derby数据库的查询组件的badgeID为"double“。

我的要求是查询组件不应该知道底层数据库( MySQL或Apache Derby)。其查询应该独立于数据库类型。

我该如何解决这个问题?我的研究问题并不局限于MySQL或Apach-Derby。为了清楚起见,我以Apache-Derby和MySQL为例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-12 03:35:28

您必须编写一个适配器。适配器可以是一个Java类,也可以是多个Java类。

根据您的示例,它应该是这样的。

代码语言:javascript
复制
public class DatabaseAdapter {

    private DatabaseType type;

    public DatabaseAdapter(DatabaseType type) {
        this.type = type;
    }

    public ResultSet selectFirstTable(double badgeID) {
        if (type == DatabaseType.Derby) {
            String s = Double.toString(badgeID);
            return derbySelectFirstTable(s);
        } else if (type == DatabaseType.MySQL) {
            int i = (int) badgeID;
            return mysqlSelectFirstTable(i);
        } else {
            return null;
        }
    }

}

public enum DatabaseType {
    MySQL, Derby
}

另一种更好的编码方式是使用接口。同样,使用您的示例,代码将如下所示。

代码语言:javascript
复制
public interface Database {
    public ResultSet selectFirstTable(double badgeID);
}

public class MySQLDatabase implements Database {

    public ResultSet selectFirstTable(double badgeID) {
         int i = (int) badgeID;
         // code to select first table in MySQL
    }

}

public class DerbyDatabase implements Database {

    public ResultSet selectFirstTable(double badgeID) {
        String s = Double.toString(badgeID);
        // code to select first table in Derby
    }

}

在代码中的某处,您可以使用正确的数据库类型初始化Database接口。

代码语言:javascript
复制
Database database = null;
if (type == DatabaseType.MySQL) {
    database = new MySQLDatabase();
} else if (type == DatabaseType.Derby) {
    database = new DerbyDatabase();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12845128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档