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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java垃圾收集学习笔记

    Java垃圾收集学习笔记

    2020年11月12日
    193
  • 通过SaveFileDialog实现保存文件[通俗易懂]

    通过SaveFileDialog实现保存文件[通俗易懂]示例中通过点击按钮实现打开另存为对话框,进行相关的文件保存。在按钮单击触发下代码如下:    SaveFileDialogsaveExcel=newSaveFileDialog();//实例化SaveFileDialog    saveExcel.Filter=”工作表(*.xls)|*.xls|所有文件(*.*)|*.*”;//可用文件类型    if(save

    2022年10月8日
    2
  • pycharm单行和多行注释快捷键_java怎么取消注释

    pycharm单行和多行注释快捷键_java怎么取消注释—默认快捷键—:Ctrl+/(如果是多行批量注释/取消注释,需先选中多行,再使用该快捷键)。除了上述默认快捷键之外,如果选择的Keymap不同,可能还有变动。如Keymap选择Emacs后,注释快捷键变为:Alt+;(Alt+分号)。注意:经过测试,无论Keymap选哪种,块注释的选项CommentwithBlockComment及其快捷键Ctrl+Shift+/均无法使用,原因暂不明确。Keymap的选择情况可以在设置(Settings)–>Keymap中查看和修改,其中打开Setti

    2022年8月29日
    4
  • android acitivity 跳转到fragment,android Activity跳转到指定的Fragment

    android acitivity 跳转到fragment,android Activity跳转到指定的Fragment在要跳转的activity中的按钮写://一、先跳转到主MyActivityFragment,通过传递参数让他接受caseR.id.grxxbut:Intentshow=newIntent(GrXxActivity.this,MyActivityFragment.class);show.putExtra(“grxx”,1);startActivity(show);finish();break…

    2022年5月21日
    54
  • java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝

    java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝Java中的对象拷贝(ObjectCopy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部数据。Java中的对象拷贝主要分为:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)。先介绍一点铺垫知识:Java中的数据类型分为基本数据类型和.

    2022年9月1日
    5
  • mysql错误代码1142_如何安装mysql数据库

    mysql错误代码1142_如何安装mysql数据库我的phpmyadmin或MySQL命令行不允许我执行以下查询:SELECTcustomer.First,customer.Last,login.Username,login.Password,customer.Addrln1,customer.Addrln2,customer.Postcode,customer.County,customer.Country,customer….

    2022年10月1日
    3

发表回复

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

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