带有数据库存储的 Java

Posted

技术标签:

【中文标题】带有数据库存储的 Java【英文标题】:Java with database storage 【发布时间】:2010-12-06 07:47:42 【问题描述】:

我必须编写一个可以接受预订、存储它们并在以后访问它们的程序,该应用程序必须用 Java 编写。正因为如此,我一直在研究使用 Java 使用数据库的各种方法。

我一直在研究将 JDBC 与 mysql 驱动程序数据库一起使用,同时也在研究 javaDB。你会建议我做什么来创建这个程序,有没有人有编写使用 Java 中的数据库的程序的经验,可以给我任何提示?

谢谢!

【问题讨论】:

【参考方案1】:

我确信每个 Java 开发人员都编写了一个使用 JDBC 与数据库通信的应用程序。许多人很快就停止使用原始 JDBC,要么使用 Spring JDBC 包装器,要么使用完整的 ORM,如 Hibernate。所有这些都将使编写数据库层变得更容易一些,但我通常认为您应该在深入了解它们之前对底层发生的事情有一个合理的了解。

那么是进程内还是专用数据库问题?这取决于。有多少人将同时访问该应用程序? (如果您需要多人访问同一个数据库,则进程内数据库将毫无用处)。你对环境有多少控制权? (如果您无法安装它,建议使用专用数据库是浪费时间)。应用程序是基于 Web 的还是桌面应用程序? (基于 Web 的解决方案可以使用进程内数据库并允许多个用户访问它)。数据有多重要? (进程内数据库不太可能拥有与专用数据库相同级别的备份解决方案)。

【讨论】:

感谢您的回复。由于这只是一个小测试应用程序,只有一个人需要在任何给定时间访问该程序,另外,我希望这个数据库是可移植的,我不想为了使用该程序而必须在每台机器上安装 mySQL。有任何想法吗?谢谢。 阅读我上面的回复,认为这是正确的方法。阅读括号中的 cmets。【参考方案2】:

在您的情况下,我会使用 Java6 和 Java DB(又名 Derby)。并不是说安装和使用 MySQL 很复杂(实际上它很简单),但是,如果您已经拥有一个功能强大的数据库,为什么还要这样做呢?

话虽如此,要开始使用 JavaDB,请查看Java DB Reference,那里有很多技术文章。特别关注Working with the Java DB (Derby) Database - NetBeans IDE 6.5 Tutorial。

对于数据访问本身,您可以使用 Creating a Custom Java Desktop Database Application 中的 Java Persistence API (JPA)。但我不会为家庭作业那样做。相反,我会从基础开始,即使用 JDBC,然后手动完成所有工作。你提到了它,我认为这是个好主意。看看Tutorial: Java databasing with Derby, Java's own open source database,它可能非常有用(我并不是说那里显示的代码推广了所有最佳实践,但它非常简单,可以帮助您入门)。

不要用连接池等高级主题污染你的思想,不要使用 Hibernate、JPA 甚至 Spring 等框架(这些框架知道如何做事,你不知道,重点是不要学习使用框架,至少现在不是)。保持简单和性感,但要手工完成。

【讨论】:

KISS 哲学——“保持简单和性感”,我喜欢它 :-)【参考方案3】:

Sun 有两个在线 JDBC 教程,您可能会觉得它们很有用,JDBC Introduction 和 JDBC Basics。这些是Java Tutorials 更大系列的一部分,其中包含很多重要信息。当我遇到我不知道如何用 Java 做的事情时,它们通常是我首先看到的地方。

【讨论】:

请注意,几个月前,教程的 JDBC 部分充满了错误。这是我的一些困惑:***.com/questions/1336885/… @FarmBoy:谢谢。很难想象DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource() 是如何演变的。【参考方案4】:

一个非常简单的方法是使用 Spring 的 JDBC 类,它提供了许多比原始 JDBC 更方便的方法,并自动管理资源的释放。 Spring 还提供了丰富的异常层次结构,允许根据特定错误采取特定操作(例如重试数据库死锁)。

此外,与许多其他持久层不同,Spring 不会隐藏 JDBC 实现(它充当一个薄层),允许您在必要时使用原始 JDBC。

初始化

// First create a DataSource corresponding to a single connection.
// Your production application could potentially use a connection pool.
// true == suppress close of underlying connection when close() is called.
DataSource ds = new SingleConnectionDataSource("com.MyDriver", "Database URL", "user", "password", true);

// Now create a SimpleJdbcTemplate passing in the DataSource.  This provides many
// useful utility methods.
SimpleJdbcTemplate tmpl = new SimpleJdbcTemplate(ds);

SQL 更新(或插入)

// Simple example of SQL update.  The resources are automatically release if an exception
// occurs.  SQLExceptions are translated into Spring's rich DataAccessException exception
// hierarchy, allowing different actions to be performed based on the specific type of
// error.
int nRows = tmpl.update("update Foo set Name = ? where Id = ?", "Hello", 5);
assert nRows == 1;

SQL 查询

// Example of SQL query using ParameterizedRowMapper to translate each row of the
// ResultSet into a Person object.
tmpl.query("select * from Person", new ParameterizedRowMapper<Person>() 
  Person mapRow(ResultSet rs, int rowNum) 
    return new Person(rs.getString("FirstName"), rs.getString("LastName"));
  
);

【讨论】:

【参考方案5】:

查看以下示例:http://www.roseindia.net/jdbc/jdbc-mysql/。大量关于在 MySQL 中使用 JDBC 的代码示例。

【讨论】:

【参考方案6】:

我当然可以推荐 JavaDb(Java 6 附带的数据库)。它是 IBM 的原始 Derby 数据库,功能非常强大。它与 Java 程序(作为独立进程运行,或在与客户端程序相同的 VM 中运行)很好地集成。您不必担心额外的 non_Java 安装(这可能很重要,具体取决于您部署的方式/位置)。

如果您想要/需要 ORM(对象关系映射),Hibernate 是当今事实上的 Java 标准 (here's an introduction)。但是,如果这对您的项目来说太过分了,请至少查看 Apache Commons DbUtils,这将减少您的大量样板代码。

【讨论】:

以上是关于带有数据库存储的 Java的主要内容,如果未能解决你的问题,请参考以下文章

Java数据库连接--JDBC调用存储过程,事务管理和高级应用

java程序中调用java存储过程

如何浏览本地 Java App Engine 数据存储?

Java学习总结(十七)——MySQL数据库存储过程,触发器,数据库权限,数据库设计三大范式

如何从 Java 调用 MSSQL 加密的存储过程?

优化数据库有啥更好的方法:使用带有不同过滤器的一堆存储过程,还是使用带有 if 条件的单个存储过程?