javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK6.0里面带的这个Derby的版本是 10.2.1.7,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上.值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 4.0规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行.
1、本身没有操作界面,可以用第三方工具来管理(也就是你说的操作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。
2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。
3、下面是个使用derby的简单例子:
首先导入JAR包:derby.jar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到.
然后就要创建数据库了:
private Connection getConnection() throws SQLException {
Connection connection = DriverManager
.getConnection("jdbc:derby:userDB;create=true;user=test;password=test");
connection.setAutoCommit(false);
return connection;
}
其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test;密码password=test连接数据库.
有了数据库,接下来该建表了:
private void createTable(Connection connection) throws SQLException {
Statement statement = connection.createStatement();
String sql = "create table USERS("
+ " ID BIGINT not null generated by default as identity,"
+ " USER_NAME VARCHAR(20) not null,"
+ " PASSWORD VARCHAR(20),"
+ " constraint P_KEY_1 primary key (ID))";
statement.execute(sql);
sql = "create unique index USER_NAME_INDEX on USERS ("
+ " USER_NAME ASC)";
statement.execute(sql);
statement.close();
}
创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,
GENERATED BY ALWAYS AS IDENTITY
GENERATED BY DEFAULT AS IDENTITY
By always和by default是说明生成这个IDENTITY的方式。
By always是完全由系统自动生成。
by default是可以由用户来指定一个值。
编写与USERS表对应的javabean(这个就不多说了),:
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private String userName;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
接下来就可以就数据库进行增删改查的操作了:
插入数据:
private void create(User user) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("insert into users (user_name,password) values(?,?)");
int index = 1;
statement.setString(index++, user.getUserName());
statement.setString(index++, user.getPassword());
statement.execute();
user.setId(this.getId(connection));
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
private Long getId(Connection connection) throws SQLException {
CallableStatement callableStatement = connection
.prepareCall("values identity_val_local()");
ResultSet resultSet = callableStatement.executeQuery();
resultSet.next();
Long id = resultSet.getLong(1);
resultSet.close();
callableStatement.close();
return id;
}
getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值.感觉还是有点想sequence的curr_val.
修改数据:
private void update(User user) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("update users set user_name=?,password=? where id=?");
int index = 1;
statement.setString(index++, user.getUserName());
statement.setString(index++, user.getPassword());
statement.setLong(index++, user.getId());
statement.execute();
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
删除数据:
public void delete(Long id) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("delete from users where id=?");
statement.setLong(1, id);
statement.execute();
connection.commit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
查询数据:
public User findById(Long id) {
Connection connection = null;
try {
connection = this.getConnection();
PreparedStatement statement = connection
.prepareStatement("select user_name,password from users where id=?");
statement.setLong(1, id);
ResultSet resultSet = statement.executeQuery();
User user = null;
if (resultSet.next()) {
user = new User();
user.setId(id);
user.setUserName(resultSet.getString("user_name"));
user.setPassword(resultSet.getString("password"));
}
resultSet.close();
statement.close();
connection.commit();
return user;
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
分享到:
相关推荐
在Java DB中,省市区编码表是一个用于存储中国省级、市级和区县级行政区域编码的数据结构,常用于地理信息系统、地址管理或者与地理位置相关的应用程序。这个表通常包含四个字段:`id`、`areaid`、`area` 和 `...
它通过消除几乎所有的JDBC代码及手动设置参数和获取结果集的操作,使得Java开发者可以专注于SQL本身。 - **特点**: - 支持自定义SQL:允许开发者根据需求编写SQL语句。 - 存储过程支持:可以直接调用数据库中的...
2. **透明性**:db40提供了透明的数据库访问,意味着开发者可以在不改变代码的情况下,像操作普通Java集合一样操作数据库对象。这得益于它的API设计,它允许直接打开、保存和检索对象,无需编写SQL语句。 3. **对象...
JavaDB、JSP和AJAX是Web开发中的关键技术,它们共同构建了动态、交互式的Web应用程序。本项目中,"JavaDB+JSP+AJAX实现的级联下拉菜单"是一个经典的应用场景,用于提升用户界面的用户体验,特别是在数据关联和筛选时...
**db4o-7.2-java** 是一个针对Java平台的开源对象数据库系统,它将传统的关系型数据库理念与面向对象编程相结合,为开发者提供了一种高效、灵活的数据存储解决方案。db4o允许开发者直接存取Java对象,而无需通过SQL...
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者将Java或.NET平台上的对象直接存储到数据库中,而无需进行SQL映射。在本文中,我们将深入探讨如何利用DB4o将一个对象保存到文件中,然后进行...
这份"MyBatis3_用户指南(附JavaDB实例)"文档是学习MyBatis3的基础资料,非常适合初学者深入理解和实践。 1. **MyBatis框架简介** MyBatis是一个优秀的轻量级持久层框架,它支持定制化SQL、存储过程以及高级映射。...
**MyBatis3用户指南(附JavaDB实例)** MyBatis3是一款强大的持久层框架,它简化了Java开发中的数据库操作,将SQL语句与Java代码紧密结合,提供了灵活的映射机制,使得数据访问更加高效。这篇由罗利辉翻译的用户指南...
标题中的“如何把DB数据包转换成CSV数据包”指的是将数据库(DB)中的数据导出并转换成逗号分隔值(CSV)格式的文件。这种操作在数据迁移、数据分析或与非关系型数据库交互时非常常见。下面将详细介绍这个过程。 1....
《Cognos Connect与DB2Java的连接技术详解》 在企业级数据分析和报表系统中,IBM Cognos Analytics(前身为Cognos 10.2.2)是一款广泛使用的商业智能工具,它能够有效地整合各类数据源,提供丰富的数据分析和可视化...
标题:db4o-5.0-tutorial-java帮助 描述:这份资料是关于db4o数据库的使用教程,特别针对Java开发人员。db4o是一款开源的对象数据库,支持Java、.NET以及Mono平台。该教程旨在帮助用户快速上手db4o,并在开发过程中...
本资源"db转java资源文件.rar"主要涉及到如何将数据库中的表结构转换为MyBatis所需的Mapper接口和Entity类,以便在Java应用中进行高效的数据操作。这里我们将详细讨论MyBatis、SQLServer以及如何利用工具如mybatis-...
标题中的“Access mdb 转 sqlite 数据库java代码”指的是使用Java编程语言将Microsoft Access(mdb)数据库转换为SQLite数据库。Access是微软公司的一款关系型数据库管理系统,而SQLite是一款轻量级、开源的嵌入式...
《dbtobean:数据库库表到Java对象的转换源码解析》 在软件开发过程中,数据模型的设计和实现是至关重要的一步。当涉及到数据库与应用程序之间的交互时,将数据库中的表结构映射到Java对象(通常称为Bean)是一种...
将 db 数据导出为 csv、json、xml 或 sql 文件的 Java 工具。 支持 Oracle DB、MySQL DB、PostgreSQL DB、Firebird DB、SQLite DB、Derby DB 和 HSQL DB。 此工具不包含所需的 db 驱动程序,但只需下载和配置一次...
- **Type Handlers**:处理特定类型的转换,例如将Java类型转换为SQL类型。 - **ObjectFactory**:负责创建新的对象实例,默认情况下使用默认构造函数创建对象。 - **Plugins**:允许扩展MyBatis的功能,比如拦截器...
LoginRegisterApp 安装MySQL版本8.0.21(即8.0.x) ... 如果您正在使用其他用户,则需要在以下... cd / root / java-db-Login / src / main 更新文件-DB结束POINT java / com / example / DbUtil.java java / com / e
### Java JDBC:深入理解与应用 #### Java JDBC数据库编程概览 Java Database Connectivity(JDBC)是Java平台上的标准数据库访问技术,它提供了一种通用的API,使开发者能够使用SQL语句操作各种关系型数据库管理...
标题中的“USB转串口DB9驱动”是指一种硬件设备,它允许用户通过USB接口连接到计算机,并模拟一个串行(RS-232)端口。这种适配器广泛用于那些需要串口通信但现代计算机不再提供物理串口的情况。DB9是串口接口的标准...