导入相应jar包,我是直接在derby官网下载压缩包后解压后把 lib文件夹下的jar包全导入到项目中了,然后就可以在项目中直接使用
package db;
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import javax.sql.*;
import java.sql.*;
import org.apache.derby.jdbc.EmbeddedDataSource;
/**
* A container for the singleton data source, so we don't have to
* create a separate one for each class that wants to do JDBC
*/
public class DatabaseManager {
private static EmbeddedDataSource ds;
public static String REQUESTS_TABLE = "APP.REQUESTS";
public static String EVENTS_TABLE = "APP.EVENTS";
// We want to keep the same connection for a given thread
// as long as we're in the same transaction
private static ThreadLocal<Connection> tranConnection = new ThreadLocal();
private static void initDataSource(String dbname, String user,
String password) {
ds = new EmbeddedDataSource();
ds.setDatabaseName(dbname);
ds.setUser(user);
ds.setPassword(password);
ds.setCreateDatabase("create");
}
public static void logSql() throws Exception {
executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.language.logStatementText', 'true')");
}
public static synchronized void beginTransaction() throws Exception {
if ( tranConnection.get() != null ) {
throw new Exception("This thread is already in a transaction");
}
Connection conn = getConnection();
conn.setAutoCommit(false);
tranConnection.set(conn);
}
public static void commitTransaction() throws Exception {
if ( tranConnection.get() == null ) {
throw new Exception("Can't commit: this thread isn't currently in a " +
"transaction");
}
tranConnection.get().commit();
tranConnection.set(null);
}
public static void rollbackTransaction() throws Exception {
if ( tranConnection.get() == null ) {
throw new Exception("Can't rollback: this thread isn't currently in a " +
"transaction");
}
tranConnection.get().rollback();
tranConnection.set(null);
}
/** get a connection */
public static Connection getConnection() throws Exception {
if ( tranConnection.get() != null ) {
return tranConnection.get();
} else {
return ds.getConnection();
}
}
public static void releaseConnection(Connection conn) throws Exception {
// We don't close the connection while we're in a transaction,
// as it needs to be used by others in the same transaction context
if ( tranConnection.get() == null ) {
conn.close();
}
}
public static void initDatabase(String dbname, String user, String password,
boolean dropTables)
throws Exception {
initDataSource(dbname, user, password);
if ( dropTables ) {
dropTables();
}
// Assumption: if the requests table doesn't exist, none of the
// tables exists. Avoids multiple queries to the database
if ( ! tableExists("REQUESTS") ) {
createTables();
}
}
private static boolean tableExists(String tablename) throws Exception {
Connection conn = getConnection();
ResultSet rs;
boolean exists;
try {
DatabaseMetaData md = conn.getMetaData();
rs = md.getTables(null, "APP", tablename, null);
exists = rs.next();
} finally {
releaseConnection(conn);
}
return exists;
}
private static void createTables() throws Exception {
System.out.println("Creating tables");
executeUpdate(
"CREATE TABLE " + REQUESTS_TABLE + "(" +
"sequence_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, " +
"request_type INTEGER, " +
"event_id VARCHAR(300), " +
"date VARCHAR(20), " +
"title VARCHAR(300), " +
"edit_url VARCHAR(300))");
executeUpdate(
"CREATE TABLE " + EVENTS_TABLE + "(" +
"event_id VARCHAR(300) PRIMARY KEY, " +
"date VARCHAR(20), " +
"title VARCHAR(300), " +
"edit_url VARCHAR(300), " +
"version_id VARCHAR(300))");
}
/**
* Drop the tables. Used mostly for unit testing, to get back
* to a clean state
*/
public static void dropTables() throws Exception {
try {
executeUpdate("DROP TABLE " + REQUESTS_TABLE);
} catch ( SQLException sqle ) {
if (! tableDoesntExist(sqle.getSQLState())) {
throw sqle;
}
}
try {
executeUpdate("DROP TABLE " + EVENTS_TABLE);
} catch ( SQLException sqle ) {
if (! tableDoesntExist(sqle.getSQLState())) {
throw sqle;
}
}
}
private static boolean tableDoesntExist(String sqlState) {
return sqlState.equals("42X05") ||
sqlState.equals("42Y55");
}
/**
* Clean out the tables
*/
public static void clearTables() throws Exception {
Connection conn = getConnection();
try {
executeUpdate("DELETE FROM " + REQUESTS_TABLE);
executeUpdate("DELETE FROM " + EVENTS_TABLE);
} finally {
releaseConnection(conn);
}
}
/**
* Helper wrapper around boilerplate JDBC code. Execute a statement
* that doesn't return results using a PreparedStatment, and returns
* the number of rows affected
*/
public static int executeUpdate(String statement)
throws Exception {
Connection conn = getConnection();
try {
PreparedStatement ps = conn.prepareStatement(statement);
return ps.executeUpdate();
} finally {
releaseConnection(conn);
}
}
/**
* Helper wrapper around boilerplat JDBC code. Execute a statement
* that returns results using a PreparedStatement that takes no
* parameters (you're on your own if you're binding parameters).
*
* @return the results from the query
*/
public static ResultSet executeQueryNoParams(Connection conn,
String statement) throws Exception {
PreparedStatement ps = conn.prepareStatement(statement);
return ps.executeQuery();
}
public static void main(String[] args) throws Exception{
initDataSource("test1","app","app");
logSql();
Connection conn = getConnection() ;
PreparedStatement ps = conn.prepareStatement("select * from T ") ;
ResultSet st = ps.executeQuery() ;
while(st.next()){
System.out.println(st.getString(1));
}
conn.close() ;
}
}
分享到:
相关推荐
Derby数据库是一种嵌入式关系数据库管理系统,可以嵌入到Java应用程序中,提供了一个轻量级、可靠的数据库解决方案。 连接Derby数据库方法 1. 使用Database模式 在Eclipse中,可以使用Database模式来连接Derby...
在嵌入式模式中,Derby数据库引擎与应用程序共同存在于同一JVM内,这使得开发过程中可以省略掉安装数据库管理系统(DBMS)软件和配置连接等步骤。相比于传统的JDBC连接模型,Derby的嵌入式工作模型更简化了应用程序...
1. **安装与配置**:Derby数据库可以作为Java类库嵌入到Java应用中,无需独立服务器。只需将derby.jar和derbyclient.jar添加到项目的类路径中即可开始使用。 2. **连接数据库**:使用JDBC(Java Database ...
3. **嵌入式数据库**:Derby可以被直接嵌入到Java应用程序中,作为一个类库运行,无需独立服务器进程。这对于开发简单应用或者进行快速原型开发非常方便。 4. **网络模式**:除了嵌入式模式,Derby还支持网络模式,...
这篇文档将深入探讨如何在Spring Boot项目中集成和使用Apache Derby数据库。 首先,我们需要理解Spring Boot对数据库的支持。Spring Boot通过自动配置特性,可以轻松地与多种数据库进行交互,包括MySQL、PostgreSQL...
2. 嵌入式模式:Derby可以作为应用程序的一部分嵌入到应用中去运行,无需单独的服务器进程。 3. 网络服务器模式:Derby也可以作为独立的网络服务器运行,支持标准的JDBC和SQL访问。 4. ACID事务支持:Derby支持事务...
(4)初始化 Derby 数据库,新建 hive-site.xml 文件,并编辑配置信息,包括数据库连接 URL、驱动程序名称、元数据存储目录等信息。 知识点 4: Hive 配置文件 Hive 配置文件主要包括 hive-env.sh 和 hive-site.xml ...
在"JavaSwing+derby通讯录源码"中,lib目录下应该有Apache Derby的驱动程序,这些驱动是Java应用程序连接到Derby数据库的桥梁。开发者在程序中通过Class.forName()方法加载这些驱动,然后使用JDBC API建立数据库连接...
在这种模式下,Derby数据库随着Java应用程序的启动而启动,并随着应用程序的停止而关闭。 网络服务器模式下,Derby以传统的客户端-服务器方式运行,其中Derby嵌入在服务器系统中,客户端应用程序可以位于同一系统内...
3. **嵌入式与网络模式**: Derby可以作为嵌入式数据库直接运行在应用程序内部,无需额外的服务器进程。同时,它也支持网络模式,允许多个客户端连接到同一数据库实例。 4. **JDBC驱动**: 提供了Type 4 JDBC驱动,...
嵌入式数据库是一种小型的数据库管理系统,常被嵌入到应用程序中,使得数据处理更加轻量级和本地化。相比大型数据库系统,嵌入式数据库具备便携、操作简便、结构紧凑等特点,不需要复杂的配置和安装过程。它们广泛...
Derby UI Plugin 1.1.2 是一个专门为Java开发者设计的工具,它将Apache Derby数据库集成到了Eclipse IDE中,提供了用户友好的图形界面,使得数据库管理变得更加便捷。Apache Derby,也被称为Java DB,是Oracle公司...
DerbyTest.zip是一个关于Apache Derby数据库的入门教程资源包,包含两个示例和相关的说明文档。Apache Derby是一款轻量级、开源的关系型数据库系统,它由Java编写,因此可以轻松地嵌入到Java应用程序中。这个教程将...
它不仅可以作为独立的服务器模式运行,也可以嵌入到Java应用程序中,无需额外的数据库服务器进程。Derby Core Plugin则进一步扩展了这些功能,可能包括性能提升、新的API、安全特性或者对特定数据库操作的优化。 在...
它被设计为易于管理和嵌入到应用程序中,既可以作为内嵌式数据库运行,也可以通过网络服务器模式独立运行。Derby 的小巧体积和简单的部署方式使得它成为小型应用程序、桌面应用和开发测试的理想选择。 Derby 的核心...
1. **嵌入式环境**:在该模式下,Derby 数据库作为 Java 应用程序的一部分直接运行在同一 JVM 内。这种模式适用于那些不需要网络访问数据库的应用场景。 2. **客户端/服务器环境**:在这种情况下,Derby 数据库...
Derby数据库支持众多功能,包括但不限于数据定义语言(DDL)、数据操纵语言(DML)、事务处理、并发控制、存储过程、触发器以及存储对象等。对于开发者而言,Apache Derby提供了一个丰富的编程接口,可以在Java环境...
这个“db-derby-10.6.2.1”版本代表着Derby数据库的一个特定发行版,发布于2009年,版本号10.6.2.1。它主要被设计为轻量级、嵌入式数据库,适合于Java应用程序和开发者使用。 Derby的核心特性包括: 1. **零配置**...
- **应用场景**:适合于需要 Java 集成的应用场景,特别是对于那些希望将数据库作为应用程序的一部分嵌入的开发者来说尤为有用。 #### H2 - **官方网站**:http://www.h2database.com - **简介**:H2 是一个用纯 ...
本项目“ShopDemo.zip”便是一个基于JavaWeb的示例,它巧妙地结合了Derby数据库、Servlet以及JSP,实现了数据工程化的实践应用。通过这个案例,我们可以深入理解如何在实际开发中构建一个简单的电子商务系统。 首先...