首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.h将SQLite文件存储在SQLJet中

使用.h将SQLite文件存储在SQLJet中
EN

Code Review用户
提问于 2012-08-01 07:48:48
回答 4查看 454关注 0票数 7

我正试图通过阅读大量的例子、文档和询问来尽可能多地自己学习。我希望改进我的风格,以编写高效的代码并遵守Java标准。

在这个代码的小示例中,我想从以下几方面获得反馈:

  • 异常抛出
  • 打开/关闭数据库连接
  • 任何其他一般风格的评论

有两个类,数据库和主。

我的数据库类:

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

    private String dbName = "";
    private SqlJetDb db = null;

    public Database(String dbName) {
        this.dbName = dbName;
    }

    public void CreateDatabase() throws SqlJetException {...}

    public void OpenDatabaseConnection() throws SqlJetException {...}

    public void CloseDatabaseConnection() throws SqlJetException {...}

    private void InsertRecord(String file) throws SqlJetException {...}

    public void GetDirectoryContent(String dir) {
        File directory = new File(dir);
        if (directory.isDirectory()) {
            String[] content = directory.list();
            for (String s : content) {
                GetDirectoryContent(dir + "\\" + s);
            }
        } else {
            String file = directory.toString();
            String extension = file.substring(file.lastIndexOf("."));
            if (extension.equals(".h")) {
                try {
                    InsertRecord(file);
                } catch (SqlJetException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

主要呼叫:

代码语言:javascript
复制
Database db = new Database("test.db");
    try {
        db.CreateDatabase();
        db.OpenDatabaseConnection();
        db.GetDirectoryContent("C:\\test");         
    } catch (SqlJetException e) {
        e.printStackTrace();
    } finally {
        try {
            db.CloseDatabaseConnection();
        } catch (SqlJetException e) {
            e.printStackTrace();
        }           
    }
}
EN

回答 4

Code Review用户

回答已采纳

发布于 2012-08-01 12:23:07

就我个人而言

  • 总是记录而不是使用e.printStackTrace。如果需要,可以登录到控制台。通过日志记录,您可以轻松地将其更改为文件日志记录,并包含您自己的注释。
  • 使用File.seperator代替。这提供了一种独立于系统的分离文件路径的方法。
  • 考虑让dbName成为最终结果。您不需要先初始化它,然后在ctor中初始化它。就在电筒里做吧。像dbName这样的东西不应该是可变的。
票数 6
EN

Code Review用户

发布于 2012-08-01 08:02:23

考虑以下几点:

代码语言:javascript
复制
public Database(String dbName) {
    this.dbName = dbName;
}
  1. 我将检查是否传入空dbName。请注意,您传递这个引用,然后简单地存储它。因此,如果它为null,则直到稍后(可能,很晚)才会发现。然后,您必须计算出设置为null的时间点。
  2. 你会换dbName吗?如果不是,就让它成为final。它会阻止你以后不经意地改变它。不变性往往是个好主意。它使类更健壮,线程安全更容易实现。也许这里不是要求,但谁知道呢?更容易的是放宽限制,而不是事后应用它。
票数 6
EN

Code Review用户

发布于 2012-08-01 14:43:40

来自有效Java

乍一看:

你可以把你的期末考试

代码语言:javascript
复制
public final class Database {

还有一些字符串,比如:

代码语言:javascript
复制
final String file = directory.toString();
final String extension = file.substring(file.lastIndexOf("."));

删除字段初始化:

代码语言:javascript
复制
private String dbName;
private SqlJetDb db;

然后在public void GetDirectoryContent中使用Files和来自新的nio.2 java 7包Paths

保重:

代码语言:javascript
复制
finally { // many possible problems

再读一遍约书亚·布洛赫的好代码,好好享受吧。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/14203

复制
相关文章

相似问题

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