1.H2简介
H2是纯JAVA编写的轻量级数据库,类似于HSQLDB,但比HSQLDB好用多了。使用非常方便,无需安装,你就可以在程序中启动数据库服务器、连接、创建数据库,客户端连接也不需要任何安装,只要有IE即可。官网http://www.h2database.com/html/main.html。下载后bin目录下会有数据库驱动包,假设名叫h2-1.3.162.jar,如果你不需要看源代码,就这一个文件就够用了,启动数据库及连接数据库所用的资源都在里面了。为了方便,我们将它改名为h2.jar。
1)文件方式启动
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:file:~/test", "sa", "");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
Connection conn = DriverManager.getConnection("jdbc:h2:file:~/test", "sa", "");
Connection conn = DriverManager.getConnection("jdbc:h2:file:C:/Users/Administrator/test", "sa", "");
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use: Locked by another process. Possible solutions: close all other connection(s); use the server mode [90020-72]
at org.h2.message.Message.getSQLException(Message.java:92)
at org.h2.message.Message.getSQLException(Message.java:96)
at org.h2.message.Message.getSQLException(Message.java:74)
2)使用web控制台
3)tcp方式启动
java -classpath h2.jar org.h2.tools.Server -tcp
java -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092
java -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers
4)tcp方式启动(匿名ssl)
当使用tcp方式启动数据库时,如果需要从外网访问,就必须考虑安全问题,H2官网对SSL方式启动数据库做了非常精要的说明,如下:
Remote SSL/TLS connections are supported using the Java Secure Socket Extension (SSLServerSocket, SSLSocket). By default, anonymous SSL is enabled. The default cipher suite is SSL_DH_anon_WITH_RC4_128_MD5.
To use your own keystore, set the system properties javax.net.ssl.keyStore and javax.net.ssl.keyStorePassword before starting the H2 server and client. See also Customizing the Default Key and Trust Stores, Store Types, and Store Passwords for more information.
To disable anonymous SSL, set the system property h2.enableAnonymousSSL to false.
要使用ssl方式启动数据库,需要使用h2.enableAnonymousSSL和tcpSSL参数,如:
java -Dh2.enableAnonymousSSL=true -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers -tcpSSL
注意,前面的h2.enableAnonymousSSL需要设置到JAVA系统属性里,所以要在前面追加-D。由于默认使用的就是匿名SSL,所以h2.enableAnonymousSSL参数可以省略,也就是说,下面两个命令是等价的:
java -Dh2.enableAnonymousSSL=true -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers -tcpSSL
java -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers -tcpSSL
启动完毕,客户端连接的方式还和原来一样,不过要把url更改为ssl方式,如:
jdbc:h2:ssl://localhost:9092/~/test
5)tcp方式启动(ssl双向认证)
尽管匿名ssl方式启动数据库保证了数据传输的可靠与安全性,但仍然没有解决客户端及服务器身份问题。也就是说,通过上面的方式启动数据库后,任何一个人都可以通过其他机器连接至9092端口,只需要破解数据库密码即可随意操作你的数据库了,这无疑非常危险,所以我们需要更安全的方式。SSL双向认证的原理及细节这里就不再阐述了,我们主要讲解如何使用SSL双向认证的方式启动H2数据库。步骤如下:
a)制作证书
特别说明,以下制作证书的步骤我是参考http://www.blogjava.net/stone2083/archive/2007/12/20/169015.html上的。
我们将使用jdk的keytool制作安全证书,请确保你的JDK已正确安装并且已经设置好环境变量。我的JDK安装在D:\soft\Java\jdk\jdk1.6.0_10目录下,为了简单,我直接在D:\soft\Java\jdk\jdk1.6.0_10\bin目录下运行相关命令,请依次运行:
(1)keytool -genkey -alias serverkey -keystore kserver.keystore
(2)keytool -export -alias serverkey -keystore kserver.keystore -file server.crt
(3)keytool -import -alias serverkey -file server.crt -keystore tclient.keystore
(4)keytool -genkey -alias clientkey -keystore kclient.keystore
(5)keytool -export -alias clientkey -keystore kclient.keystore -file client.crt
(6)keytool -import -alias clientkey -file client.crt -keystore tserver.keystore
为简单其见,凡是需要输入密码的地方都输入123456,凡是需要输入y和n的地方都输入y,这样命令执行成功后会生成以下文件
kserver.keystore
tserver.keystore
server.crt
kclient.keystore
tclient.keystore
client.crt
我们只需要其中的四个就行了,服务器需要使用kserver.keystore、tserver.keystore,客户端使用kclient.keystore、tclient.keystore。
b)启动数据库
如果成功制作了安全证书,那么启动数据库就很简单了,只需要把上一步制作的kserver.keystore、tserver.keystore放在h2.jar同目录下(当然放在别的目录也可以,只要在参数上指定对的路径即可),启动命令如下:
java -Dh2.enableAnonymousSSL=false -Djavax.net.ssl.keyStore=kserver.keystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=tserver.keystore -Djavax.net.ssl.trustStorePassword=123456 -classpath h2.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpAllowOthers -tcpSSL
c)客户端连接
客户端连接时需要对应的kclient.keystore、tclient.keystore,放在h2.jar同一目录下即可,连接命令如下:
java -Djavax.net.ssl.keyStore=kclient.keystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=tclient.keystore -Djavax.net.ssl.trustStorePassword=123456 -classpath h2.jar org.h2.tools.Console -web
如果你连接时出现Connection is broken [90067-72] 90067/90067 (Help)的错误,可能的原因有:
(1)未在启动参数中指明安全证书路径或指明的证书路径错误,或者忘了把证书放在指定的路径下
(2)启动参数中指明的密码错误
(3)连接的URL有误,比如忘了加ssl或者端口号指定错误等等
(4)连接的命令中忘了加-web参数,如果没有加-web,在本机测试时客户端也会占用9092端口,但它发现此端口已经被服务器占用了,就会启动失败,结果程序退出,这样的话IE虽然能打开,但是也会连接不上
3. h2的用户和schema
它同oracle和db2不同,sa可以认为是个实例用户,但与db2和oracle貌似不大一样,原因在于这个test的schame,用sa登陆test之后,可以建立用户,但并不要在上面直接建立schema,不是不能,可以建立,但建完的schema是属于test数据库下的,并不能真正可用,所以必须自行用建立好的用户登陆,这里直接登陆个没有的schema,h2会自动建立出来,然后在这个上面在建立schema。
————————————————
版权声明:本文为CSDN博主「zhoche2008」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhoche2008/article/details/7017767
给大家安利一款免费的在线流程图设计软件:贼好用 ProcessFlow — 免费在线作图、实时协作 ProcessFlow是一个在线作图工具的聚合平台, 它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等, 您无需担心下载和更新的问题, 不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作,解放您的双手,让您腾出双手去成就别人的梦想。