Derby并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK6.0里面带的这个Derby的版本是10.2.1.7,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上.值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 4.0规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行.
下面是个使用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);
}
}
}
以上就是derby的简单操作.
分享到:
相关推荐
JAVA学习笔记最新ppt版20 - JDBC 入门 在本章节中,我们将学习 JDBC 的基本概念和使用方法,以及如何使用 JDBC 连接数据库和进行数据操作。 一、 JDBC 简介 JDBC(Java Database Connectivity)是一种 Java API,...
"db2应用基础学习笔记"涵盖了DB2的基本概念、安装配置、数据操作、查询优化、安全性及备份恢复等多个方面,旨在帮助初学者快速入门并掌握DB2的基础使用。 1. **基本概念**:DB2是一款支持SQL语言的数据库系统,它...
这份"DB2学习笔记与总结"包含了丰富的知识内容,旨在帮助读者深入理解和掌握DB2的相关技术。以下是对其中主要知识点的详细阐述: 1. **数据库基本概念**:首先,了解数据库的基本概念至关重要,包括数据模型(如...
Java操作XML是编程中常见的任务,特别是在处理配置文件、数据交换和存储时。XML文档对象模型(DOM)是一种广泛使用的解析XML的方式。DOM允许开发者通过Java代码与XML文档的结构进行交互,就像一棵树,每个元素、属性...
JDBC学习笔记 JDBC(Java DataBase Connectivity)是一种Java程序语言访问数据库的标准接口。它使得Java程序可以连接到各种不同的数据库管理系统,例如Oracle、SQL Server、MySQL、DB2、Sybase等。 JDBC的概念 ...
【Java基础整理笔记超详细】 Java是一门广泛使用的高级编程语言,由Sun Microsystems(后被Oracle收购)在1995年推出。它的设计目标是跨平台、面向对象,并且具有健壮性和安全性。Java这个名字源于印度尼西亚的咖啡...
总的来说,这份综合笔记详细地介绍了使用Java JDBC进行数据库操作的各个方面,从数据库的基本管理到数据的增删改查,再到SQL语句的使用,为学习和使用JDBC提供了丰富的知识资源。通过这份笔记,读者可以掌握使用Java...
在学习DB2的过程中,了解其核心配置参数以及如何优化是至关重要的。以下是对标题和描述中涉及的知识点的详细解释: 1. **缓冲池问题**:缓冲池是DB2内存管理的关键组成部分,用于缓存数据和索引页,以减少磁盘I/O...
【Java学习笔记JDK6课件之二】深入解析 Java是世界上最流行的编程语言之一,尤其对于新手开发者来说,理解并掌握JDK6是至关重要的第一步。本篇笔记将详细介绍如何下载、安装JDK,设置Path和Classpath,以及编写并...
Java学习笔记涵盖了大量的编程知识,主要集中在Java语言本身、数据库技术以及常见的企业级框架上。以下是对这些知识点的详细说明: 1. **Java基础**:Java是一种广泛使用的面向对象的编程语言,以其“一次编写,...
### Java学习笔记知识点详解 #### 一、Java环境配置与工具软件 - **JAVA环境变量配置**: - **JDK安装路径**:定义变量`java_myhome`,其值为`C:\Java\jdk1.8.0_112`。 - **PATH变量配置**:增加`%java_myhome%\...
在本笔记中,我们将深入探讨DB4o的对象SQL基本操作,帮助你更好地理解和运用这个强大的工具。 一、对象持久化 在DB4o中,对象的持久化非常直观,只需将对象实例存储到数据库即可。例如,你有一个名为`Person`的类,...
JAVA学习笔记汇总与知识点解析 本篇JAVA学习笔记汇总涵盖了从数据库连接到HTML标记,再到JavaScript服务器端执行等多方面的内容。以下是对这些知识点的详细解析: ### 1. 使用JDBC:ODBC连接数据库 #### 知识点...
目录简介使用步骤编写数据库的配置文件配置xml文件使用通用的增删改批量增删改查询返回一个结果查询返回多个结果关于‘?’的使用问题 简介 Spring对JDBC进行了封装,提供了JdbcTemplate类,该类使...创建一个db.pro
在Java编程中,JDBC(Java Database Connectivity)是Java语言与各种数据库交互的标准接口,使得开发者能够通过编写Java代码来访问和操作数据库。本章节主要讲解了JDBC入门,包括JDBC的基本概念、数据库驱动程序的...
- **demo**:提供示例程序,帮助学习和理解Java功能。 - **include**:包含本地方法的头文件,用于Java与C/C++的互操作。 - **jre**:内部包含了一个JRE,用于运行Java程序。 - **lib**:存储Java类库,是JVM和...
数据库(DB)是一个文件集合,其本质是一个文件系统,将数据以特定格式存储在文件中,并使用SQL语言对数据进行增删改查。数据库管理系统(DBMS)是一套操作和管理数据库的大型软件,例如MySQL、Oracle、DB2、Sql...