小型java数据库程序使用什么数据库较好

小型java数据库程序使用什么数据库较好,第1张

小型数据库当然要使用sqlite

SQLite,是一款轻型的关系型数据库,它占用资源非常的低

或者使用Redis

这是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,

javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK6.0里面带的这个Derby的版本是 10.2.1.7,支持存储过程和触发器有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上.值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 4.0规范(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包:derby.jar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到.

然后就要创建数据库了:

代码

private Connection getConnection() throws SQLException {

Connection connection = DriverManager

.getConnection("jdbc:derby:userDBcreate=trueuser=testpassword=test")

connection.setAutoCommit(false)

return connection

}

其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test密码password=test连接数据库.

有了数据库,接下来该建表了:

代码

private void createTable(Connection connection) throws SQLException {

Statement statement = connection.createStatement()

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))"

statement.execute(sql)

sql = "create unique index USER_NAME_INDEX on USERS ("

+ " USER_NAME ASC)"

statement.execute(sql)

statement.close()

}

创建了 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) {

this.id = id

}

public String getUserName() {

return userName

}

public void setUserName(String userName) {

this.userName = userName

}

public String getPassword() {

return password

}

public void setPassword(String password) {

this.password = password

}

}

接下来就可以就数据库进行增删改查的 *** 作了:

插入数据:

代码

private void create(User user) {

Connection connection = null

try {

connection = this.getConnection()

PreparedStatement statement = connection

.prepareStatement("insert into users (user_name,password) values(?,?)")

int index = 1

statement.setString(index++, user.getUserName())

statement.setString(index++, user.getPassword())

statement.execute()

user.setId(this.getId(connection))

connection.commit()

} 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 = callableStatement.executeQuery()

resultSet.next()

Long id = resultSet.getLong(1)

resultSet.close()

callableStatement.close()

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 = this.getConnection()

PreparedStatement statement = connection

.prepareStatement("update users set user_name=?,password=? where id=?")

int index = 1

statement.setString(index++, user.getUserName())

statement.setString(index++, user.getPassword())

statement.setLong(index++, user.getId())

statement.execute()

connection.commit()

} 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 = this.getConnection()

PreparedStatement statement = connection

.prepareStatement("delete from users where id=?")

statement.setLong(1, id)

statement.execute()

connection.commit()

} 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 = this.getConnection()

PreparedStatement statement = connection

.prepareStatement("select user_name,password from users where id=?")

statement.setLong(1, id)

ResultSet resultSet = statement.executeQuery()

User user = null

if (resultSet.next()) {

user = new User()

user.setId(id)

user.setUserName(resultSet.getString("user_name"))

user.setPassword(resultSet.getString("password"))

}

resultSet.close()

statement.close()

connection.commit()

return user

} catch (SQLException e) {

throw new RuntimeException(e)

} finally {

if (connection != null) {

close(connection)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6762396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存