javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK60里面带的这个Derby的版本是 10217,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 40规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行
1、本身没有 *** 作界面,可以用第三方工具来管理(也就是你说的 *** 作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。
2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。
3、下面是个使用derby的简单例子:
首先导入JAR包:derbyjar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到
然后就要创建数据库了:
代码
private Connection getConnection() throws SQLException {
Connection connection = DriverManager
getConnection("jdbc:derby:userDB;create=true;user=test;password=test");
connectionsetAutoCommit(false);
return connection;
}
其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test;密码password=test连接数据库
有了数据库,接下来该建表了:
代码
private void createTable(Connection connection) throws SQLException {
Statement statement = connectioncreateStatement();
String sql = "create table USERS("
+ " ID BIGINT not null generated by default as identity,"
+ " USER_NAME VARCHAR(20) not null,"
+ " PASSWORD VARCHAR(20),"
+ " constraint P_KEY_1 primary key (ID))";
statementexecute(sql);
sql = "create unique index USER_NAME_INDEX on USERS ("
+ " USER_NAME ASC)";
statementexecute(sql);
statementclose();
}
创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,
GENERATED BY ALWAYS AS IDENTITY
GENERATED BY DEFAULT AS IDENTITY
By always和by default是说明生成这个IDENTITY的方式。
By always是完全由系统自动生成。
by default是可以由用户来指定一个值。
编写与USERS表对应的javabean(这个就不多说了),:
代码
public class User implements Serializable {
/
/
private static final long serialVersionUID = 1L;
private Long id;
private String userName;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
thisid = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
thisuserName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
}
接下来就可以就数据库进行增删改查的 *** 作了:
插入数据:
代码
private void create(User user) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("insert into users (user_name,password) values(,)");
int index = 1;
statementsetString(index++, usergetUserName());
statementsetString(index++, usergetPassword());
statementexecute();
usersetId(thisgetId(connection));
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
代码
private Long getId(Connection connection) throws SQLException {
CallableStatement callableStatement = connection
prepareCall("values identity_val_local()");
ResultSet resultSet = callableStatementexecuteQuery();
resultSetnext();
Long id = resultSetgetLong(1);
resultSetclose();
callableStatementclose();
return id;
}
getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值感觉还是有点想sequence的curr_val
修改数据:
代码
private void update(User user) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("update users set user_name=,password= where id=");
int index = 1;
statementsetString(index++, usergetUserName());
statementsetString(index++, usergetPassword());
statementsetLong(index++, usergetId());
statementexecute();
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
删除数据:
代码
public void delete(Long id) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("delete from users where id=");
statementsetLong(1, id);
statementexecute();
connectioncommit();
} catch (SQLException e) {
rollback(connection);
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
查询数据:
代码
public User findById(Long id) {
Connection connection = null;
try {
connection = thisgetConnection();
PreparedStatement statement = connection
prepareStatement("select user_name,password from users where id=");
statementsetLong(1, id);
ResultSet resultSet = statementexecuteQuery();
User user = null;
if (resultSetnext()) {
user = new User();
usersetId(id);
usersetUserName(resultSetgetString("user_name"));
usersetPassword(resultSetgetString("password"));
}
resultSetclose();
statementclose();
connectioncommit();
return user;
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (connection != null) {
close(connection);
}
}
}
错误769:无法连接到指定目标。
问题:这是指你电脑的网络设备有问题
解决方法:
打开“我的电脑”→“控制面版”→“网络连接”,查看本地连接的是否处在
“禁用”状态,是的话只需双击本地连接,看到状态变为“已启用”即可。若是连本地连接都没有的话,
那你的网卡100%有问题了——不是没装好就是坏了。请您联系您的电脑供应商,或者自己解决。
出现错误769的错误,大多数是网卡被禁用,启用即可!造成的原因一般为:用户的误 *** 作或一些防火墙软件、计算机病毒引起的,很普遍。如果没有找到本地连接,一般是网卡的驱动程序丢了或计算机没有检测到网卡,可以重新安装即可
我在酷影模式看片也不忘记回答楼主的问题,楼主你就采纳我吧
derby数据库可视化 *** 作工具,该怎么解决
浅谈一下Cognos处理大数据的思路,仅针对1021以下的版本,对于1021当中引入的hadloop等分布式数据仓库等不做介绍。我们主要从一个一般中等项目当中,用怎样的思路来优化我们的查询。
我们主要从3个思路来思考大数据的处理
一、数据库层次
现在主流的Cognos项目,主要的开发模式还是基于rolap的dmr报表建模。因此,数据库的优化就显得由为重要。主要通过以下几个方面优化我们的数据库:
(1)维度id,维度层次id等关键减缩字段建立索引建立、维护。
(2)根据数据量的大小,按时间等进行分区优化。
(3)高速缓冲表MQT的使用
(4)表空间、缓冲池设置等
(5)数据库性能优化
二、Cognos Server优化
Cognos优化包括对配置文件的优化,集群的搭建,服务和日志的开启等基于cognos 软件安装,配置的优化,主要包括以下几个方面:
21 apache 配置优化
Timeout(超时)/MaxKeepAliveRequests(最大的请求数)/KeepAliveTimeout(请求超时)的优化配置
22Cognos自带tomcat配置调优
(1)可修改TOMCAT配置文件CRN_ROOT\tomcat\conf\serverxml。其参数集中在行:
可以对maxProcessors(最大进程数)/AcceptCount(最大连接数) ConnectionTimeout(连接超时)进行修改
(2)文件路径:CRN_ROOT\tomcat\conf\webxml
可以对session-timeout进行修改
如何把derby数据库转换为mysql
RENAMEDATABASEdb_nameTOnew_db_name
这个。。这个语法在mysql517中被添加进来,到了5123又去掉了。
据说有可能丢失数据。还是不要用的好。
选择开始菜单中→程序→Management SQL Server 2008→SQL Server Management Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。
在对象资源管理器窗口中展开服务器,然后选择数据库节点
右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。
执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,
在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。
在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。
切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
切换到文件组页,在这里可以添加或删除文件组。
完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。
新安装了 JDK 6 的程序员们也许会发现,除了传统的 bin、jre 等目录,JDK 6 新增了一个名为 db 的目录。这便是 Java 6 的新成员:Java DB。这是一个纯 Java 实现、开源的数据库管理系统(DBMS),源于 Apache 软件基金会(ASF)名下的项目 Derby。它只有 2MB 大小,对比动辄上 G 的数据库来说可谓袖珍。但这并不妨碍 Derby 功能齐备,支持几乎大部分的数据库应用所需要的特性。更难能可贵的是,依托于 ASF 强大的社区力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界优秀程序员们的支持。这也难怪 Sun 公司会选择其 1022 版本纳入到 JDK 6 中,作为内嵌的数据库。这就好像为 JDK 注入了一股全新的活力:Java 程序员不再需要耗费大量精力安装和配置数据库,就能进行安全、易用、标准、并且免费的数据库编程。在这一章中,我们将初窥 Java DB 的世界,来探究如何使用它编写出功能丰富的程序。
Hello, Java DB:内嵌模式的 Derby
既然有了内嵌(embedded)的数据库,就让我们从一个简单的范例开始,试着使用它吧。这个程序做了大多数数据库应用都可能会做的 *** 作:在 DBMS 中创建了一个名为 helloDB 的数据库;创建了一张数据表,取名为 hellotable;向表内插入了两条数据;然后,查询数据并将结果打印在控制台上;最后,删除表和数据库,释放资源。
public class HelloJavaDB {
public static void main(String[] args) {
try { // load the driver
ClassforName("orgapachederbyjdbcEmbeddedDriver")newInstance();
Systemoutprintln("Load the embedded driver");
Connection conn = null;
Properties props = new Properties();
propsput("user", "user1"); propsput("password", "user1");
//create and connect the database named helloDB
conn=DriverManagergetConnection("jdbc:derby:helloDB;create=true", props);
Systemoutprintln("create and connect to helloDB");
connsetAutoCommit(false);
// create a table and insert two records
Statement s = conncreateStatement();
sexecute("create table hellotable(name varchar(40), score int)");
Systemoutprintln("Created table hellotable");
sexecute("insert into hellotable values('Ruth Cao', 86)");
sexecute("insert into hellotable values ('Flora Shi', 92)");
// list the two records
ResultSet rs = sexecuteQuery(
"SELECT name, score FROM hellotable ORDER BY score");
Systemoutprintln("namettscore");
while(rsnext()) {
StringBuilder builder = new StringBuilder(rsgetString(1));
builderappend("t");
builderappend(rsgetInt(2));
Systemoutprintln(buildertoString());
}
// delete the table
sexecute("drop table hellotable");
Systemoutprintln("Dropped table hellotable");
rsclose();
sclose();
Systemoutprintln("Closed result set and statement");
conncommit();
connclose();
Systemoutprintln("Committed transaction and closed connection");
try { // perform a clean shutdown
DriverManagergetConnection("jdbc:derby:;shutdown=true");
} catch (SQLException se) {
Systemoutprintln("Database shut down normally");
}
} catch (Throwable e) {
// handle the exception
}
Systemoutprintln("SimpleApp finished");
}
}
随后,我们在命令行(本例为 Windows 平台,当然,其它系统下稍作改动即可)下键入以下命令:
清单 2 运行 HelloJavaDB 命令
java –cp ;%JAVA_HOME%dblibderbyjar HelloJavaDB
图 1 HelloJavaDB 程序的执行结果
上述的程序和以往没什么区别。不同的是我们不需要再为 DBMS 的配置而劳神,因为 Derby 已经自动地在当前目录下新建了一个名为 helloDB 的目录,来物理地存储数据和日志。需要做的只是注意命名问题:在内嵌模式下驱动的名字应为 orgapachederbyjdbcEmbeddedDriver;创建一个新数据库时需要在协议后加入 create=true。另外,关闭所有数据库以及 Derby 的引擎可以使用以下代码:
清单 3 关闭所有数据库及 Derby 引擎
DriverManagergetConnection("jdbc:derby:;shutdown=true");
如果只想关闭一个数据库,那么则可以调用:
清单 4 关闭一个数据库
DriverManagergetConnection("jdbc:derby:helloDB;shutdown=true ");
这样,使用嵌入模式的 Derby 维护和管理数据库的成本接近于 0。这对于希望专心写代码的人来说不失为一个好消息。然而有人不禁要问:既然有了内嵌模式,为什么大多数的 DBMS 都没有采取这样的模式呢?不妨做一个小实验。当我们同时在两个命令行窗口下运行 HelloJavaDB 程序。结果一个的结果与刚才一致,而另一个却出现了错误,如 图 2 所示。
图 2 内嵌模式的局限
错误的原因其实很简单:在使用内嵌模式时,Derby 本身并不会在一个独立的进程中,而是和应用程序一起在同一个 Java 虚拟机(JVM)里运行。因此,Derby 如同应用所使用的其它 jar 文件一样变成了应用的一部分。这就不难理解为什么在 classpath 中加入 derby 的 jar 文件,我们的示例程序就能够顺利运行了。这也说明了只有一个 JVM 能够启动数据库:而两个跑在不同 JVM 实例里的应用自然就不能够访问同一个数据库了。
鉴于上述的局限性,和来自不同 JVM 的多个连接想访问一个数据库的需求,下一节将介绍 Derby 的另一种模式:网络服务器(Network Server)。
网络服务器模式
如上所述,网络服务器模式是一种更为传统的客户端/服务器模式。我们需要启动一个 Derby 的网络服务器用于处理客户端的请求,不论这些请求是来自同一个 JVM 实例,还是来自于网络上的另一台机器。同时,客户端使用 DRDA(Distributed Relational Database Architecture)协议连接到服务器端。这是一个由 The Open Group 倡导的数据库交互标准。图 3 说明了该模式的大体结构。
由于 Derby 的开发者们努力使得网络服务器模式与内嵌模式之间的差异变小,使得我们只需简单地修改 清单 1 中的程序就可以实现。如清单 5所示,我们在 HelloJavaDB 中增添了一个新的函数和一些字符串变量。不难看出,新的代码只是将一些在上一节中特别指出的字符串进行了更改:驱动类为 orgapachederbyjdbcClientDriver,而连接数据库的协议则变成了 jdbc:derby://localhost:1527/。这是一个类似 URL 的字符串,而事实上,Derby 网络的客户端的连接格式为:jdbc:derby://server[:port] /databaseName[;attributeKey=value]。在这个例子中,我们使用了最简单的本地机器作为服务器,而端口则是 Derby 默认的 1527 端口。
图 3 Derby 网络服务器模式架构
清单 5 网络服务器模式下的 HelloJavaDB
public class HelloJavaDB {
public static String driver = "orgapachederbyjdbcEmbeddedDriver";
public static String protocol = "jdbc:derby:";
public static void main(String[] args) {
// same as before
}
private static void parseArguments(String[] args) {
if (argslength == 0 || argslength > 1) {
return;
}
if (args[0]equalsIgnoreCase("derbyclient")) {
framework = "derbyclient";
driver = "orgapachederbyjdbcClientDriver";
protocol = "jdbc:derby://localhost:1527/";
}
}
}
当然,仅仅有客户端是不够的,我们还需要启动网络服务器。Derby 中控制网络服务器的类是 orgapachederbydrdaNetworkServerControl,因此键入以下命令即可。如果想了解 NetworkServerControl 更多的选项,只要把 start 参数去掉就可以看到帮助信息了。关于网络服务器端的实现,都被 Derby 包含在 derbynetjar 里。
清单 6 启动网络服务器
java -cp ;"C:Program FilesJavajdk160dblibderbyjar";
"C:Program FilesJavajdk160dblibderbynetjar"
orgapachederbydrdaNetworkServerControl start
相对应的,网络客户端的实现被包含在 derbyclientjar 中。所以,只需要在 classpath 中加入该 jar 文件,修改后的客户端就可以顺利地读取数据了。再一次尝试着使用两个命令行窗口去连接数据库,就能够得到正确的结果了。如果不再需要服务器,那么使用 NetworkServerControl 的 shutdown 参数就能够关闭服务器。
更多
至此,文章介绍了 Java SE 6 中的新成员:Java DB(Derby),也介绍了如何在内嵌模式以及网络服务器模式下使用 Java DB。当然这只是浅尝辄止,更多高级的选项还需要在 Sun 和 Derby 的文档中寻找。在这一章的最后,我们将简单介绍几个 Java DB 的小工具来加快开发速度。它们都位于 orgapachederbytools 包内,在开发过程中需要获取信息或者测试可以用到。
• ij:一个用来运行 SQL 脚本的工具;
• dblook:为 Derby 数据库作模式提取(Schema extraction),生成 DDL 的工具;
• sysinfo:显示系统以及 Derby 信息的工具类;
以上就是关于JavaDB的一些问题全部的内容,包括:JavaDB的一些问题、连Derby数据库总是XJ040错误,各位看是什么原因、derby数据库可视化 *** 作工具,该怎么解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)