绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
初探Apache derby
2022-04-08 11:36:03

一. Derby能提供什么?

    Derby是一个基于Java和SQL ,开源的 RDBMS 。完全使用Java实现,他为用户提供了一个小巧的基于标准的数据库引擎,他可以嵌入到任Java解决方案中,他确保数据完成并提供复杂的事务支持。Derby的数据完全存储在磁盘上,他是一可携带的数据库,你可以将他从一台机器拷贝到另一台机器。更多信息请访问 http://db.apache.org/derby

二. Derby如何开始?

  • Derby的两种模式:内嵌模式【他和你应用程序在同一个JVM中,不需要单独配置和你的应用程序有相同的生命周期】、服务模式【运行在独立的JVM中,需要网络配置这点类似于Mysql等数据库】

  • 系统要求:Derby 使用 Java 开发依赖于JDK ,要求JDK版本 1.5+ 。查看版本可以使用命令 java -version

  • 下载安装Derby :  下载地址: http://db.apache.org/derby/derby_downloads.html  

  • 设置环境变量: DERBY_HOME  143005_sWIx_944789.jpg变量值=解压的目录,目录的结构就不解释了。

  • 设置Path 和 CLASSPATH : 在 Path中增加  %DERBY_HOME%\bin 、在 CLASSPATH 中增加 %DERBY_HOME%\lib 

三. 有哪些工具?怎样用?

  • ij 是Derby交互式JDBC脚本工具,使用该工具可以使用SQL脚本和数据库交互。

    配置完环境变量后有很多种方式启动ij工具

    1.在命令行使用 java -jar %DERBY_HOME%\lib\derbyrun.jar ij  

    2.在命令行使用 java  org.apache.derby.tools.ij  

    3.直接使用 ij 或 双击%DERBY_HOME%\bin 下 ij.bat   

    启动后看到 151531_5r30_944789.jpg说明启动成功

    连接到数据库   connect 'jdbc:derby:mydb;create=true'; 

    说明:connect 是ij工具内置的命令用于连接到数据库,mydb是数据库名称,create=true 说明如果数据库不存在就创建,创建位置为当前工作空间,该位置可以指定;

    新建表  create table mytable(id int primary key,name varchar(20) ) ; 

    录入数据  insert into mytable(10,'shi'),(20,'ershi'),(30,'sanshi'); 

    查询数据  select * from mytable;

    现在我们已经有一个名为mydb的derby数据库了。并且数据库中已有一个表mytable和三条数据。

  • sysinfo  查询Derby版本信息和环境信息

  • dblook 

  • SignatureChecker

  • PlanExporter

四.JDBC用法(代码)

数据库连接类 DBConnection

  1. public class DBConnection {
  2.        private final static String driver = "org.apache.derby.jdbc.EmbeddedDriver";
  3.        public static Connection getConnection(){
  4.            String dbName="mydb";
  5.            Connection conn=null;
  6.            try {
  7.                Properties props = new Properties(); // connection properties
  8.                // providing a user name and password is optional in the embedded
  9.                // and derbyclient frameworks
  10.                //props.put("user", "user1");
  11.                //props.put("password", "user1");
  12.                Class.forName(driver).newInstance();
  13.                System.out.println("Loaded the appropriate driver");
  14.                conn = DriverManager.getConnection("jdbc:derby:"+dbName+";create=true", props);
  15.                System.out.println("Connected to and created database " + dbName);
  16.            } catch (Exception ex) {
  17.                ex.printStackTrace();
  18.            }
  19.            return conn;
  20.        }
  21.        
  22.        public static void shutdwon(){
  23.            try {
  24.                DriverManager.getConnection("jdbc:derby:;shutdown=true");
  25.            } catch (SQLException se) {
  26.                if (( (se.getErrorCode() == 50000)
  27.                             && ("XJ015".equals(se.getSQLState()) ))) {
  28.                         // we got the expected exception
  29.                         System.out.println("Derby shut down normally");
  30.                         // Note that for single database shutdown, the expected
  31.                         // SQL state is "08006", and the error code is 45000.
  32.                     } else {
  33.                         // if the error code or SQLState is different, we have
  34.                         // an unexpected exception (shutdown failed)
  35.                         System.err.println("Derby did not shut down normally");
  36.                         se.printStackTrace();
  37.                     }
  38.            }
  39.        }
  40. }

数据库访问类 myTableDao

  1. public class myTableDao{
  2.     
  3.     public int save(String email){
  4.         Connection conn = DBConnection.getConnection();
  5.         int result=;
  6.         try {
  7.             conn.setAutoCommit(false);
  8.             PreparedStatement pstm = conn.prepareStatement("insert into location values (?)");
  9.             pstm.setString(1, email);
  10.             result=pstm.executeUpdate();
  11.             conn.commit();
  12.             if(pstm != null){
  13.                 pstm.close(); pstm = null;
  14.             }
  15.             if (conn != null) {
  16.                 conn.close();conn = null;
  17.             }
  18.         } catch (SQLException ex) {
  19.             ex.printStackTrace();
  20.         }
  21.         return result;
  22.     }
  23.     
  24.      public int delete(String email){
  25.         Connection conn = DBConnection.getConnection();
  26.         int result=;
  27.         try {
  28.             conn.setAutoCommit(false);
  29.             PreparedStatement pstm = conn.prepareStatement("delete from location where addr=?");
  30.             pstm.setString(1, email);
  31.             result=pstm.executeUpdate();
  32.             conn.commit();
  33.             if(pstm != null){
  34.                 pstm.close(); pstm = null;
  35.             }
  36.             if (conn != null) {
  37.                 conn.close();conn = null;
  38.             }
  39.         } catch (SQLException ex) {
  40.             ex.printStackTrace();
  41.         }
  42.         return result;
  43.     }
  44.     
  45.      public int update(String email,String nemail){
  46.         Connection conn = DBConnection.getConnection();
  47.         int result=;
  48.         try {
  49.             conn.setAutoCommit(false);
  50.             PreparedStatement pstm = conn.prepareStatement("update location set addr=? where addr=?");
  51.             pstm.setString(1, nemail);
  52.             pstm.setString(2, email);
  53.             result=pstm.executeUpdate();
  54.             conn.commit();
  55.             if(pstm != null){
  56.                 pstm.close(); pstm = null;
  57.             }
  58.             if (conn != null) {
  59.                 conn.close();conn = null;
  60.             }
  61.         } catch (SQLException ex) {
  62.             ex.printStackTrace();
  63.         }
  64.         return result;
  65.     }
  66.      
  67.      public List<String> query(){
  68.         Connection conn = DBConnection.getConnection();
  69.         List<String> list=null;
  70.         try {
  71.             PreparedStatement pstm = conn.prepareStatement("SELECT addr FROM location");
  72.             ResultSet rs = pstm.executeQuery();
  73.             list = new ArrayList<String>();
  74.             while (rs.next())
  75.             {
  76.                list.add(rs.getString(1));
  77.             }
  78.             if(rs != null){
  79.                 rs.close(); rs = null;
  80.             }
  81.             if(pstm != null){
  82.                 pstm.close(); pstm = null;
  83.             }
  84.             if (conn != null) {
  85.                 conn.close();conn = null;
  86.             }
  87.         } catch (SQLException ex) {
  88.             ex.printStackTrace();
  89.         }
  90.         return list;
  91.     }
  92.     
  93.     //初始化表
  94.     public void initTable(){
  95.         try {
  96.                 Connection conn = DBConnection.getConnection();
  97.                 conn.setAutoCommit(false);
  98.                 Statement s = conn.createStatement();
  99.                 s.execute("create table location(addr varchar(40))");
  100.                 System.out.println("Created table location");
  101.                 conn.commit();
  102.                 if(s != null){
  103.                     s.close(); s= null;
  104.                 }
  105.                 if (conn != null) {
  106.                     conn.close();conn = null;
  107.                 }
  108.             } catch (SQLException ex) {
  109.                 ex.printStackTrace();
  110.             }
  111.     }
  112. }

补充:需要在工程中导入 derby.jar

五.分页语句如何写

SELECT id, jobid, logtime, msgtext FROM log_table where 1=1 order by logtime desc OFFSET ? ROWS FETCH NEXT ? ROWS ONLY

说明:自己试试

分享好友

分享这个小栈给你的朋友们,一起进步吧。

ApacheDerby
创建时间:2022-04-08 11:22:42
ApacheDerby
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~