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的簡單操作.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • HorizontalScrollView 自动滑动「建议收藏」

    HorizontalScrollView 自动滑动「建议收藏」从事开发Android,坑人的就是设备的差异性,相同的功能在相同的生产厂商不同的版本设备,或者是不同的生产厂商的设备实际效果具有差异性,最近在项目里面用到HorizontalScrollView功能,里面有10个按钮,要把其中第四个按钮移动到最左边,这个功能倒是很好实现,方法也很多,使用ScrollTo一类的函数就可以实现,在其他的手机设备上很好,没有问题,但是在索尼SonyErissson这

  • android之ContentObserver内容观察者的使用

    ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于   数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。(1)注册:    public final void  registerContentObserver(Uri uri, boolean noti

  • .NET中代理服务器WebProxy的各种用法

    .NET中代理服务器WebProxy的各种用法因为涉及到代理的各种情况,WebRequest和WebProxy类的文档写的相当复杂,不但各个文档关注点不同,而且不同版本的同一文档也有小小的区别,网上也没有关于这个类的相关文章。于是乎这篇Blog是我钻研半天MSDN很久后总结并且花了一小时憋出来的,希望下面的内容能帮到大家。(AcDown中也使用了相关的代码,有兴趣的可以找来看看【解析】.NET中代理服务器WebProxy的各种用法)直接进入

  • matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题[通俗易懂]

    matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题[通俗易懂]我用plotyy做了一个图,想用legend标注图形,但是还想只能标注一个,我的原始程序时这样的[AX,H1,H2]=plotyy(xx,c,xx,p8);set(get(AX(1),’Ylabel’),’String’,’地面水汽压e/(hpa)’,’color’,’k’,’linewidth’,1.2)set(get(AX(2),’Ylabel’),’String’,’大气可降水量W/…

  • 帆软报表,异常问题汇总

    帆软报表,异常问题汇总164.导出excel0kb内存不够或者磁盘空间不足163.UnresolvableOperation:mobileinclassReportDispatcher排除jar包和插件影响的话,可能是LIC里面没有决策平台功能点162.客户嵌入我们的url时出现报错Refusedtodisplay’URL’inaframebecauseitset’X-Fr…

  • javawebservice_java web 框架

    javawebservice_java web 框架下面分别介绍一个这几种WebService框架的基本概念1、JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。2、Axis2是Apache下的一个重量级WebService框架,准确说它是一个WebServices/SOAP/…

发表回复

您的电子邮箱地址不会被公开。

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