Java程序设计项目案例化教程课件:数据库编程_第1页
Java程序设计项目案例化教程课件:数据库编程_第2页
Java程序设计项目案例化教程课件:数据库编程_第3页
Java程序设计项目案例化教程课件:数据库编程_第4页
Java程序设计项目案例化教程课件:数据库编程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面向对象程序设计数据库编程本章内容了解什么是JDBC掌握JDBC的常用类的使用掌握JDBC的编程过程掌握通过JDBC进行数据库操作9.1引例异常是用来处理程序错误的有效机制。通过系统抛出的异常,程序可以很容易地捕获并处理发生的异常情况。对于一个应用软件,异常处理是不可缺少的。为了说明什么是异常,我们先来看下面的例子。JDBC概述(JDBC驱动程序)JDBC(JavaDataBaseConnectivity)——java数据库连接,Java语言访问数据库的一种规范,是一套API用于执行SQL语句的JAVAAPI,由java.sql、javax.sql包组成。它由一组用Java编程语言编写的类和接口组成,能够用纯JavaAPI来编写数据库应用程序。Java中JDBC驱动程序有四种。第一种:JDBC-ODBC桥。JDBC-ODBC是一种JDBC驱动程序,是用于将JDBC中的方法调用转换成ODBC中相应的方法调用,再通过ODBC访问数据库。由于微软推出的ODBC比Sun公司推出JDBC要早,所以绝大多数的数据库都可以通过ODBC来访问,当Sun公司推出JDBC的时候,为了支持更多的数据库,提供了JDBC-ODBC桥。这样我们就可以使用JDBC的API通过ODBC去访问数据库;第二种:本地APIJava驱动程序。本地API驱动程序(native-APIpartly-Javadriver),直接将JDBCAPI翻译成具体数据库的API,将JDBC调用转换为对数据库的客户端API的调用;第三种:JDBC网络纯Java驱动程序。Java应用程序通过JDBC网络纯Java驱动程序将JDBC调用发送给应用程序服务器,应用程序服务器与数据库完成通信,从而完成请求;第四种:纯Java驱动。Java应用程序通过纯Java驱动程序与支持JDBC的数据库直接通信。这方式是效率最高的访问方式。访问不同厂商的数据库,需要不同的JDBC驱动程序。目前,几个主要的数据厂商(Oracle、Microsoft、Sybase等)都提供了对JDBC的支持。Java具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是Java应用程序与各种不同数据库之间进行对话的方法。而JDBC正是作为此种用途的机制。应用程序、JDBCAPI、数据库驱动及数据库之间的关系如下图所示:图9.1应用程序使用JDBC访问数据库方式JDBC常用接口和类9.3.2JDBC常用接口和类在JDBC之中的核心组成部分:DriverManager类、Connection接口、Statement接口、PreparedStatement接口、ResultSet接口,即:五个接口一个类,就构成了整个JDBC的组成。1、DriverManager类DriverManager类用来管理数据库中的所有驱动程序;是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。DriverManager通过以下静态方法中的一种尝试从一组已注册的JDBC驱动程序中选择适当的驱动程序:表9.1DriverManager类的方法

publicstaticfinalStringURL="jdbc:mysql://localhost:3306/mydatabase";publicstaticfinalStringUSER="root";publicstaticfinalStringPASSWORD="123456";Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);方法主要功能getConnection(Stringurl)尝试建立与给定数据库URL的连接getConnection(Stringurl,Propertiesinfo)尝试建立与给定数据库URL的连接,info作为连接参数的任意字符串标签/值对的列表;getConnection(Stringurl,Stringuser,Stringpassword)尝试建立与给定数据库URL的连接,user正在连接的数据库用户,password用户密码Connection接口Connection接口代表与特定的数据库连接,在连接上下文中执行SQL语句并返回结果。下面表中是Connection的常用的方法:表9.2Connection常用方法Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);Statementstmt=conn.createStatement();方法主要功能void()Connection发布此Connection对象的数据库和JDBC资源,而不是等待它们自动释放。()创建一个Statement对象,用于将SQL语句发送到数据库。PreparedStatementprepareStatement(Stringsql)创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。Statement接口Statement接口用于在已经建立连接的基础上向数据库发送SQL语句。在JDBC中有3中Statement对象,分别是Statement、PreparedStatement和CallableStatement。Statement对象用于执行不带参数的简单的SQL语句;PreparedStatement继承了Statement,用来执行动态的SQL语句;CallableStatement继承了PreparedStatement,用来执行数据库的存储过程的调用。下面表中是Statement的常用的方法:表9.3Statement常用的方法Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select*fromuserOne");PreparedStatment接口PreparedStatement可以对SQL语句进行预编译,并且可以存储在PreparedStatement对象中,当多次执行SQL语句时可以提高效率,并可以提高安全性防止恶意SQL表9.4PreparedStatement的常用方法方法主要功能ResultSetexecuteQuery(Stringsql)执行给定的SQL语句,该语句返回单个ResultSet对象intexecuteUpdate(Stringsql)执行给定的SQL语句,这可能是INSERT,UPDATE,或DELETE语句,或者不返回任何内容,如SQLDDL语句的SQL语句close()Statement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。stmt.executeUpdate("insert

into

tb_name

(c1,c2,c3)

values

('"+v1+"','"+v2+"',"+v3+"')");

perstmt

=

con.prepareStatement("insert

into

tb_name

(col1,col2,col3)

values

(?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.executeUpdate();

方法主要功能ResultSetexecuteQuery()执行此PreparedStatement对象中的SQL查询,并返回查询PreparedStatement的ResultSet对象intexecuteUpdate()执行在该SQL语句PreparedStatement对象,它必须是一个SQL数据操纵语言(DML)语句,如INSERT,UPDATE或DELETE;或不返回任何内容的SQL语句,例如DDL语句close()PreparedStatement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针向下移。下面表中是ResultSet的常用的方法:表9.5ResultSet的常用方法ResultSetrs=stmt.executeQuery("select*fromuserOne");while(rs.next()){ System.out.println(rs.getString(1));}rs.close();ResultSet接口方法主要功能boolean

next()将光标从当前位置向前移动一行getString(intcolumnIndex)这个检索的当前行中指定列的值ResultSet对象为String的Java编程语言getString(StringcolumnLabel)这个检索的当前行中指定列的值ResultSet对象为String的Java编程语言close()ResultSet释放此ResultSet对象的数据库和JDBC资源,而不是等待其自动关闭时发生。JDBC编程步骤通过JDBC为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。阐述JDBC编程步骤以java程序如何连接MySQL数据库的为例。下面主要介绍JDBC连接MySQL数据库操作的步骤。在使用JDBC编程之前,要做的就是安装MySQL数据库,设置用户名为:root,设置密码为:123456,再建立数据库mydatabase,之后再在mydatabase数据库下建立表student,作为本章所有案例使用。表9.6student中的字段表9.7student中的内容字段名类型长度能否为空主键IDint8否是Namevarchar10否

sexchar1否

majorvarchar20否

phoneint13能

Emailvarchar30能IDNamesexmajorphoneEmail20180101赵锦毫男电子学与信息系统1556545645fsgdrs@163.com20180102赵业超男计算机软件1756454534sdrgs@20180103陈泊芝女计算机及应用1434534435zgsdg@163.com20180104赵广然男矿物岩石材料学1437878678szdgs@20180105李馨漫女微电子学1463874546shgfgd@163.com20180106赵强男电子学与信息系统1378548784xgh@20180107赵诚晨男矿物岩石材料学1297868976sthfgb@163.com20180108李长白男计算机软件1310786745strghgh@20180109陈泊依女计算机软件1767832428tgwstj@20180110王洋平男微电子学1437652344jhjrer@20180111王显茹女微电子学1438573237weyji@163.com20180112李风念男电子学与信息系统1437837425fgj@20180113赵丽凡女矿物岩石材料学1742377824iop@20180114王白诗女计算机软件1786378324etwt@20180115李雄继男计算机软件1475327836wrtwju@163.com20180116王哲男计算机软件1327853847hcvkf@163.com20180117李茹倩女计算机及应用1727487338suijg@163.com20180118王雅腾女矿物岩石材料学1483742788glkbm@20180119赵婉娴女计算机软件1723778786dhsty@20180120王中齐男电子学与信息系统1893438963ikdjyn@JDBC驱动程序JDBC驱动是JDBCAPI接口的具体实现,不同数据库的实现细节不同。驱动类型(四种类型),一般优先使用纯Java的驱动,已获得更好的效率。这些是各个数据库厂家根据JDBC的规范制作的JDBC实现类各种数据库的驱动类名如下:表9.6部分数据库的驱动类名数据库驱动程序包名驱动类的名字JDBCURLSQLServermsbase.jarmssqlserver.jarmsutil.jarcom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbnameOracleojdbc14.jaroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@:1521:dbnameMySQLmysql-connector-java-3.1.11-bin.jarcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/mydb在注册JDBC之前首先一定要导入驱动类的架包,例如注册JDBC驱动程序连接MySQL数据库之前要导入驱动类的架包:mysql-connector-java-3.1.11-bin.jar在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的。Class.forName(name);name是一个字符串,而这个字符串也就是要注册JDBC驱动程序连接的数据库的驱动类的名字。例如注册JDBC驱动程序连接MySQL数据库Class.forName("com.mysql.jdbc.Driver");注册JDBC驱动程序连接数据库和数据库建立连接通过DriverManager取得Connection对象之后,实际上就表示数据库连接上了,连接上数据库就可以进行数据库的更新及查询操作,但是操作完成之后,数据库连接也必须要关闭。例如下面使用Java中JDBC与MySQL数据库连接:publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase";Connectionconn=DriverManager.getConnection(DBURL,"username","password");创建执行SQL对象与执行语句(发送SQL语句)通过连接对象Connection获取可以执行sql语句的对象Statement,然后创建执行SQL的对象Statement。Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(sql);//参数为sql语句通过连接对象Connection获取已创建SQL语句的对象PreparedStatement,然后执行SQL语句。PreparedStatmentps=conn.prepareStatement(sql);//参数为sql语句ResultSetrs=ps.executeQuery();处理数据库返回的结果ResultSet接口通常用于保存数据库的结果集 ResultSetrs=stm.executeQuery(查询语句);表9.7ResultSet的常用方法方法主要功能next()将指针从当前位置向下移一行getInt(intcolumnIndex)columnIndex是字段的序号,第一个字段(列)是1,第二个字段(列)是2getInt(columnName)columnName是字段名称注:查询后ResultSet的默认当前位置是0行,如果要将当前位置移到第一行则要调用一下next()方法; publicvoidselect(){ try{ ResultSetrs=stmt.executeQuery("select*fromstudent"); while(rs.next()){ System.out.print(rs.getInt("ID")+"\t"); System.out.print(rs.getString("Name")); System.out.println(); } }catch(SQLExceptione){ System.out.println("数据库访问错误"+e); } }释放资源(关闭连接)。publicstaticvoidcloseConnection(ResultSetrs,Statementstmt,Connectioncon){try{ if(rs!=null){ rs.close();} if(stmt!=null){ stmt.close(); } if(con!=null){ con.close(); } }catch(SQLExceptione){ e.printStackTrace();}}【例9-1】:通过案例来掌握使用JDBC完成数据库编程步骤。importjava.sql.*;publicclassDemo9_01{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase"+"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;//每一个Connection对象表示一个数据库连接Statementstmt=null;//数据库操作对象Class.forName(DBDRIVER);//加载驱动程序conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();//找到Statement接口对象 Stringsql="SELECT*FROMstudentwheresex='女'"; ResultSetrs=stmt.executeQuery(sql);//查询 System.out.println("学号 姓名 性别 专业 "+"电话 Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+" " +sex+""+major+""+phone+" "+email); } rs.close(); stmt.close();//关闭操作,如果不关闭操作,关闭连接也是一样的 conn.close();//关闭连接 }}程序运行结果:JDBC-ODBC编程步骤讲完使用JDBC完成MySQL数据库编程步骤,我们来讲一下使用JDBC-ODBC完成MySQL数据库编程步骤。通过JDBC-ODBC连接Mysql数据库,与JDBC直接连接数据库差异不大。下面主要介绍JDBC-ODBC连接MySQL数据库操作的步骤。打开控制面板下的管理工具中的odbc数据源(根据数据库安装的不同,选择32位ODBC数据源或64位ODBC数据源),如图9.1所示:再用户DSN下点击添加,如图9.2所示:之后选择:MySQLODBC8.0ANSIDriver,点击完成,如图9.3所示:看见用户DSN中有MySQL,点击确定按钮,如图9.4所示注册JDBC-ODBC驱动程序为:sun.jdbc.odbc.JdbcOdbcDriver,也只能使用这一种驱动程序。注册JDBC-ODBC驱动程序连接数据库与JDBC连接数据库一样使用的是Class.forName(name);而不同的是name这个字符串。JDBC连接数据库的这个字符串也就是要注册JDBC驱动程序连接的数据库的驱动类的名字,而JDBC-ODBC连接数据库的这个字符串只能使用一种:sun.jdbc.odbc.JdbcOdbcDriver。Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");注册驱动(注册JDBC-ODBC驱动程序连接数据库)JDBC-ODBC连接数据库也是通过DriverManager取得Connection对象之后,不同的是连接使用的URL,JDBC连接数据库使用的URL是根据连接的数据库不同使用的URL也不同,而JDBC-ODBC连接数据库使用的URL:jdbc:odbc:MySQL,URL中的MySQL就是上面的DataSourceName。例如下面使用Java中JDBC-ODBC与MySQL数据库连接:publicstaticfinalStringDBURL="jdbc:odbc:MySQL";Connectionconn=DriverManager.getConnection(DBURL,"username","password");JDBC-ODBC连接数据库后面的步骤与JDBC连接数据库后面的步骤基本相同。和数据库建立连接【例9-2】:通过案例来掌握使用JDBC-ODBC完成数据库编程步骤。importjava.sql.*;publicclassDemo9_02{ publicstaticfinalStringDBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver"; publicstaticfinalStringDBURL="jdbc:odbc:MySQL"; publicstaticfinalStringDBUSER="root"; publicstaticfinalStringPASSWORD="123456"; publicstaticvoidmain(String[]args)throwsException{ Connectionconn=null;//每一个Connection对象表示一个数据库连接 Statementstmt=null;//数据库操作对象 Class.forName(DBDRIVER);//加载驱动程序 conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();//找到Statement接口对象 Stringsql="SELECT*FROMstudentwheresex='男'"; ResultSetrs=stmt.executeQuery(sql);//查询 System.out.println("学号" +"姓名" +"性别" +"专业" +"电话" +"Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+"" +sex+""+major+""+phone+""+email); } rs.close(); stmt.close();//关闭操作,如果不关闭操作,关闭连接也是一样的 conn.close();//关闭连接 }}程序运行结果:JDBC数据库操作(查询操作)查询应该返回数据给用户浏览,所以在整个进行查询的操作之中,就必须有一种结构,可以装下整个的查询结果,而这个结构就使用ResultSet表示。当所有的记录返回到ResultSet的时候,所有的内容都是按照数据类型存放的,所以用户只需要按照数据类型一行行的取出数据即可。【例9-3】:通过案例来掌握使用ResultSet取出数据importjava.sql.*;publicclassDemo9_03{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement(); Stringsql="SELECT*FROMstudentwheresex='男'"; ResultSetrs=stmt.executeQuery(sql); System.out.println("学号 姓名 性别 专业 " +"电话 Email"); while(rs.next()){ intid=rs.getInt("ID"); Stringname=rs.getString("Name"); Stringsex=rs.getString("sex"); Stringmajor=rs.getString("major"); intphone=rs.getInt("phone"); Stringemail=rs.getString("Email"); System.out.println(+id+""+name+" " +sex+""+major+""+phone+" "+email); } rs.close(); stmt.close(); conn.close(); }}该程序的运行结果:在数据的更新操作之中,如果已经成功的执行了数据的更新,一定会返回更新的行数的。如果要想执行数据表操作在Java之中可以使用Statement接口完成,但是如果要想取得Statement接口对象的话,必须依靠Connection接口完成,通过Connection接口中定义的了executeUpdate(Stringsql)方法完成更新、添加和删除操作。更新、添加和删除操作【例9-4】:通过案例掌握数据库表的数据插入操作。SQL语法:INSERTINTO表名称(字段,字段,..)VALUES(值,值,…):importjava.sql.*;publicclassDemo9_04{

publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD);

stmt=conn.createStatement(); Stringsql="INSERTINTOstudent(Name,sex,major,phone,Email)" +"VALUES('萧风','男','计算机及应用',1327853456,'gdszr@')";

intnum=stmt.executeUpdate(sql); System.out.println("更新行数:"+num);

stmt.close();

conn.close(); }}

该程序的运行结果:【例9-6】:通过案例掌握数据库表的删除操作。SQL语法:DELETEFROM

表名称

WHERE

删除条件

;importjava.sql.*;publicclassDemo9_06{ publicstaticfinalStringDBDRIVER="com.mysql.jdbc.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/mydatabase" +"?characterEncoding=utf8&useSSL=true";publicstaticfinalStringDBUSER="root";publicstaticfinalStringPASSWORD="123456";publicstaticvoidmain(String[]args)throwsException{Connectionconn=null;Statementstmt=null;Class.forName(DBDRIVER);conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD); stmt=conn.createStatement();Stringsql="DELETEFROMstudentWHEREid=20180115";intnum=stmt.executeUpdate(sql);System.out.println("更新行数:"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论