【问题标题】:Pattern for database-wrapper in javajava中数据库包装器的模式
【发布时间】:2010-05-03 13:22:53
【问题描述】:

我目前正在编写一个包装 SQLite 数据库的 java 类。该类有两种实例化方式:

  1. 打开现有数据库。
  2. 创建一个新数据库。

这是我想出的:

public class SQLiteDatabaseWrapper {
    public static SQLiteDatabaseWrapper openExisting(File PathToDB) {
        return new SQLiteDatabaseWrapper(PathToDB);
    }

    public static SQLiteDatabaseWrapper createNew(File PathToDB) {
        CreateAndInitializeNewDatabase(PathToDB);
        return new SQLiteDatabaseWrapper(PathToDB);
    }

    private SQLiteDatabaseWrapper(File PathToDB) {
        // Open connection and setup wrapper    
    }
}

这是在 Java 中采用的方式,还是有其他针对这种情况的最佳实践?

【问题讨论】:

    标签: java constructor private


    【解决方案1】:

    首先:java 方法应该以小写字母开头。它不是由编译器或语言规范强制执行的,但它是每个人都遵循的约定,如果你不遵循它,你会在工具、IDE 以及最重要的其他程序员方面遇到麻烦。

    【讨论】:

    • 感谢提示,已解决。
    • +1 因为你是对的 -1 因为它不是问题的答案,应该是评论:P
    • 对,应该是评论 Space Cowboy:局部变量也是如此!
    【解决方案2】:

    你可以的

    public SQLiteDatabaseWrapper(File pathToDB, boolean createNew)
            throws IOException {
    
        if (!pathToDB.exists()) {
            if (createNew) {
                // Create new database, potentially throws exception
            } else {
                throw new FileNotFoundException();
            }
        }
    
        // Open connection and setup wrapper
    }
    
    public SQLiteDatabaseWrapper(File pathToDB) throws IOException {
        this(pathToDB, false);
    }
    

    避免依赖静态方法来创建数据库包装器的实例。

    【讨论】:

    • 我通常不喜欢boolean这种类型的参数。我更喜欢为每种可能的情况使用两种单独的方法。这读起来更好。
    • 那么您已经回答了自己的问题。您的静态方法是唯一合理的方法,可以使用两个单独的方法从相同类型的参数构造对象(在这种情况下为File)。
    【解决方案3】:

    Java 已经拥有用于数据库抽象的标准接口,称为 JDBC。最佳实践是使用现有的标准接口。这是一个很好的JDBC tutorial。您应该获得一个 SQLite JDBC 驱动程序并使用它。 SQLite.org 有一个 comprehensive list of database drivers including JDBC drivers。另外,这里是tutorial on connecting to a SQLite database using JDBC

    【讨论】:

    • 这个类确实使用了 JDBC 驱动程序。它的主要目的是为向数据库写入数据提供方便的功能。
    • 你需要在 JDBC 中没有的接口中添加什么?
    • 认识到,通过在构造函数中添加一个接受File 对象的类,您已将自己限制为仅使用基于本地系统上文件的数据库。大多数数据库不是。如果您的应用程序超出 SQLite,为什么不坚持使用纯 JDBC,这将有助于迁移到另一个 RDBMS?
    • 添加内容:从对象到数据库表的映射非常重要。这个类处理。为什么要专门为 SQLite 编写代码?因为在很多情况下它的行为与其他 DBMS 不同。
    • 你看过像 Hibernate 这样的 ORM 工具吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    相关资源
    最近更新 更多