javaDB—— derby简单操作

 

Derby 并不是一个新的数据库产品, 它是由IBM 捐献给ApacheDB 项目的一个纯Java 数据库,JDK6.0 里面带的这个Derby 的版本是10.2.1 .7, 支持存储过程和触发器; 有两种运行模式, 一种是作为嵌入式数据库, 另一种是作为网络数据库, 前者的数据库服务器和客户端都在同一个JVM 里面运行, 后者允许数据库服务器端和客户端不在同一个JVM 里面, 而且允许这两者在不同的物理机器上. 值得注意的是JDK6 里面的这个Derby 支持JDK6 的新特性JDBC 4.0 规范(JSR 221), 现在我们如果要练习JDBC 的用法, 没有必要单独装一个数据库产品了, 直接用Derby 就行.
下面是个使用derby 的简单例子:
首先启动数据库。创建一个简单的数据库
 

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.     }  

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 连接数据库.

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

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. }  

 

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( 这个就不多说了),:

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. }  

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;

}

}



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

插入数据:

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.     }  

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);

    }

  }

}

 

 

 

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. }  

 

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 所产生的值. 感觉还是有点想sequencecurr_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.     }  

 

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);

    }

  }

}



删除数据:

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.     }  

 

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);

    }

  }

}



查询数据:

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. }  

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 的简单操作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值