Derby 数据库介绍(2)--使用

news/2025/3/11 8:52:03/文章来源:https://www.cnblogs.com/wuyongyin/p/18382227

本文主要介绍 Derby 的基本使用(简介可参考:Derby 数据库介绍(1)--简介),文中所使用到的软件版本:Java 1.8.0_341、Derby 10.14.2.0。

1、嵌入模式

直接使用 JDBC 连接数据库,可创建和启动数据库。

1.1、内存数据库

@Test
public void embeddedMemory() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:memory:myDb;create=true", user, "");business(con, user);con.close();
}private void business(Connection con, String user) throws SQLException {String tableName = "a_student";Statement st = con.createStatement();String sql = "select 1 from sys.sysTABLES a,sys.sysschemas b where a.schemaid=b.schemaid and upper(b.schemaname)=? and upper(a.tablename)=?";PreparedStatement pst = con.prepareStatement(sql);pst.setString(1, user.toUpperCase());pst.setString(2, tableName.toUpperCase());ResultSet rs = pst.executeQuery();if (!rs.next()) {//表不存在则创建并初始化数据,这里根据业务需要进行操作st.executeUpdate("create table " + tableName + "(id int, name varchar(32))");st.executeUpdate("insert into " + tableName + "(id,name) values (1,'李白')");st.executeUpdate("insert into " + tableName + "(id,name) values (2,'杜甫')");}rs = st.executeQuery("select * from " + tableName);while (rs.next()) {log.info("id={},name={}", rs.getInt("id"), rs.getString("name"));}
}

1.2、文件数据库

@Test
public void embeddedFile() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:d:/temp/myDb;create=true", user, "");business(con, user);con.close();
}

1.3、资源数据库

@Test
public void embeddedJar() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:classpath:myDb", user, "");business(con, user);con.close();
}

jar 包不在 classpath 之中:

@Test
public void embeddedJar2() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:jar:(d:/temp/my.jar)myDb", user, "");business(con, user);con.close();
}

2、服务器模式

在服务端启动 Derby 数据库服务:

cd ${DERBY_HOME}/bin
NetworkServerControl.bat start -p 1527 -noSecurityManager

客户端通过 JDBC 访问 Derby 服务。

2.1、内存数据库

@Test
public void networkMemory() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/memory:myDb;create=true", user, "123456");business(con, user);con.close();
}

2.2、文件数据库

@Test
public void networkFile() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/d:/temp/myDb;create=true", user, "123456");business(con, user);con.close();
}

2.3、资源数据库

@Test
public void networkJar() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/classpath:myDb", user, "123");business(con, user);con.close();
}

jar 包不在 classpath 之中:

@Test
public void networkJar2() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/jar:(d:/temp/my.jar)myDb", user, "123");business(con, user);con.close();
}

3、混合模式

应用通过代码的方式启动数据库服务,应用内访问数据库可以使用进程模式,其他应用通过服务器模式访问。

@Test
public void networkServerControl() throws Exception {NetworkServerControl server = new NetworkServerControl(InetAddress.getByName("0.0.0.0"), 1527);server.start (null);CountDownLatch countDownLatch = new CountDownLatch(1);new Thread(() -> {try {//模拟其他应用访问
            networkMemory();} catch (Exception e) {e.printStackTrace();}countDownLatch.countDown();}).start();countDownLatch.await();server.shutdown();
}

 

 

完整代码:

package com.abc.demo.db;import lombok.extern.slf4j.Slf4j;
import org.apache.derby.drda.NetworkServerControl;
import org.junit.Test;import java.net.InetAddress;
import java.sql.*;
import java.util.concurrent.CountDownLatch;@Slf4j
public class DerbyCae {@Testpublic void embeddedMemory() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:memory:myDb;create=true", user, "");business(con, user);con.close();}@Testpublic void embeddedFile() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:d:/temp/myDb;create=true", user, "");business(con, user);con.close();}@Testpublic void embeddedJar() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:classpath:myDb", user, "");business(con, user);con.close();}@Testpublic void embeddedJar2() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:jar:(d:/temp/my.jar)myDb", user, "");business(con, user);con.close();}@Testpublic void networkMemory() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/memory:myDb;create=true", user, "123456");business(con, user);con.close();}@Testpublic void networkFile() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/d:/temp/myDb;create=true", user, "123456");business(con, user);con.close();}@Testpublic void networkJar() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/classpath:myDb", user, "123");business(con, user);con.close();}@Testpublic void networkJar2() throws SQLException {String user = "admin";Connection con = JdbcUtil.getConnection("org.apache.derby.jdbc.ClientDriver", "jdbc:derby://localhost:1527/jar:(d:/temp/my.jar)myDb", user, "123");business(con, user);con.close();}@Testpublic void networkServerControl() throws Exception {NetworkServerControl server = new NetworkServerControl(InetAddress.getByName("0.0.0.0"), 1527);server.start (null);CountDownLatch countDownLatch = new CountDownLatch(1);new Thread(() -> {try {//模拟其他应用访问
                networkMemory();} catch (Exception e) {e.printStackTrace();}countDownLatch.countDown();}).start();countDownLatch.await();server.shutdown();}private void business(Connection con, String user) throws SQLException {String tableName = "a_student";Statement st = con.createStatement();String sql = "select 1 from sys.sysTABLES a,sys.sysschemas b where a.schemaid=b.schemaid and upper(b.schemaname)=? and upper(a.tablename)=?";PreparedStatement pst = con.prepareStatement(sql);pst.setString(1, user.toUpperCase());pst.setString(2, tableName.toUpperCase());ResultSet rs = pst.executeQuery();if (!rs.next()) {//表不存在则创建并初始化数据,这里根据业务需要进行操作st.executeUpdate("create table " + tableName + "(id int, name varchar(32))");st.executeUpdate("insert into " + tableName + "(id,name) values (1,'李白')");st.executeUpdate("insert into " + tableName + "(id,name) values (2,'杜甫')");}rs = st.executeQuery("select * from " + tableName);while (rs.next()) {log.info("id={},name={}", rs.getInt("id"), rs.getString("name"));}}
}
DerbyCae.java
package com.abc.demo.db;import lombok.extern.slf4j.Slf4j;import java.sql.*;@Slf4j
public class JdbcUtil {private JdbcUtil() {}public static Connection getConnection(String driver, String url, String username, String password) {Connection con = null;try {Class.forName(driver);con = DriverManager.getConnection(url, username, password);} catch (ClassNotFoundException | SQLException e) {log.warn("url={},username={},password={}", url, username, password);e.printStackTrace();}return con;}
}
JdbcUtil.java

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/856883.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视野修炼第114期 | 2024JS现状调查结果

① 2024 JavaScript 现状调查结果 ② Text Fragment - 直接链接网页文本 ③ my-github-2024 - 2024 GitHub 报告生成 ④ 优秀的单页网站案例 ⑤ Gradienty - 一套CSS工具集 ⑥ 并发和并行的区别 ⑦ AI 音效生成欢迎来到第 114 期的【视野修炼 - 技术周刊】,下面是本期的精选内…

线程池工作原理

线程池综述 它的主要特点为:线程复用;控制最大并发数;管理线程。 使用线程池的好处有 第一:降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁带来的资源消耗 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建好就可以立即执行。 第三:提高线程的…

探讨:为什么大公司一定要使用微服务?

探讨:为什么大公司一定要使用微服务? | Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -------------| -------------…

实验6 模板类、文件I\O和异常处理

实验任务4#pragma once #include <iostream> #include <stdexcept>using namespace std;template <typename T> class Vector { public:Vector(int n, int value=0);Vector(Vector<T> &v);~Vector();int get_size() const;T& at(int i);T&…

千峰教育--Netty 再学习 1 网络模型概述(BIO、NIO、AIO)、BIO 逻辑实现及其局限性(单线程服务端、多线程服务端、线程池服务端)

课程介绍 1 网络模型概述 2 Channel 详解 3 Buffer 详解 4 Selector 详解 5 NIO综合案例-聊天室 6 AIO概念及实现 1 网络编程IO 模型介绍 1.1 BLockingIO Blocking IO也称BIO,及同步阻塞IO。Java 的 io 包基于流模型实现,提供了FIle,FileInputStream,FileOutputStream等输…

ZBlog升级之后出现后台登录错误

升级 1.7.3.3260 之后出现后台登录错误( 提示非法访问,验证码不显示,验证码报错 ) 这是因为 1.7.3.3260 增加了对后台登录的 2 个保护功能,因为主题插件的兼容性原因或其它原因造成功能不正常,可以在 option.php 里关掉 CSRF 保护功能或是验证码功能,或是 2 个都关闭 使…

织梦源码后台更新系统后,网页错乱的解决方法

覆盖模板文件下载之前使用的模板文件。 覆盖 templets/default 目录下的文件。 如果使用的是其他模板目录,确保更新不会影响到这些目录。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站…

解决Dede织梦上传图片失败 ERROR:Copy Uploadfile Error! 提示

错误显示:拷贝(复制)上传文件出错! 原因:上传的文件损坏。 上传目录无写权限。解决方法:尝试上传其它图片。 给uploads写入权限:Linux服务器:通过FTP设置 uploads 目录为777权限,子文件夹选择继承。 Windows 2003服务器:右键文件夹属性 -> 安全 -> 添加账户 -&…

织梦CMS:Error:check Snooping out of bounds 的解决办法

Error:check Snooping out of bounds @ D:wwwrootgdhgcwwwrootkjempletsdefaultarticle_article.htm原因:路径中包含了大写字母,使用 strpos 操作时区分大小写。解决方法:打开 include/dedetag.class.php 文件。 找到第325行,修改为:if (stripos($path, $this->clean(D…

dedecms修改网站内容,如何在DedeCMS中编辑文章和页面

在DedeCMS中编辑文章和页面的步骤如下:登录管理后台:使用管理员账号登录DedeCMS管理后台。 进入内容管理:导航至“内容管理”或“文章管理”模块。 选择内容:找到需要修改的文章或页面。 编辑内容:点击“编辑”按钮,进行必要的修改。 保存更改:确认无误后,保存修改。扫…

如何通过修改hosts限制访问网站,利用hosts文件限制网站访问

打开hosts文件:使用文本编辑器打开C:\Windows\System32\drivers\etc\hosts(Windows)或/etc/hosts(Linux/Mac)。 添加条目:在文件末尾添加一行,格式为127.0.0.1 网站域名。 保存文件:保存并关闭文件。 刷新DNS缓存:在命令行中运行ipconfig /flushdns(Windows)或sudo …

JAVA-通过大疆TSDK的API直接获取红外图片温度信息

一、前言 看过很多关于大疆红外图片用TSDK取温的方式,但是网上能搜到的大部分教程都是通过官方下载文件smple编译出来的程序来取温,如果这样做,虽然确实也能够实现目的,但不得不说,不但会降低运行速度,而且代码调用起来也麻烦。所以不如研究一下怎么直接调用他们的C++ AP…