如何更改我的Java程序以使用数据库而不是arraylist?

时间:2011-01-20 19:29:42

标签: java mysql arraylist

在我的java程序中,我有一个书类和一个库类。 该库将图书对象存储在一个数组列表中,然后我将其显示在屏幕上。

我可以添加书籍并使用功能删除书籍。

我还使用AbstractJtableModel添加和删除书籍。

但现在我想使用数据库MySQL,而不是数组列表。

我应该如何更改程序?

5 个答案:

答案 0 :(得分:2)

好吧,你需要编写整个应用程序:) 你需要创建一个至少有一个表的数据库,你需要将mysql jdbc库添加到类路径中,并使用jdbc从数据库中获取insert/select/update/delete数据。

或者,您需要添加jdbc并使用像Hibernate这样的ORM框架,但是根据您的Java知识,这种方式可能更难(但如果您创建大型应用程序,将来更容易维护)。 Here你可以下载简单的hibernate应用程序,它用Honey实现CRUD操作:),你可以从TestExample类中提取类似于Javid Jamae建议的界面,并根据你的需要用Book交换Honey类

答案 1 :(得分:1)

摘要将书籍检索和存储到一个类中 - 您不希望持久性逻辑与您的业务逻辑混合在一起。我建议创建一个名为“BookStorageDAO”的接口,然后你可以拥有该接口的各种实现。一种实现可以是将书籍存储在ArrayList中,而另一种实现可以是将书籍存储在数据库中。

通过这种方式,您可以在业务逻辑中使用该接口,并随时交换实现。

答案 2 :(得分:1)

您可以考虑使用数据访问对象(DAO)模式。只需进行Google搜索,您就会找到大量有关该主题的文章。基本上,您将使用以下方法创建LibraryDao接口:

public interface LibraryDao {
    public void storeLibrary(Library library)
    public Library loadLibrary(long id)
    public List<Library> searchByTitle(String title)
    //...
}

您可以使用直接SQL实现此接口,也可以使用对象关系映射(ORM)工具来实现它。我强烈建议您阅读Hibernate和JPA规范。

答案 3 :(得分:0)

您仍然可以使用GUI中的ArrayList来持久化并显示数据。不同之处在于您需要逻辑来保存和加载数据库中的ArrayList,以便即使在程序结束后也可以存储数据。

旁注,扩展DefaultTableModel而不是AbstractJtabelModel。它为您完成了一些方法。

答案 4 :(得分:0)

您本身不需要DAO,但这些答案没有错。

分离关注

您需要做的是根据关注点分离您的应用程序,这是一种名为separation of concern的模式。关注问题是一个漏洞,因此为了解决这个问题,您可以根据需要将应用程序分成多个层或一个堆栈。典型的堆栈可能包括:

Data Access Layer (read/write data)
Service Layer (isolated business logic)
Controller (Link between view and model)
Presentation (UI)
等等,但这只能部分解决你的问题。

编程到界面

您也(正如其他人提到的那样)需要抽象您的代码,这样您就可以使用dependency injection。这非常容易实现。您所要做的就是program to the interface

public interface PersonService {
   public List<Person> getAllPersons();
   public Person getById(String uuid);
}

所以你的应用程序看起来像这样:

public class PersonApp {
    private final PersonService personService;
    public PersonApp(PersonService personService) {
        this.personService = personService;
    }
}

为什么这样更好?

您已在界面中定义了与Person模型进行交互的合同,并且您的应用程序遵守此合同,而不会接触实施细节。这意味着您可以使用Hibernate实现PersonService,然后决定要使用JPA,或者您可以使用直接JDBC,Spring等等,即使您必须重构实现代码,您的应用程序代码仍然存在相同。您所要做的就是将新实现放在类路径上并找到它(提示:Service Locator pattern可以很好地工作)。