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);
}
}
}
不会有问题,现在BBS很多都是一张表存上万条,用SQL SERVER都行,更何况ORACLE了。查询的性能问题不是你的语言决定的,而是数据库决定的。数据库本身建立了索引,不会线性的去找,速度非常快的,所以没必要分开检索
以上就是关于javaDB数据库问题全部的内容,包括:javaDB数据库问题、Java对数据库(Oracle)大量查询性能问题,达人指教!!!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)