jarrywin 发表于 2013-1-14 23:08:52

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就行.
    下面是个使用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的方式。
Byalways是完全由系统自动生成。
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的简单操作.
页: [1]
查看完整版本: JavaDb学习笔记