程序设计之数据库

上传人:抢*** 文档编号:243132907 上传时间:2024-09-16 格式:PPT 页数:42 大小:3.14MB
返回 下载 相关 举报
程序设计之数据库_第1页
第1页 / 共42页
程序设计之数据库_第2页
第2页 / 共42页
程序设计之数据库_第3页
第3页 / 共42页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,数据库程序设计,了解,SQL,常用操作;,掌握通过,JDBC,进行数据库连接的方法;,掌握数据库编程的基本步骤,并且会采用,Java,进行数据库实例编程;,十分实用的一章。,12.1,数据库简介,关系数据库的理论概念;,目前的大型关系型数据库:,Oracle,、,Sybase,、,DB2,、,Informix,和,SQL Server,等。,小型关系型数据库:,Access,。,关系型数据库以表为单位来组织数据,表是由行和列组成的一个二维表格。表,12-1,所示为存放学生信息的一个,student,样例表。,江西新华电脑学院,student,表,Access,中的表结构,no,name,gender,score,2001,貂蝉,女,85,2002,赵云,男,95,2003,张飞,男,75,2004,周瑜,男,98,字段名,类型,字段宽度,no,文本,4,name,文本,8,gender,文本,2,score,数字,浮点类型,12.2 SQL,语句,SQL(Structured,Query Language),结构化查询语言,是所有关系数据库支持的一个中编程语言。,可用于存、取、查询、更新和管理数据库系统。,在,Java,中对数据库的操作是通过,SQL,语句实现的。,12.2.1,定义表,方法:仅举例,通过实例掌握。,创建名为,“students”,的表。该表包含,5,个列,列名分别是:,“no”,、,“name”,、,“gender”,和,“score”,:,CREATE TABLE students(,no char(4) not null,name char(8),gender char(2),score float,),12.2.2,查询,方法:仅举例,通过实例掌握。,例如:从名为,“students”,的数据表中,获取那些成绩大于,80,分的学生的姓名和 性别:,SELECT name , gender,FROM students,WHERE score 80,12.2.3,插入,方法:仅举例,通过实例掌握。,例如:,向表中插入一行:,INSERT INTO students VALUES( 2008, Bill, ,男,96 ),12.2.4,删除,方法:仅举例,通过实例掌握。,例如:,删除,name,为,Bill,的学生:,DELETE FROM students WHERE name = Bill,如果要删除表中所有的记录,可以如下操作,这意味着表的结构没有任何变化:,DELETE * FROM,table_name,12.2.5,修改,方法:仅举例,通过实例掌握。,例如:将,no,为,2001,的学生,其,name,修改为“曹操”,,score,修改为,98,,性别改为“男”。,UPDATE students SET score =99,name = ,曹操,gender = ,男, WHERE no = 2001,为什么需要,JDBC,JDBC,是,Java,数据库连接技术的简称,提供连接各种常用数据库的能力,Java,应用程序,JDBC,客户端,数据库服务器,12.3,数据库连接,JDBC,(,Java Data Base Connectivity,,,java,数据库连接)是一种用于执行,SQL,语句的,Java API,,可以为多种关系数据库提供统一访问,它由一组用,Java,语言编写的类和接口组成,JDBC,是一套协议,是,JAVA,开发人员和数据库厂商达成的协议,也就是由,Sun,定义一组接口,由数据库厂商来实现,JDBC,程序的工作原理,JDBC API,提供者:,sun,公司,内容:供程序员调用的接口与类,集成在,java.sql,和,javax.sql,包中,如:,DriverManager,类,Connection,接口,Statement,接口,ResultSet,接口,DriverManager,提供者:,sun,公司,作用:载入各种不同的,JDBC,驱动,JDBC,驱动,提供者:数据库厂商,作用:负责连接各种不同的数据库,Sql,Server,Oracle,JDBC,API,JDBC Driver Manager,JDBC,驱动,JDBC,驱动,Java,应用程序,JDBC,的,API,JDBC,使用的类和接口封装在,java.sql,包和,javax.sql,包。,JDBC,的,API,利用以上的类和接口,程序员可以很容易的实现与数据库建立连接、传递,SQL,语句和处理检索结果。而且,JDBC,应用步骤相对固定:,注册加载一个,driver,驱动,创建数据库连接(,Connection,),创建一个,Statement,(发送,sql,),执行,sql,语句,处理,sql,结果(,select,语句),关闭,ResultSet,(,select,语句),关闭,Statement,关闭连接,Connection,。,JDBC API,JDBC API,可做三件事:与数据库建立连接、执行,SQL,语句、处理结果。,Connection,DriverManager,Statement,ResultSet,DriverManager,:依据数据库的不同,管理,JDBC,驱动,Connection,:负责连接数据库并担任传送数据的任务,Statement,:,由,Connection,产生、负责执行,SQL,语句,ResultSet,:负责保存,Statement,执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,12.3,数据库连接,Java,程序设计人员通过调用,JDBC,的,API,操作,SQL,,实际上,对数据库的操作由,JDBC,驱动程序负责。,如果要更换数据库,,Java,应用程序中只要加载新的驱动程序即可完成数据库系统的变更,其他,Java,代码无需改变。从而达到编写一个,Java,程序,便能适用所有的数据库系统,这是,JDBC,最大的一个优点。,DriveManager,和,DataSource,与数据库建立连接有两种方法:,使用,DriverManager,直接获得连接,使用,Datasource,通过数据库连接池获得连接,使用,DriverManager,直接获得连接,1,、注册加载驱动,driver,,也就是强制类加载。,例,:,加载,Oracle,数据库驱动。,如果需要连接其他数据库,只要更改相应得驱动就可以了,加载方法一致,db2,的,Driver,的全名:,com.ibm.db2.jcc.DB2Driver,oracle,的,Driver,的全名:,oracle.jdbc.driver.OracleDriver,mysql,的,Driver,的全名:,com.mysql.jdbc.Driver,SQLServer,的,Driver,的全名:,com.microsoft.jdbc.sqlserver.SQLServerDriver,使用,DriverManager,直接获得连接,2,、创建连接,加载驱动后就可以使用下面的方法来创建连接,DriverManager.getConnection(String,url, Stringname, Stringpassword),不同的数据库的,JDBC URL,oracle,的,URL,值是由连接数据库的协议和数据库的,IP,地址及端口号还有要连接的库名(,DatebaseName,):,oracleURL,的格式:,jdbc:oracle:thin,:(,协议,)*.*.*.*:*,(,IP,地址及端口号),:*,(所使用的库名),例:,jdbc:oracle:thin:192.168.0.39:1521:TARENADB,不同的数据库的,JDBC URL,MySql,URL,的写法,例:,jdbc:mysql:/192.168.8.21:3306/test,SQLServer,URL,的写法,例:,jdbc:microsoft:sqlserver:/192.168.8.21:1433,db2 URL,的写法,例:,jdbc:db2:/ 192.168.8.21:50000/databasename,Datasources,DriverManager,是管理底层,jdbc,的,API,,是,java,最初提供的,jdbc,API,Datasource,提供更高层的接口,这个接口的实现可以是一个连接池,例:,Connection,Connection,对象描述了与一个数据库的一个连接,.,一个,Connection,结构包括要执行的,SQL,语句和通过该连接返回的结果,.,一个应用程序可以一个数据库有多个连接,也可以与多个数据库有多个连接,.,例:获得数据库连接,Connection,JDBC,为传送,SQL,语句提供了三个类,Connection,中的三个方法可创建它们的实例。,Statement,:由,createStatement,方法创建,用来传送简单的,SQL,语句,PreparedStatement,:由,prepareStatement,方法创建,用来传送携带一到多个参数作为输入参数的,SQL,语句,CallableStatement,:由,prepareCall,方法创建,用来执行,SQL stored procedure,Statement,使用,Connection,对象可以获得一个,Statement,Statement,中的,executeQuery,方法可以使用,select,语句查询,并且返回一个结果集,ResultSet,通过遍历这个结果集,可以获得,select,语句的查寻结果,ResultSet,的,next(),方法会操作一个游标从第一条记录的前边开始读取,直到最后一条记录,executeUpdate(String,sql,),方法用于执行,DDL,和,DML,语句,可以,update,,,delete,操作。它的返回值是,sql,语句成功操作数据的件数,比如删除或更新了,2,条数据则返回值为,2,,如果,1,条也没有更新,则返回,0,Statement,PreparedStatement,PreparedStatement,在大批量的操作数据库的时候可以大大的提高效率,是一种预编译的方法,PreparedStatement,第一次执行确实比较慢,对于只执行一次的,SQL,语句选择,Statement,是最好的。,相反,如果,SQL,语句被多次执行选用,PreparedStatement,是最好的,.,PreparedStatement,例:使用,PreparedStatement,运行,sql,语句。,ResultSet,处理执行结果,查询语句,返回记录集,ResultSet,ResultSet,包含符合,SQL,语句中条件的所有行,并且它通过一套,get,方法提供了对这些行中数据的访问,ResultSet.next,方法用于移动到,ResultSet,中的下一行,使下一行成为当前行,ResultSet,的方法:,next(),,将游标往后移动一行,如果成功返回,true,;否则返回,false,getInt(“id,”),或,getSting(“name,”),,返回当前游标下某个字段的值,更新语句,返回数字,表示该更新影响的记录数,释,放连接时,一般先关闭,ResultSet,,然后关闭,Statement,(或者,PreparedStatement,);最后关,闭,Connection,Transaction,一个事务,(Transaction),由一个或多个已执行、完成的、将被提交或取消的,Statement,组成。,当,commit,或,rollbak,方法被调用时,当前的,Transaction,结束,开始另一个新的,Transaction,。,JDBC,管理事务方法:,Transaction,事物处理十分重要。,自动提款机、网上购物、甚至谷歌地图的问世都和它息息相关。,12.3.3,创建数据源,按照演示的方式组织教学:,1.,建立,Microsoft Access,数据库,2.,设置,JDBC,驱动程序,(P240),JDBC,程序的工作模板,try ,Class.forName(JDBC,驱动类,);, catch (,ClassNotFoundException,e) ,System.out.println,(,无法找到驱动类,);,try ,Connection con=,DriverManager.getConnection(JDBC,URL,数据库用户名,密码,);,Statement stmt =,con.createStatement,();,ResultSet,rs,=,stmt.executeQuery(SELECT,a, b, c FROM Table1);,while (,rs.next,() ,int x =,rs.getInt(a,);,String s =,rs.getString(b,);,float f =,rs.getFloat(c,);,con.close,();, catch (,SQLException,e) ,e.printStackTrace,();,获得数据库连接,发送,Sql,语句,处理结果,注册,JDBC,驱动,JDBC URL,用来标识数据库,必须处理的异常,释放资源,必须处理的异常,返回结果,12.4.1,数据库编程的基本过程,取得数据库连接。,执行,SQL,语句。,处理执行结果。,释放数据库连接。,12.4.2,数据库查询,【,例,12-1】,显示,myDB,数据库中,,student,表中的所有学生成绩。,import java.sql.*;,public class query,public static void,main(String,args,),try,/,加载,JDBC-ODBC,桥接驱动程序,Class.forName(sun.jdbc.odbc.JdbcOdbcDriver,);,catch (,ClassNotFoundException,ce,),System.out.println(SQLException1: +,ce.getMessage,( );,try,/,连接数据源,myDB,Connection con =,DriverManager.getConnection(jdbc:odbc:myDB,;,useUnicode,=false;,characterEncoding,=,gbk,);,Statement stmt =,con.createStatement,( );,ResultSet,rs,=,stmt.executeQuery(SELECT,* FROM student);,while (,rs.next,( ),System.out.print,(,编号,: +,rs.getString(no,) + t);,System.out.print,(,姓名,: + new String(rs.getBytes(2),gbk) + t );,System.out.print,(,性别,: + new String(rs.getBytes(3),gbk)+t );,System.out.println,(,成绩,: +,rs.getFloat(score,);,rs.close,( );,stmt.close,( );,con.close,( );,catch (Exception e),/,捕捉,JDBC,在执行过程中出现的异常,System.out.println(SQLException2: +,e.getMessage,( );,12.4.3,插入记录,【,例,12-2】,向数据库,myDB.mdb,中的,student,表插入一条记录,其数据为“,2005”,,“曹操”,“男”,,97,和“,2006”,,“孔明”,“男”,,99,。,核心代码:,String str1=INSERT INTO student VALUES(2005,曹操, ,男, , 97);,String str2=INSERT INTO student VALUES( 2006,孔明,男,99);,stmt.executeUpdate(str1);,stmt.executeUpdate(str2);,12.4.4,修改记录,【,例,12-3】,修改,student,表中,no,为,2001,的记录,将其,score,改为,90,。,/,将,no,为,2001,记录中的,score,改为,98,String,sqlstr,= UPDATE student SET score = 90 WHERE no=2001;,stmt.executeUpdate(sqlstr,);,12.4.5,删除记录,【,例,12-4】,删除,student,表中,no,值为,2001,的记录。,/,删除,no,为,2001,的记录,String,sqlstr,= DELETE FROM student WHERE no=2001;,stmt.executeUpdate(sqlstr,);,12.4.6,建立表,【,例,12-5】,在,myDB.mdb,的基础上,建立一个,homeAddress,家庭地址表,包含,no,(学号)、,name,(姓名)和,address,(家庭地址)三个属性。给表输入一条记录,其数据为:,2007,,,关羽,,,山西运城常平乡常平村,。,String,sqlstr,= create table,homeAddress(no,char(4), +,name char(8),null,address,char(40) null);,stmt.executeUpdate(sqlstr,);,sqlstr,= INSERT INTO,homeAddress(no,name,address,) +,VALUES( 2007,关羽,山西运城常平乡常平村,);,stmt.executeUpdate(sqlstr,);,12.4.7,获取表中指定属性的名和类型,【,例,12-6】,对数据库,myDB.mdb,中的,students,表,编程显示各个属性的名称及其类型。,/,将查询结果放入,Result,对象,rs,中,其中包含各列的名称以及数据,ResultSet,rs,=,stmt.executeQuery(SELECT,* FROM student);,/,获得,ResultSetMetaData,对象,该对象包含了列名和类型等属性,ResultSetMetaData,rsmd,=,rs.getMetaData,( );,/,getColumnCount,( ),方法获得,ResultSet,对象中列的个数,for(int,i=1; i=,rsmd.getColumnCount,( ); i+),/,getColumnName(i,),获得,ResultSet,对象中第,i,列的名称和类型,System.out.println,(,rsmd.getColumnName(i,) + , +,rsmd.getColumnTypeName(i,) );,12.5,数据库编程综合举例,【,例,12-7】,学生信息管理系统。采用,JDBC-ODBC,数据库接口,完成对后台数据库的插入、删除、修改、查询等,SQL,操作,程序界面美观,易于操作。,注意:,见教材和程序示例,注意分析。,【,例,12-7】,部分运行界面,对开发软件的体会:,尽管,NetBeans,6.9.1,软件很优秀,但在程序调试中发现,其在汉字处理方面还有不足。在此方面,,Eclipse,比它好。建议读者在数据库编程学习中,用更高版本的,NetBeans,开发工具。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!