jdk自带的数据库derby的基本使用以及注意事项(mac为例),附java demo
文章目录
安装
无需安装jdk自带 (1.8好像没有)
jdk已经帮我们安装在了 ** 本机jdk的安装目录/db **下
环境变量
vi /etc/profile
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home
export DERBY_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db
PATH=$JAVA_HOME/bin:$DERBY_HOME:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbyclient.jar:$DERBY_HOME/lib/derbytools.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
source /etc/profile
验证是否安装成功
java org.apache.derby.tools.sysinfo
输出如下说明成功
java.specification.version: 1.7
java.runtime.version: 1.7.0_60-b19
--------- Derby 信息 --------
JRE - JDBC: Java SE 7 - JDBC 4.0
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derby.jar] 10.8.3.2 - (1557835)
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derbytools.jar] 10.8.3.2 - (1557835)
[/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/db/lib/derbyclient.jar] 10.8.3.2 - (1557835)
------------------------------------------------------
----------------- 语言环境信息 -----------------
当前语言环境: [中文/中国 [zh_CN]]
找到支持的语言环境:[cs]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[de_DE]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[es]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[fr]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[hu]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[it]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ja_JP]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ko_KR]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[pl]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[pt_BR]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[ru]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[zh_CN]
版本:10.8.3.2 - (1557835)
找到支持的语言环境:[zh_TW]
版本:10.8.3.2 - (1557835)
-------------
启动
本地启动
任意目录:
java -jar $DERBY_HOME/lib/derbyrun.jar server start
➜ ~ java -jar $DERBY_HOME/lib/derbyrun.jar server start
Sat Feb 02 16:56:12 CST 2019 : 已使用基本服务器安全策略安装了安全管理程序。
Sat Feb 02 16:56:13 CST 2019 : Apache Derby 网络服务器 - 10.8.3.2 - (1557835) 已启动并准备接受端口 1527 上的连接
如上即成功
允许远程连接的启动方式:
摘录:
derby 的用户名和密码是公开的, 允许远程连接是不安全的因素。
你用startnetworkserver 命令的时候,开启的网络服务,虽然允许多客户端多进程,但仅限本机使用
如希望使用 ip地址 远程连接,必须强制指定提供服务的IP 地址和 端口,否则仅限localhost。所以,应该做如下修改:
1. 进入derby数据库安装包下: derby/目录下的derby.drda.host=127.0.0.1改成derby.drda.host=0.0.0.0
2.进入命令行,cd到derby安装包的bin目录,执行:
NetworkServerControl start -h 10.31.23.45 -p 1527
(形式 networkservercontrol start -h %ip地址% -p %port%)
摘自:https://blog.csdn.net/qq_25337221/article/details/83240572
因为我直接用的jdk本身的derby,并没有找到方法一中的文件,所以我的真实操作如下:
在db/bin下
startNetworkServer(网络模式开启)(我没用这个) 在任意路径下,之后创建的数据库会在这个任意的路径下出现。
用这个就对了
如果之前用本地的方式开启的服务,先关了然后:
NetworkServerControl start -h 192.168.1.130(本机的真实ip,不是localhost也不是127.0.0.1) -p 1527 (能够指定ip,修改localhost)
在启动过程中可能遇到的错误(远程连接的时候会出现):
1
错误 08001:java.net.ConnectException:连接到端口 1527 上的服务器 10.0.4.120 时出错,消息为 Connection refused。
解决:查看对应的db服务是否开启
2
错误 XJ041:DERBY SQL error: SQLCODE: -40001, SQLSTATE: XJ041, SQLERRMC: 无法创建数据库“db”,请参阅下一个异常错误,以了解详细信息。::SQLSTATE: XBM0H
这是本人遇到的错误,是因为mac中jdk的安装路径是在/下的可能没有创建的权限 通过sudo chmod -R 777 xxx 改变derby所在相关地址权限即可(比如我改的就是jdk1.7下的db目录的权限)。
连接测试,创建数据库
方法一(推荐)
任意目录
java org.apache.derby.tools.ij
➜ db java org.apache.derby.tools.ij
ij 版本 10.8
说明成功
connect 'jdbc:derby://localhost:1527/new;create=true;user=root;password=root';
注意: (此操作一定要以分号结尾)
jdbc:derby://localhost:1527/new这里的new是数据库,
create=true;没有就创建的意思
user=root;password=root用户名密码
完整操作
➜ db java org.apache.derby.tools.ij
ij 版本 10.8
ij> connect 'jdbc:derby://localhost:1527/new;create=true;user=root;password=root';
ij>
最下面出现ij>说明连接并创建数据库成功
方法二
在lib目录下建立ij.properties 文件
ij.driver=org.apache.derby.jdbc.ClientDriver
ij.protocol=jdbc:derby://localhost:1527/
#当COREJAVA数据库不存在,创建一个
ij.database=COREJAVA;create=true
在另一个命令shell中,通过执行下面的命令来运行Derby 的交互式脚本执行工具(称为ij): java -jar derby/lib/derbyrun.jar ij -p ij.properties
java demo
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloudwise</groupId>
<artifactId>derby</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.derby/derbyclient -->
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.7.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.derby/derby -->
<!-- <dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.8.3.0</version>
<scope>test</scope>
</dependency> -->
</dependencies>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.cloudwise.leesin_derby.Start</Main-Class>
<Build-Number>123</Build-Number>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.directory}/classes</classesDirectory>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.cloudwise.leesin_derby.Start</mainClass>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<manifestEntries>
<Class-Path>${basedir}/libs/derbyclient.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Start.class
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Properties;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Hello world!
*
*/
public class Start extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
try{
runTest();
response.getWriter().print("success!success!success!success!success!success!success!success!");
}catch(SQLException ex){
for(Throwable t:ex)
t.printStackTrace();
}
}
/**
*Runs a test by creating a table,adding a value,showing the table contents,and removing the table.
*/
public static void runTest() throws SQLException,IOException{
try(Connection conn = getConnection())
{
Statement stat = conn.createStatement();
DatabaseMetaData meta = conn.getMetaData();
ResultSet res = meta.getTables(null, null, null, new String[]{"TABLE"});
HashSet<String> set=new HashSet<String>();
while (res.next()) {
set.add(res.getString("TABLE_NAME"));
}
if(set.contains("Greetings1".toUpperCase())){
stat.executeUpdate("drop TABLE Greetings1");
}
if(set.contains("Greetings2".toUpperCase())){
stat.executeUpdate("drop TABLE Greetings2");
}
if(set.contains("Greetings3".toUpperCase())){
stat.executeUpdate("drop TABLE Greetings3");
}
//*******************************derby中的droop table if exists xxx 是不允许的***********************
stat.executeUpdate("CREATE TABLE Greetings1 (Message CHAR(40))");
stat.executeUpdate("CREATE TABLE Greetings2 (Message CHAR(40))");
stat.executeUpdate("CREATE TABLE Greetings3 (Message CHAR(40))");
stat.executeUpdate("INSERT INTO Greetings1 VALUES('这个语句是属于statmeny的')");
PreparedStatement prepareStatement = conn.prepareStatement("INSERT INTO Greetings2 VALUES('这个语句是属于preparestatment的')");
prepareStatement.execute();
CallableStatement calls = conn.prepareCall("INSERT INTO Greetings3 VALUES('这个语句是属于callablestatement的')");
calls.execute();
try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings1")){
//将光标移动到下一行,初始在第一行之前
while(result.next())
System.out.println(result.getString("Message"));
}
//*******************************预编译语句上不允许使用方法“executeQuery(String)”。*********************************
// try(ResultSet result = prepareStatement.executeQuery("SELECT * FROM Greetings2")){
// //将光标移动到下一行,初始在第一行之前
// while(result.next())
// System.out.println(result.getString("Message"));
// }
// try(ResultSet result = calls.executeQuery("SELECT * FROM Greetings3")){
// //将光标移动到下一行,初始在第一行之前
// while(result.next())
// System.out.println(result.getString("Message"));
// }
try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings2")){
//将光标移动到下一行,初始在第一行之前
while(result.next())
System.out.println(result.getString("Message"));
}try(ResultSet result = stat.executeQuery("SELECT * FROM Greetings3")){
//将光标移动到下一行,初始在第一行之前
while(result.next())
System.out.println(result.getString("Message"));
}
stat.executeUpdate("DROP TABLE Greetings1");
stat.executeUpdate("DROP TABLE Greetings2");
stat.executeUpdate("DROP TABLE Greetings3");
}
}
/**
*Gets a connection from the properties specified in the file database.properties.
*@return the database connection
*/
public static Connection getConnection() throws SQLException,IOException{
Properties props = new Properties();
// try(InputStream in = Files.newInputStream(Paths.get("db.txt"))){
// props.load(in);
// }
try(InputStream r = Start.class.getClassLoader().getResourceAsStream("db.txt")){
props.load(r);
}
String drivers = props.getProperty("jdbc.drivers");
//为了适应那些不能自动注册的数据库驱动程序
if(drivers != null)
//这种方式可以提供多个驱动器,使用冒号分割
System.setProperty("jdbc.drivers",drivers);
try{
// Class.forName("org.apache.derby.jdbc.ClientDriver");
Class.forName(drivers);
}catch(Exception ex){
ex.printStackTrace();
}
String url = props.getProperty("jdbc.url");
System.out.println(url);
String username = props.getProperty("jdbc.username");
//System.out.println(username);
String password = props.getProperty("jdbc.password");
//System.out.println(password);
// return DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/newdb","root","root");
return DriverManager.getConnection(url,username,password);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>start</servlet-name>
<servlet-class>Start</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>start</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
db.ext
jdbc.drivers=org.apache.derby.jdbc.ClientDriver
#因为derby驱动程序将自动注册驱动类
jdbc.url=jdbc:derby://localhost:1527/new
jdbc.username=root
#可以不使用用户名和密码,默认是APP用户,因为如果使用了如此的设置在第二次创建时(第一次中途失败)会出现 #org.apache.derby.client.am.SqlException: Schema“DBUSER4”中已经存在Table/View“GREETINGS”的异常,便于方便,所以在此注释掉了。
jdbc.password=root
运行结果
[2019-02-02 05:07:02,244] Artifact derby_demo:war: Artifact is deployed successfully
[2019-02-02 05:07:02,244] Artifact derby_demo:war: Deploy took 557 milliseconds
jdbc:derby://localhost:1527/new
这个语句是属于statmeny的
这个语句是属于preparestatment的
这个语句是属于callablestatement的
参考文章:https://blog.csdn.net/weixin_42812613/article/details/82937773
jdk自带的数据库derby的基本使用以及注意事项(mac为例),附java demo的更多相关文章
- jdk 自带的数据库Derby使用
ij是derby自带的一个功能强大的数据库管理工具,可以进行很多数据库管理的操作,包括创建数据库, 启动/关闭数据库,执行SQL脚本等.完成准备工作后,就可以启动并使用ij工具了. 在cmd中输入如下 ...
- 干货 | 10分钟带你彻底了解column generation(列生成)算法的原理附java代码
OUTLINE 前言 预备知识预警 什么是column generation 相关概念科普 Cutting Stock Problem CG求解Cutting Stock Problem 列生成代码 ...
- jdk自带的MD5进行数据的加密与解密
package com.tools.util; import java.io.IOException; import java.io.UnsupportedEncodingException; imp ...
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-5安装JDK及安装mysql数据库
1.安装JDK 可以不用卸载自带的openjdk,配好环境变量即可. 下载文件:jdk-8u151-linux-x64.tar.gz 附:JDK各版本下载地址:https://www.oracle.c ...
- JDK自带工具keytool生成ssl证书
前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...
- 一、hive安装(内置数据库derby)
hive是一个数据仓库工具,建立在hadoop之上,它的存在是为了让大数据的查询和分析更加的方便.hive提供简单的sql查询功能,并最终转换为mapreduce任务执行. 一.环境 JDK1.8+官 ...
- 不推荐别的了,IDEA 自带的数据库工具就很牛逼!
MySQL 等数据库客户端软件市面上非常多了,别的栈长就不介绍了, 其实 IntelliJ IDEA 自带的数据库工具就很牛逼,不信你继续往下看. 本文以 IntelliJ IDEA/ Mac 版本作 ...
- JDK 自带的服务发现框架 ServiceLoader 好用吗?
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 Github · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- 使用JDK自带的visualvm进行性能监测和调优
使用JDK自带的visualvm进行性能监测和调优 1.关于VisualVm工具 VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...
随机推荐
- python之—flask虚拟环境
一.安装: 输入以下命令可以检查系统是否安装了virtualenv : $ virtualenv --version 如果结果显示错误,你就需要安装这个工具. 1.Ubuntu 用户可以使用下述命令安 ...
- targetSdkVersion和与target属性的区别
参考:http://blog.csdn.net/dai_zhenliang/article/details/8175781 AndroidMenifest.xml中targetSdkVersion和p ...
- db2,用户名密码不对导致无法连接数据库: Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000
文章目录 背景 解决 背景 qa需要db2的demo,运维给安装完db2,启动报错 com.ibm.db2.jcc.am.io: [jcc][t4][2013][11249][4.7.112] Con ...
- idea中如何查看jar包中的源码(非maven),以oracle的ojdbc为例
文章目录 背景 解决 背景 工作需要查看oracle的部分源码(ojdbc.jar),maven并没有这个依赖,单纯的导入jar包无法查看. 解决 将ojdbc.jar 安装到本地仓库,maven从本 ...
- bigger is greater
题目: Lexicographical order is often known as alphabetical order when dealing with strings. A string i ...
- 使用Python将字符串转换为格式化的日期时间字符串
我正在尝试将字符串“20091229050936”转换为“2009年12月29日(UTC)” >>>import time >>>s = time.strptime ...
- Java-向上转型后调用方法和属性的注意事项
/*多态的注意事项 (1)如果子类重写了父类方法, 意味着子类里定义的方法彻底覆盖了父类里同名的方法, 系统将不可能把父类里的方法转移到子类中 补充对(1)的个人理解: 当s向上转型传给了b, b即使 ...
- 函数中的toString
function Person(){ this.name = name; this.age = age; this . gender = gender; } // 创建一个Person实例 var ...
- ASP.NET MVC 解决账号重复登录问题
解决重复登录 用到了 .net 身份票证 和Global全局处理文件 第一步 登录方法 传入用户名 private void GetOnline(string Name) { Hashtable S ...
- 召回率、AUC、ROC模型评估指标精要
混淆矩阵 精准率/查准率,presicion 预测为正的样本中实际为正的概率 召回率/查全率,recall 实际为正的样本中被预测为正的概率 TPR F1分数,同时考虑查准率和查全率,二者达到平衡,= ...