- 浏览: 600394 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
Java内嵌数据库Derby环境配置和使用
Derby数据库是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。由于是用Java实现的,所以可以在任何平台上运行;另外一个特点是体积小,免安装,只需要几个小jar包就可以运行了。jdk1.6和jdk1.7内嵌了Derby数据库,安装在jdk的安装目录下的子
目录db中,以下以jdk1.7为例说明,db目录中有:
1) bin目录,包含了一些工具脚本和设备环境的脚本;
2) lib目录,包含了Derby数据库的jar文件;
一、Derby数据库有两种运行模式:
1) 内嵌模式。Derby数据库与应用程序共享同一个JVM,通常由应用程序负责启动和停止,对除启动它的应用程序外的其它应用程序不可见,即其它应用程序不可访问它;
2) 网络模式。Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用程序来访问同一个Derby数据库。
二、 使用Derby脚本
Derby提供了几个脚本来操作Derby数据库,在使用这些脚本前,你必须先设置好Derby的运行环境。
下面的例子都是在命令行下设置环境变量,这些设置都是临时的,如果你新开一个命令行窗口,则需要重新设置一遍,如果想要使环境变量永久生效,可以在我的电脑中进行设置或写一个.bat文件每次运行。
首先设置好DERBY_HOME这个环境变量,为DERBY_HOME指定你的derby目录,这里用jdk1.7内带的derby,所以,则可以如下设置:
set DERBY_HOME=c:\jdk1.7\db
将DERBY_HOME\bin目录添加到PATH环境变量中:
set path=%DERBY_HOME%\bin;%PATH%
你可以将上面的设置写成一个bat文件: derby.bat
set DERBY_HOME=c:\jdk1.7\db
set path=%DERBY_HOME%\bin;%PATH%
如果你以内嵌模式使用Derby数据库,那么在运行和编译java程序前先运行:
derby.bat和setEmbeddedCP.bat
这样可以简化你稍后在命令行中的输入,否则你每次都必须使用脚本的全路径或者你必须到DERBY_HOME\bin目录中才能执行脚本。最后需要将Derby的jar包添加到classpath环境变量中,在DERBY_HOME%\bin目录中提供了几个脚本用于设置classpath,
以简化你手工在classpath中添加jar包的麻烦:
1) setEmbeddedCP。当使用内嵌模式来运行Derby时,可以使用该脚本来设置。
该脚本将derby.jar和derbytools.jar添加到环境变量中;
2) setNetworkServerCP。当使用网络模式来运行Derby时,用该脚本来设置Derby服务端的classpath变量。
该脚本将derbynet.jar添加到环境变量中;
3) setNetworkClientCP。当使用网络模式来运行Derby时,用该脚本来设置Derby客户端的classpath变量。
该脚本将derbyclient.jar和derbytools.jar添加到环境变量中。
例:使用嵌入式数据库Derby一个基本的例子(建数据库、建表、插入数据、查询)
运行以后输出
ID=1
NAME=hermit
ID=2
NAME=test
在当前目录下会生成一个文件数据库文件夹TESTDB
建立好连接后,其它的数据操作,如查询、更新数据都和其它数据库一样,这里不详述。有一点需要注意,通过Java应用程序访问内嵌模式Derby数据库时,应用程序有责任需要在程序结束时关闭Derby数据库,如上面代码中的
DriverManager.getConnection("jdbc:derby:;shutdown=true");
shutdown参数用于关闭Derby数据库,如果url中指定了数据库名,则只会关闭指定的数据库,而不会关闭整个Derby数据库。
最后看一下jdk1.7中带的演示程序:
源码下载:
Derby数据库是一个纯用Java实现的内存数据库,属于Apache的一个开源项目。由于是用Java实现的,所以可以在任何平台上运行;另外一个特点是体积小,免安装,只需要几个小jar包就可以运行了。jdk1.6和jdk1.7内嵌了Derby数据库,安装在jdk的安装目录下的子
目录db中,以下以jdk1.7为例说明,db目录中有:
1) bin目录,包含了一些工具脚本和设备环境的脚本;
2) lib目录,包含了Derby数据库的jar文件;
一、Derby数据库有两种运行模式:
1) 内嵌模式。Derby数据库与应用程序共享同一个JVM,通常由应用程序负责启动和停止,对除启动它的应用程序外的其它应用程序不可见,即其它应用程序不可访问它;
2) 网络模式。Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用程序来访问同一个Derby数据库。
二、 使用Derby脚本
Derby提供了几个脚本来操作Derby数据库,在使用这些脚本前,你必须先设置好Derby的运行环境。
下面的例子都是在命令行下设置环境变量,这些设置都是临时的,如果你新开一个命令行窗口,则需要重新设置一遍,如果想要使环境变量永久生效,可以在我的电脑中进行设置或写一个.bat文件每次运行。
首先设置好DERBY_HOME这个环境变量,为DERBY_HOME指定你的derby目录,这里用jdk1.7内带的derby,所以,则可以如下设置:
set DERBY_HOME=c:\jdk1.7\db
将DERBY_HOME\bin目录添加到PATH环境变量中:
set path=%DERBY_HOME%\bin;%PATH%
你可以将上面的设置写成一个bat文件: derby.bat
set DERBY_HOME=c:\jdk1.7\db
set path=%DERBY_HOME%\bin;%PATH%
如果你以内嵌模式使用Derby数据库,那么在运行和编译java程序前先运行:
derby.bat和setEmbeddedCP.bat
这样可以简化你稍后在命令行中的输入,否则你每次都必须使用脚本的全路径或者你必须到DERBY_HOME\bin目录中才能执行脚本。最后需要将Derby的jar包添加到classpath环境变量中,在DERBY_HOME%\bin目录中提供了几个脚本用于设置classpath,
以简化你手工在classpath中添加jar包的麻烦:
1) setEmbeddedCP。当使用内嵌模式来运行Derby时,可以使用该脚本来设置。
该脚本将derby.jar和derbytools.jar添加到环境变量中;
2) setNetworkServerCP。当使用网络模式来运行Derby时,用该脚本来设置Derby服务端的classpath变量。
该脚本将derbynet.jar添加到环境变量中;
3) setNetworkClientCP。当使用网络模式来运行Derby时,用该脚本来设置Derby客户端的classpath变量。
该脚本将derbyclient.jar和derbytools.jar添加到环境变量中。
例:使用嵌入式数据库Derby一个基本的例子(建数据库、建表、插入数据、查询)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; import java.util.Properties; public class TestDerbyBaisc { public static void main(String[] args) throws SQLException{ try { Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();//加载驱动 Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//连接数据库 Statement st = conn.createStatement(); st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表 st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,'hermit')");//插入数据 st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,'test')");//插入数据 ResultSet rs = st.executeQuery("select * from USER_INFO");//读取刚插入的数据 while(rs.next()){ int id = rs.getInt(1); String name = rs.getString(2); System.out.println("ID="+id); System.out.println("NAME="+name); } } catch(Exception e){ DriverManager.getConnection("jdbc:derby:;shutdown=true");//关闭数据库 e.printStackTrace(); } } }
运行以后输出
ID=1
NAME=hermit
ID=2
NAME=test
在当前目录下会生成一个文件数据库文件夹TESTDB
建立好连接后,其它的数据操作,如查询、更新数据都和其它数据库一样,这里不详述。有一点需要注意,通过Java应用程序访问内嵌模式Derby数据库时,应用程序有责任需要在程序结束时关闭Derby数据库,如上面代码中的
DriverManager.getConnection("jdbc:derby:;shutdown=true");
shutdown参数用于关闭Derby数据库,如果url中指定了数据库名,则只会关闭指定的数据库,而不会关闭整个Derby数据库。
最后看一下jdk1.7中带的演示程序:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Properties; public class SimpleApp { /* the default framework is embedded*/ private String framework = "embedded"; private String driver = "org.apache.derby.jdbc.EmbeddedDriver"; private String protocol = "jdbc:derby:"; public static void main(String[] args) { new SimpleApp().go(args); System.out.println("SimpleApp finished"); } void go(String[] args) { parseArguments(args); System.out.println("SimpleApp starting in " + framework + " mode"); /* load the desired JDBC driver */ loadDriver(); Connection conn = null; ArrayList statements = new ArrayList(); //list of Statements, PreparedStatements PreparedStatement psInsert = null; PreparedStatement psUpdate = null; Statement s = null; ResultSet rs = null; try { Properties props = new Properties(); // connection properties // providing a user name and password is optional in the embedded // and derbyclient frameworks props.put("user", "user1"); props.put("password", "user1"); String dbName = "derbyDB"; // the name of the database conn = DriverManager.getConnection(protocol + dbName + ";create=true", props); System.out.println("Connected to and created database " + dbName); // We want to control transactions manually. Autocommit is on by // default in JDBC. conn.setAutoCommit(false); /* Creating a statement object that we can use for running various * SQL statements commands against the database.*/ s = conn.createStatement(); statements.add(s); // We create a table... s.execute("create table location(num int, addr varchar(40))"); System.out.println("Created table location"); // and add a few rows... // parameter 1 is num (int), parameter 2 is addr (varchar) psInsert = conn.prepareStatement( "insert into location values (?, ?)"); statements.add(psInsert); psInsert.setInt(1, 1956); psInsert.setString(2, "Webster St."); psInsert.executeUpdate(); System.out.println("Inserted 1956 Webster"); psInsert.setInt(1, 1910); psInsert.setString(2, "Union St."); psInsert.executeUpdate(); System.out.println("Inserted 1910 Union"); // Let's update some rows as well... // parameter 1 and 3 are num (int), parameter 2 is addr (varchar) psUpdate = conn.prepareStatement( "update location set num=?, addr=? where num=?"); statements.add(psUpdate); psUpdate.setInt(1, 180); psUpdate.setString(2, "Grand Ave."); psUpdate.setInt(3, 1956); psUpdate.executeUpdate(); System.out.println("Updated 1956 Webster to 180 Grand"); psUpdate.setInt(1, 300); psUpdate.setString(2, "Lakeshore Ave."); psUpdate.setInt(3, 180); psUpdate.executeUpdate(); System.out.println("Updated 180 Grand to 300 Lakeshore"); /* We select the rows and verify the results. */ rs = s.executeQuery( "SELECT num, addr FROM location ORDER BY num"); int number; // street number retrieved from the database boolean failure = false; if (!rs.next()) { failure = true; reportFailure("No rows in ResultSet"); } if ((number = rs.getInt(1)) != 300) { failure = true; reportFailure("Wrong row returned, expected num=300, got " + number); } if (!rs.next()) { failure = true; reportFailure("Too few rows"); } if ((number = rs.getInt(1)) != 1910) { failure = true; reportFailure("Wrong row returned, expected num=1910, got " + number); } if (rs.next()) { failure = true; reportFailure("Too many rows"); } if (!failure) { System.out.println("Verified the rows"); } // delete the table s.execute("drop table location"); System.out.println("Dropped table location"); /* We commit the transaction. Any changes will be persisted to the database now. */ conn.commit(); System.out.println("Committed the transaction"); if (framework.equals("embedded")) { try { // the shutdown=true attribute shuts down Derby DriverManager.getConnection("jdbc:derby:;shutdown=true"); // To shut down a specific database only, but keep the // engine running (for example for connecting to other // databases), specify a database in the connection URL: //DriverManager.getConnection("jdbc:derby:" + dbName + ";shutdown=true"); } catch (SQLException se)//关闭数据库时会产生异常 { if (( (se.getErrorCode() == 50000) && ("XJ015".equals(se.getSQLState()) ))) {//这是正常关闭 // we got the expected exception System.out.println("Derby shut down normally"); // Note that for single database shutdown, the expected // SQL state is "08006", and the error code is 45000. } else { // if the error code or SQLState is different, we have // an unexpected exception (shutdown failed) System.err.println("Derby did not shut down normally"); printSQLException(se); } } } } catch (SQLException sqle) { printSQLException(sqle); } finally { // release all open resources to avoid unnecessary memory usage // ResultSet try { if (rs != null) { rs.close(); rs = null; } } catch (SQLException sqle) { printSQLException(sqle); } // Statements and PreparedStatements int i = 0; while (!statements.isEmpty()) { // PreparedStatement extend Statement Statement st = (Statement)statements.remove(i); try { if (st != null) { st.close(); st = null; } } catch (SQLException sqle) { printSQLException(sqle); } } //Connection try { if (conn != null) { conn.close(); conn = null; } } catch (SQLException sqle) { printSQLException(sqle); } } } private void loadDriver() { try { Class.forName(driver).newInstance(); System.out.println("Loaded the appropriate driver"); } catch (ClassNotFoundException cnfe) { System.err.println("\nUnable to load the JDBC driver " + driver); System.err.println("Please check your CLASSPATH."); cnfe.printStackTrace(System.err); } catch (InstantiationException ie) { System.err.println( "\nUnable to instantiate the JDBC driver " + driver); ie.printStackTrace(System.err); } catch (IllegalAccessException iae) { System.err.println( "\nNot allowed to access the JDBC driver " + driver); iae.printStackTrace(System.err); } } /** * Reports a data verification failure to System.err with the given message. * * @param message A message describing what failed. */ private void reportFailure(String message) { System.err.println("\nData verification failed:"); System.err.println('\t' + message); } /** * Prints details of an SQLException chain to <code>System.err</code>. * Details included are SQL State, Error code, Exception message. * * @param e the SQLException from which to print details. */ public static void printSQLException(SQLException e) { // Unwraps the entire exception chain to unveil the real cause of the // Exception. while (e != null) { System.err.println("\n----- SQLException -----"); System.err.println(" SQL State: " + e.getSQLState()); System.err.println(" Error Code: " + e.getErrorCode()); System.err.println(" Message: " + e.getMessage()); // for stack traces, refer to derby.log or uncomment this: //e.printStackTrace(System.err); e = e.getNextException(); } } private void parseArguments(String[] args) { if (args.length > 0) { if (args[0].equalsIgnoreCase("derbyclient")) { framework = "derbyclient"; driver = "org.apache.derby.jdbc.ClientDriver"; protocol = "jdbc:derby://localhost:1527/"; } } } } 程序运行: D:\db>java SimpleApp SimpleApp starting in embedded mode Loaded the appropriate driver Connected to and created database derbyDB Created table location Inserted 1956 Webster Inserted 1910 Union Updated 1956 Webster to 180 Grand Updated 180 Grand to 300 Lakeshore Verified the rows Dropped table location Committed the transaction Derby shut down normally SimpleApp finished
源码下载:
- db.zip (3.6 KB)
- 下载次数: 15
发表评论
-
java中计算对数
2013-01-18 09:01 2053从 Java 1.0 开始,Math 类有了一个自然对数。 ... -
学习笔记:三数组实现的HashMap
2012-12-18 11:02 1613网上的一个HashMap代码,用三个数组实现,不同于jdk ... -
你清楚Arrays.binarySearch()方法的返回值吗?
2012-12-13 22:19 4788今天遇到了一个关于Arra ... -
学习使用jdk1.7中内置数据库Derby(三)
2012-11-16 14:46 2048继续上文:学习使用jdk1.7中内置数据库Derby(二)ht ... -
学习使用jdk1.7中内置数据库Derby(二)
2012-11-15 20:35 1657继续上文"学习使用jdk1.7中内置数据库De ... -
哈夫曼压缩与解压缩学习笔记(三)
2012-10-29 07:27 1695继续前文"哈夫曼压缩与解压缩学习笔记(二)" ... -
哈夫曼压缩与解压缩学习笔记(二)
2012-10-28 12:56 1886继续前文"哈夫曼压缩与解压缩学习笔记(一)" ... -
哈夫曼压缩与解压缩学习笔记(一)
2012-10-28 09:47 3063前言 看了两个哈夫曼压缩程序,学习了一把,选一个压缩和解 ...
相关推荐
在"学习使用jdk1.7中内置数据库Derby(三)"这篇博文中,我们可能涉及以下关键知识点: 1. **安装与配置**:首先,我们需要下载并安装Apache Derby,将其添加到Java的类路径中。可以通过Apache官方网站获取最新版本的...
8. **db**:可能包含JavaDB(Derby),这是一个轻量级的关系型数据库管理系统,有时作为Java应用的内置数据库使用。 9. **include**:这个目录包含了用于本地方法接口的头文件,使得用C或C++编写与Java交互的本地...
- **嵌入式数据库 Derby**:提供了内置的数据库支持。 - **Web 服务元数据**:增加了对 Web 服务元数据的支持。 - **JTable 的排序和过滤**:提高了表格控件的灵活性。 - **更强大更简单的 JAX-WS**:提供了更高级别...
- **4.2.2 连接到MyEclipse Derby数据库:** 如何建立与内置Derby数据库的连接。 - **4.2.3 切换到MyEclipse Database Explorer透视图:** 如何在Eclipse中切换到相应的透视图。 - **4.2.4 打开数据库连接:** 如何...
- **连接到 MyEclipse Derby 数据库:** 如何建立与内置 Derby 数据库的连接。 - **切换到 MyEclipse Database Explorer 透视图:** 转换到专门用于数据库管理的工作界面。 - **打开数据库资源:** 探索数据库资源,如...
介绍了如何在项目中使用外部文件。 - **3.2.21 安装插件** 说明了如何安装和管理Eclipse插件。 - **3.2.22 获取帮助和阅读帮助文档** 指导如何访问Eclipse的帮助系统。 - **3.2.23 CVS团队源代码管理** ...
通过本手册的学习,您将能够掌握使用 MyEclipse 6 进行 Java EE 开发的基本技能,包括环境搭建、基础编程、IDE 使用以及数据库管理等方面的知识。这对于从事 Java EE 开发工作的人员来说是非常重要的。