【Java基础】第十章 数据库应用

本文介绍如何使用Java的JDBC技术进行数据连接与管理,并简介如何使用ORM工具简化数据库开发

#数据库系统一般由数据库(DB),数据库管理系统(DBMS),应用系统(AS),数据库管理员(DBA)和数据库用户(DBO)组成。

数据模型是数据库的核心和基础,主要包括网状模型,层次模型,关系模型等。

#常用关系数据库:Oracle,Sybase,IBMInformix,DB2,Microsoft,SQLServer,MySQL,FoxPro,Access等

#SQL语言简洁

SQL结构化查询语言(“Structured Query Language”)

#JDBC概述

JDBC(Java Data Base Connectivity,Java数据库连接)是一套允许Java于SQL数据库对话的程序设计接口,它是用于执行SQL语句的Java API,是java应用程序连接数据库,存取数据的一种机制,可以为多种关系型数据库提供同意的访问,它是一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,是数据库开发人员能够编写数据库应用程序。

JDBC的基本功能包括:加载JDBC驱动程序;建立与数据库的连接;使用SQL语句进行数据库操作并处理结果;关闭相关连接。

JDBC主要提供两个层次的接口,如下图所示,面向系统底层的JDBC Driver API(JDBC驱动程序接口),以及面向程序开发人员的JDBC API(JDBC应用程序接口)。

#JDBC驱动程序接口

JDBC Driver API是面向驱动程序开发的编程接口。根据其运行条件的不同,常见的JDBC驱动程序主要由以下四种类型:

①JDBC-ODBC桥加ODBC驱动程序(JDBC-ODBC brige plus ODBC driver)。JDBC-ODBC桥驱动程序,将JDBC调用转换为ODBC的调用。

②本地API、部分是Java的驱动程序(Native-API partly-Java driver)。该类型的驱动程序用于将JDBC的调用转换成主流数据库API的本机调用。

③JDBC-Net的纯Java驱动程序(JDBC-Net pure Jave driver)。这种类型的驱动程序将JDBC调用转换成与数据库无关的网络访问协议,利用中间件将客户端连接到不同类型的数据库系统。

④本地协议的纯Java驱动程序(Native-protocol pure Java driver)。这种类型的驱动程序将JDBC调用直接转化为某种特定数据库的专用网络协议,可以直接从客户机来访问数据库系统。

#JDBC应用程序接口

JDBC API被描述成一组抽象的接口,JDBC的接口和类定义都在包java.sql中,利用这些接口和类可以使应用程序很容易地对某个数据库打开连接,执行SQL语句并处理结果。

①java.sql.DriverManager接口

是JDBC的管理层,负责管理JDBC驱动程序。该接口常用方法入下:

getDriver(String url):根据指定url定位一个驱动。

getDriver():获得当前调用访问的所有加载的JDBC驱动。

getConnection():使用指定url建立一个数据库连接,并返回一个Connection接口对象。

reisterDriver(java.sql.Driver driver):登记给定的驱动。

setCatalog(String database):确定目标数据库。

针对不同数据库,建立数据库连接所对应JDBC的url也有所不同。

连接各种数据库的实例:

②java.sql.Connection接口

负责处理与数据库的连接。常用方法如下:

createStatement():在本连接上生成一个Statement对象,该对象可对本连接的特定数据库发送SQL语句。

setAutoCommit(Boolen autoCommit):设置是否自动提交。

commit():提交数据库上当前的所有待提交的事物。

close():关闭当前的JDBC数据库连接

③java.sql.Statement接口

java.sql.Statement接口负责执行静态SQL语句并且返回所生成的结果集。常用的方法如下:

executeQuery(String sql):执行一条SQL查询语句,返回查询结果对象。

executeUpdate(String sql):执行一条SQL插入,更新,删除语句,返回操作影响的行数。

execute(String sql):执行一条SQL语句。

④java.sql.ResultSet接口

提供了对数据库表的访问,一个ResultSet对象通常由执行一个SQL语句而生成。常用方法入下:

next():将数据指针往下移动一行,如果成功返回true,否则返回false;第一条指向为null,因为正常执行时,第一句时.next().

previous():将数据指针往上移动一行,如果成功返回true,否则返回false。

first():将数据指针移到结果集第一行。

last():将数据指针移到结果集最后一行。

getXxx(“id”)返回当前记录下第id个字段的值,其中Xxx一般指相应字段的数据类型,例如:String,Int,Float等。

getXxx(“name”):返回当前记录下字段名为name的值。

close()关闭结果集。

#JDBC编程步骤:

JDBC操作数据库的基本流程如下:

①导入java.sql.*;包,如import java.sql.*;

②加载JDBC驱动程序,调用Class.forName()方法。

③定义数据库的URL。以Java DB为例:String url="jdbc: derby: helloDB"

④连接数据库,调用getConnection(url)方法。

⑤建立SQL语句对象,调用createStatement()方法。

⑥执行SQL语句,调用xexcuteQuery(),execute(),executeUpdate()方法。

⑦处理结果集,调用next(),privious()等方法。

⑧关闭连接,调用commit(),close()方法。

#Java DB:属于java的数据库管理系统(DBMS)。

以Java DB作为数据库操作对象,写一个简单的JDBC操作数据库程序。

需求:①在DBMS中创建一个名为helloDB的数据库。

②创建一张数据表,取名为hellotable,具有name和score字段属性。

③向表内插入两条数据。

④查询数据打印到控制台上。

⑤删除表和数据库,释放资源。

例:使用Java DB数据库显示hellotable表中所有学生的名字和成绩信息

import java.sql.*;
pulbic class HelloJavaDB{
    public static void main(String []args){
        try{  //加载驱动
            Class.forName("orh.apache.derby.jdbc.EmbeddedDriver");
            System.out.println("Load the embedded driver");    
            Connection conn=null;
            //定义并连接数据库helloDB
            conn=DriverManager.getConnection("jdbc:derby:helloDB;create=true;);
            System.out.println("create and connect to helloDB");
            conn.setAutoCommit(false);
            
                //创建并插入两条记录
                Statement s=comm.createStatement();
                s.execute("create table hellotable(name varchar(40),score int)");
                System.out.println("Created table hellotable");
                s.execute("insert into hellotable values('Ruth Cao',86)");
                s.execute("insert into hellotable values('Flora Shi',92)");
                //列出两条记录
                ResultSet rs=s.executeQuery(
                    "SELETE name,score FROM hellotable ORDER BY score");
                System.out.println("name\t\t score ");
                while(rs.next()){
                    StringBuilder builder=new StringBuilder(rs.getString(1));
                    builder.append("\t");
                    builder.append(rs.getInt(2));
                    System.out.println(builder.toString());
                }
                //删除表
                s.execute("drop table hellotable");
                System.out.println("Dropped table hellotable");
                
                rs.close();
                s.close();
                System.out.println("Closed result set and statement");
                conn.commit();
                comm.close();
                System.out.println("Committed transaction and closed connection");
                    try{ //执行数据库关闭操作
                        DriverManager.getConnection("jdbc:derby:;shutdown=true");
                    }catch(SQLException se){
                        System.out.println("Database shut down normally");
                    }
                }catch(Throwable e){
                    //处理异常
                }
                System.out.println("SimpleApp finished");
        }
}
            

注:因为使用到了Java DB数据库,需要事先配置环境变量classpath。变量值为%JAVA_HOME%=...\java\jdk版本号\db\lib\derby.jar;

若是在Eclipse中编程,也需要加载derby.jar包:Add External JARs。。。,选择derby.jar所在的路径添加即可。

程序运行完成后,可以在运行的目录下看到一个helloDB的文件夹。

猜你喜欢

转载自blog.csdn.net/liugf2115/article/details/86564209