java db 使用_JavaDB的基本使用[通俗易懂]

java db 使用_JavaDB的基本使用[通俗易懂]Derby並不是一個新的數據庫產品,它是由IBM捐獻給Apache的DB項目的一個純Java數據庫,JDK6.0里面帶的這個Derby的版本是10.2.1.7,支持存儲過程和觸發器;有兩種運行模式,一種是作為嵌入式數據庫,另一種是作為網絡數據庫,前者的數據庫服務器和客戶端都在同一個JVM里面運行,后者允許數據庫服務器端和客戶端不在同一個JVM里面,而且允許這兩者在不同的物理機器上.值得注意的是JD…

大家好,又见面了,我是你们的朋友全栈君。

Derby並不是一個新的數據庫產品,它是由IBM捐獻給Apache的DB項目的一個純Java數據庫,JDK6.0里面帶的這個Derby的版本是10.2.1.7,支持存儲過程和觸發器;有兩種運行模式,一種是作為嵌入式數據庫,另一種是作為網絡數據庫,前者的數據庫服務器和客戶端都在同一個JVM里面運行,后者允許數據庫服務器端和客戶端不在同一個JVM里面,而且允許這兩者在不同的物理機器上.值得注意的是JDK6里面的這個Derby支持JDK6的新特性JDBC 4.0規范(JSR 221),現在我們如果要練習JDBC的用法,沒有必要單獨裝一個數據庫產品了,直接用Derby就行.

下面是個使用derby的簡單例子:

首先導入JAR包:derby.jar,如果你裝的是JDK6,在C:/Program Files/Sun/JavaDB/lib目錄下就可以找到.

然后就要創建數據庫了:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

privateConnection getConnection()throwsSQLException {

Connection connection = DriverManager

.getConnection(“jdbc:derby:userDB;create=true;user=test;password=test”);

connection.setAutoCommit(false);

returnconnection;

}private Connection getConnection() throws SQLException {

Connection connection = DriverManager

.getConnection(“jdbc:derby:userDB;create=true;user=test;password=test”);

connection.setAutoCommit(false);

return connection;

}

其中userDB是要連接數據庫的名字,create=true表示如果該數據庫不存在,則創建該數據庫,如果數據庫存在,則用用戶user=test;密碼password=test連接數據庫.

有了數據庫,接下來該建表了:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

privatevoidcreateTable(Connection connection)throwsSQLException {

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();

}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(這個就不多說了),:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

publicclassUserimplementsSerializable {

/**

*

*/

privatestaticfinallongserialVersionUID = 1L;

privateLong id;

privateString userName;

privateString password;

publicLong getId() {

returnid;

}

publicvoidsetId(Long id) {

this.id = id;

}

publicString getUserName() {

returnuserName;

}

publicvoidsetUserName(String userName) {

this.userName = userName;

}

publicString getPassword() {

returnpassword;

}

publicvoidsetPassword(String password) {

this.password = password;

}

}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;

}

}

接下來就可以就數據庫進行增刪改查的操作了:

插入數據:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

privatevoidcreate(User user) {

Connection connection =null;

try{

connection =this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“insert into users (user_name,password) values(?,?)”);

intindex =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);

thrownewRuntimeException(e);

}finally{

if(connection !=null) {

close(connection);

}

}

}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);

}

}

}

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

privateLong getId(Connection connection)throwsSQLException {

CallableStatement callableStatement = connection

.prepareCall(“values identity_val_local()”);

ResultSet resultSet = callableStatement.executeQuery();

resultSet.next();

Long id = resultSet.getLong(1);

resultSet.close();

callableStatement.close();

returnid;

}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.

修改數據:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

privatevoidupdate(User user) {

Connection connection =null;

try{

connection =this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“update users set user_name=?,password=? where id=?”);

intindex =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);

thrownewRuntimeException(e);

}finally{

if(connection !=null) {

close(connection);

}

}

}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);

}

}

}

刪除數據:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

publicvoiddelete(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);

thrownewRuntimeException(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);

}

}

}

查詢數據:

Java代碼 aHR0cDovL2phcnJ5d2luLmphdmFleWUuY29tL2ltYWdlcy9pY29uX2NvcHkuZ2lm

publicUser 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 =newUser();

user.setId(id);

user.setUserName(resultSet.getString(“user_name”));

user.setPassword(resultSet.getString(“password”));

}

resultSet.close();

statement.close();

connection.commit();

returnuser;

}catch(SQLException e) {

thrownewRuntimeException(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);

}

}

}

以上就是derby的簡單操作.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156460.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos7 firewall开放查看关闭端口

    centos7 firewall开放查看关闭端口

    2021年5月12日
  • CBoard框架使用总结一[通俗易懂]

    CBoard框架使用总结一[通俗易懂]文章内容1.功能介绍2.源码结构分析3.总结1.功能介绍1.1.整体界面(CBoard支持中英文版本)左侧功能依次为:已创建的数据面板:包含已经创建的DashBoard配置功能:DashBoard配置功能集管理:主要是用户管理(Spring-Security)1.2.DashBoard配置功能主要包括:数据源定义:支持Elasticsearch、saiku、TextF

    2022年10月26日
  • 修改 nginx 的默认端口「建议收藏」

    修改 nginx 的默认端口「建议收藏」nginx安装的时候有一个坑,需要注意,那就是默认端口号配置的是80.大家知道iis里面的服务默认也是80.如果是在windows服务里面安装的话,之前已经有iis。那么你就会报错。报端口号被占用。具体英文忘记了怎么写。这个时候,2种方法,一修改nginx的配置文件,不让他用80端口号。这是最好的方法。修改文件:找到nginx压缩文件:nginx不需要做任何的安装,在他的官网上下载后,直接解压后出现如下图就ok。我的另外一篇文章有具体操作,可以去看。打开conf,找到ngin..

    2022年9月8日
  • java中的类[通俗易懂]

    java中的类[通俗易懂]4.1.类是什么?  1.类–类型–数据类型—复合数据类型—自定义复合数据类型  为什么有复合数据类型?  基本数据类型就8种,在开发中远远不够,所以我们就需要一个可以根据自己的需求随时能制作出一个自己需要的数据类型。  2.类–具有共同性质的一组事物的群体。人类。  在java中用来描述具有共同性质的一组事物的自定义的复合数据类型—类。  复合数据类型的本质—【根据自己的

    2022年7月7日
  • SPSS操作(四):系统聚类分析

    SPSS操作(四):系统聚类分析现用如下数据做系统聚类分析:将数据导入spss中,如图:步骤如下:①【分析】—-【分类】—-【系统聚类】②x2、x3、x4、x5、x6、x7、x8添加到变量,x1(即地区)添加到个案标注依据小技巧:添加变量的时候,可以单击【医疗机构床位数(张)】,然后按住shift键不松,鼠标单击【医院(个)】就可以选择多个变量一起添加③点击【统计】勾选【解的范围】,可以根据自己的需要选择最小聚类数和最大聚类数(这里我设置为2和5),然后点击【继续】④点击【图】,(这里我选择的是做系谱图

    2022年10月18日
  • MySQL 上亿大表优化实践

    MySQL 上亿大表优化实践

    2022年2月13日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号