Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

JavaDB 的基本使用

前幾天幫 lf 寫暸個數據庫管理繫統,呵呵。使用 MySQL+Java

后來想用 JavaDB 來寫的,自己摸索暸下,ok 暸,

可是由于沒有網絡,查不暸他的基本連接和操作,雖然可以用 java dasktop application

基于數據庫來搞定,可是到復雜的 sql 語句操作就搞不定暸,

于是做暸個簡單的 javaDB 和一個可以用的 MySQL+Java

現在上網看暸下。。。

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 目录下就可以找到.
然后就要创建数据库了:
Java 代码 复制代码
  1. private Connection getConnection() throws SQLException {   
  2.         Connection connection = DriverManager   
  3.                 .getConnection("jdbc:derby:userDB;create=true;user=test;password=test");   
  4.         connection.setAutoCommit(false);   
  5.         return connection;   
  6.     }  


其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在, 则创建该数据库, 如果数据库存在, 则用用户 user=test; 密码 password=test 连接数据库.

有了数据库, 接下来该建表了:

Java 代码 复制代码
  1. private void createTable(Connection connection) throws SQLException {   
  2.     Statement statement = connection.createStatement();   
  3.   
  4.     String sql = "create table USERS("  
  5.             + "   ID                           BIGINT                       not null generated by default as identity,"  
  6.             + "   USER_NAME            VARCHAR(20)            not null,"  
  7.             + "   PASSWORD             VARCHAR(20),"  
  8.             + "   constraint P_KEY_1 primary key (ID))";   
  9.     statement.execute(sql);   
  10.   
  11.     sql = "create unique index USER_NAME_INDEX on USERS ("  
  12.             + "   USER_NAME            ASC)";   
  13.     statement.execute(sql);   
  14.   
  15.     statement.close();   
  16. }  


���建了 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(这个就不多说了),:
Java 代码 复制代码
  1. public class User implements Serializable {   
  2.   
  3.     /**  
  4.      *   
  5.      */  
  6.     private static final long serialVersionUID = 1L;   
  7.   
  8.     private Long id;   
  9.   
  10.     private String userName;   
  11.   
  12.     private String password;   
  13.   
  14.     public Long getId() {   
  15.         return id;   
  16.     }   
  17.   
  18.     public void setId(Long id) {   
  19.         this.id = id;   
  20.     }   
  21.   
  22.     public String getUserName() {   
  23.         return userName;   
  24.     }   
  25.   
  26.     public void setUserName(String userName) {   
  27.         this.userName = userName;   
  28.     }   
  29.   
  30.     public String getPassword() {   
  31.         return password;   
  32.     }   
  33.   
  34.     public void setPassword(String password) {   
  35.         this.password = password;   
  36.     }   
  37. }  



接下来就可以就数据库进行增删改查的操作了:

插入数据:

Java 代码 复制代码
  1. private void create(User user) {   
  2.         Connection connection = null;   
  3.   
  4.         try {   
  5.             connection = this.getConnection();   
  6.             PreparedStatement statement = connection   
  7.                     .prepareStatement("insert into users (user_name,password) values(?,?)");   
  8.   
  9.             int index = 1;   
  10.             statement.setString(index++, user.getUserName());   
  11.             statement.setString(index++, user.getPassword());   
  12.   
  13.             statement.execute();   
  14.   
  15.             user.setId(this.getId(connection));   
  16.   
  17.             connection.commit();   
  18.         } catch (SQLException e) {   
  19.             rollback(connection);   
  20.             throw new RuntimeException(e);   
  21.         } finally {   
  22.             if (connection != null) {   
  23.                 close(connection);   
  24.             }   
  25.         }   
  26.     }  

Java 代码 复制代码
  1. private Long getId(Connection connection) throws SQLException {   
  2.     CallableStatement callableStatement = connection   
  3.             .prepareCall("values identity_val_local()");   
  4.   
  5.     ResultSet resultSet = callableStatement.executeQuery();   
  6.     resultSet.next();   
  7.     Long id = resultSet.getLong(1);   
  8.     resultSet.close();   
  9.     callableStatement.close();   
  10.     return id;   
  11. }  


getId 方法是获得系统默认的 id 值, 是通过 identity_val_local() 获得的, 而函数 IDENTITY_VAL_LOCAL() 则可以在 INSERT 语句执行之后,为我们返回刚才系统为 id 所产生的值. 感觉还是有点想 sequence 的 curr_val.


修改数据:

Java 代码 复制代码
  1.   
  2. private void update(User user) {   
  3.         Connection connection = null;   
  4.   
  5.         try {   
  6.             connection = this.getConnection();   
  7.             PreparedStatement statement = connection   
  8.                     .prepareStatement("update users set user_name=?,password=? where id=?");   
  9.   
  10.             int index = 1;   
  11.             statement.setString(index++, user.getUserName());   
  12.             statement.setString(index++, user.getPassword());   
  13.             statement.setLong(index++, user.getId());   
  14.   
  15.             statement.execute();   
  16.   
  17.             connection.commit();   
  18.         } catch (SQLException e) {   
  19.             rollback(connection);   
  20.             throw new RuntimeException(e);   
  21.         } finally {   
  22.             if (connection != null) {   
  23.                 close(connection);   
  24.             }   
  25.         }   
  26.     }  


删除数据:

Java 代码 复制代码
  1.   
  2. public void delete(Long id) {   
  3.         Connection connection = null;   
  4.   
  5.         try {   
  6.             connection = this.getConnection();   
  7.             PreparedStatement statement = connection   
  8.                     .prepareStatement("delete from users where id=?");   
  9.             statement.setLong(1, id);   
  10.             statement.execute();   
  11.             connection.commit();   
  12.         } catch (SQLException e) {   
  13.             rollback(connection);   
  14.             throw new RuntimeException(e);   
  15.         } finally {   
  16.             if (connection != null) {   
  17.                 close(connection);   
  18.             }   
  19.         }   
  20.     }  


查询数据:

Java 代码 复制代码
  1. public User findById(Long id) {   
  2.     Connection connection = null;   
  3.   
  4.     try {   
  5.         connection = this.getConnection();   
  6.   
  7.         PreparedStatement statement = connection   
  8.                 .prepareStatement("select user_name,password from users where id=?");   
  9.         statement.setLong(1, id);   
  10.         ResultSet resultSet = statement.executeQuery();   
  11.   
  12.         User user = null;   
  13.   
  14.         if (resultSet.next()) {   
  15.             user = new User();   
  16.             user.setId(id);   
  17.             user.setUserName(resultSet.getString("user_name"));   
  18.             user.setPassword(resultSet.getString("password"));   
  19.         }   
  20.   
  21.         resultSet.close();   
  22.         statement.close();   
  23.         connection.commit();   
  24.         return user;   
  25.     } catch (SQLException e) {   
  26.         throw new RuntimeException(e);   
  27.     } finally {   
  28.         if (connection != null) {   
  29.             close(connection);   
  30.         }   
  31.     }   
  32. }  


以上就是 derby 的简单操作.

欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步