版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
§9-1学生信息的数据库管理Java面向对象程序设计教学目标任务分析
使用数据库管理、维护数据,是程序设计的重要组成部分,也是软件开发中实现数据持久化的普遍方法。本任务使用MySQL数据库对学生信息管理系统中的学生信息进行存储,利用JDBC实现对学生信息数据库的基本操作。
教学内容1JDBC数据库访问连接数据库2获取查询结果21数据库基本操作JDBC数据库访问
JDBC(JavaDataBaseConnectivity,java数据库连接)是一系列用于执行SQL语句的JavaAPI,它由一组用Java语言编写的类和接口组成,可以为各种不同的数据库提供统一访问标准,实现了Java应用程序的统一访问,提高了应用程序的可移植性。JDBC数据库访问JDBCAPI主要位于Java.sql及javax.sql包中,该包定义了一系列访问数据库的类和接口,其中常用类和接口及所提供主要功能如下。1)DriverManager类:用于加载JDBC驱动程序、创建与数据库的连接。2)Connection接口:用于处理与特定数据库的连接,一个Connection对象就表示一个数据库连接,只有获得该对象,才能对数据库进行访问。如果应用程序中需要访问多个数据库,就要为每个数据库创建一个对应的连接对象。3)Statement接口:用于执行静态的SQL语句,并返回一个数据库处理结果对象。4)PreparedStatement接口:用于执行预编译的SQL语句,同样返回一个数据库处理结果对象。5)ResultSet接口:表示数据库数据处理的结果集,负责保存Statement或PreparedStatement执行查询命令后所产生的结果集。JDBC数据库访问创建Statement对象Statementstmt=conn.createStatement();加载并注册驱动程序连接数据库1Class.forName(DRIVER);2
连接数据库
conn=DriverManager.getConnection(URL,UNAME,UPWD);
23执行SQL语句ResultSetrs=stmt.executeQuery("SELECT*FROMstudents5WHEREsex=1");4处理结果集5关闭资源,释放连接6数据库基本操作表9-1学生成绩(student_inf)数据表idnamegenderage1林林女162田田女173李明男204王平男175赵海男181.搭建数据库环境CREATEDATABASEstudent;CREATETABLEstudent_inf(idINTPRIMARYKEYAUTO_INCREMENTNOTNULL,nameVARCHAR(50),genderVARCHAR(2),ageINT);2.创建Statement对象要创建Statement对象,需要先创建一个Connection对象,假设对象名为conn,然后使用下面的语句创建一个Statement对象:Statementstmt=conn.createStatement();Statement接口用于执行不带参数的简单SQL语句获取查询结果当执行查询操作时,通常最感兴趣的是查询结果。executeQuery方法返回一个ResultSet对象,用来存放数据库查询操作获得的结果,它包含了满足查询条件的所有记录。ResultSet提供了一系列的getXXX(intcolumnIndex)和getXXX(StringcolumnLabel)方法来获取各字段的值,其中XXX对应字段的类型,getXXX()中的参数可以是字段的序号,也可以是字段名。获取查询结果通过循环遍历查询结果集合中的所有记录,从而获取各个字段的值。如,执行以下语句:ResultSetrs=stmt.executeQuery(“SELECT*FROMstudent_inf”);rs中则包含了student_inf表中所有记录,可以使用类似如下形式的循环结构获取所有记录信息:while(rs.next()){ Intid=rs.getInt(1);//数字对应字段顺序 Stringname=rs.getString(“name”);//字符串对应字段名 Stringgender=rs.getString(3);Intage=rs.getInt(“age”);System.out.println(id+"\t"+name+"\t"+gender+"\t"+age);}到此,我们就掌握了JDBC进行数据库访问的基本方法。获取查询结果Connectioncon=newDBCon().getConnection(); Statementstmt=null; ResultSetr=null; inti; Stringsql;
sql="insertintostudent_infvalues(3,'张华','男',25)"; stmt=con.createStatement();
i=stmt.executeUpdate(sql);//增加一条记录
i=stmt.executeUpdate("insertintostudent_infvalues(4,'平平','女',20)");//增加一条记录
sql="updatestudent_infsetname='明明'whereid=2";
i=stmt.executeUpdate(sql);//修改一条记录sql="deletefromstudent_infwhereid=1";
i=stmt.executeUpdate(sql);//删除一条记录sql="select*fromstudent_inf";
r=stmt.executeQuery(sql);//查询记录while(r.next()){ System.out.print(r.getInt("id")+"\t"); System.out.print(r.getString("name")+"\t"); System.out.print(r.getString(3)+"\t"); System.out.print(r.getInt(4)+"\n"); }任务实施完成学生信息管理系统,学生信息数据库存储任务的基本步骤。1)搭建数据库环境。在MySQL中建立数据库student、数据表student_inf。2)在“学生信息管理系统”项目中导入并注册MySQL数据库驱动jar包。3)编写数据库连接工具类。3)编写数据库访问类,该类包括对数据库进行增、删、改、查操作的方法。设计系统登录程序,根据输入的用户名和密码查询用户信息,用户名和密码正确允许登录系统,否则提示错误信息。按“工单9-1”要求完成任务同步训练§9-2提升学生信息数据库管理效率Java面向对象程序设计教学目标任务分析在任务9.1的实施中,我们应该发现,使用Statement对象向数据库传送SQL命令时,每条SQL命令在程序中都只能是一个具体的操作,当要改变SQL命令时,每次都需要去修改程序源代码,降低程序执行效率,程序也不具备通用性,为此我们需要对此程序进行改进,使用PreparedStatement对象来向数据库传送SQL命令。教学内容1PreparedStatement接口CallableStatement接口23事务PreparedStatement接口
PreparedStatement接口继承自Statement,可执行预编译的SQL语句,可向数据库传递带有可变参数的SQL命令,SQL命令中使用占位符“?”代替参数,然后通过setXXX方法为SQL命令中的参数赋值,提高了应用程序的通用性。常用的PreparedStatement传送SQL命令的方法主要有以下两个:ResultSetexecuteQuery():用于执行查询数据库的SQL命令,返回一个表示查询结果集的ResultSet对象。intexecuteUpdate():用于执行非查询的SQL命令,返回一个整数,表示受SQL命令影响的记录条数。PreparedStatement接口实现SQL语句的预处理首先需要预处理一个待执行的SQL语句模板然后为该模板进行参数绑定最后将用户提交的数据内容发送给MySQL执行,完成预处理的执行PreparedStatement接口PreparedStatement接口进行数据库访问的步骤,主要包括。1)通过Connection对象conn创建PreparedStatement对象。
PreparedStatementpstm=conn.preparedStatement(带参数的SQL命令字符串);
如:Stringsql="insertintostudent_infvalues(?,?,?,?)";PreparedStatementpstm=conn.preparedStatement(sql);2)使用一系列set方法设置参数值。如:pstm.setInt(1,5);pstm.setString(2,"李明");pstm.setString(3,"男");pstm.setInt(4,15);
F注意:设置数据的类型必须与对应占位符“?”所代表的数据类型一致。3)调用PreparedStatement方法,执行SQL语句。如:pstm.executeUpdate();PreparedStatement接口publicstaticvoidmain(String[]args)throwsException{//调用课本例9-1中DBCon类的getConnection()创建连接对象 Connectioncon=newDBCon().getConnection(); PreparedStatementpstm=null; ResultSetr=null; inti;
//修改一条记录sql="updatestudent_infsetname=?whereid=?";pstm=con.prepareStatement(sql);
pstm.setString(1,"强强");pstm.setInt(2,5);i=pstm.executeUpdate();pstm.close(); con.close(); }CallableStatement接口
CallableStatement接口继承自PreparedStatement接口,用于执行数据库的存储过程。
在CallableStatement对象中,有一个通用的成员方法call,这个方法用于以名称的方式调用数据库中的存储过程。
调用存储过程的语法为:{callprocedure_name} //存储过程不需要参数{callprocedure_name[(?,?,?,…)]} //存储过程需要若干个参数{?=callprocedure_name[(?,?,?,…)]}//存储过程需要若干个参数,并返回一个结果参数其中,procedure_name为存储过程的名字,方括号中的内容是可选的多个用于存储过程执行的参数。CallableStatement接口
CallableStatement对象的创建方法如下:
CallableStatementcstmt=conn.prepareCall(“{callgetTestData(?,?)}”);
向存储过程传递执行所需要参数的方法是通过setXXX语句来完成的。例如,我们可以将两个参数设置如下:cstmt.setByte(1,25);cstmt.setFloat(2,9.49f);CallableStatement接口
如果需要存储过程返回运行结果,则需要调用registerOutParameter方法设置存储过程的输出参数,然后调用getXXX方法来获取存储过程的执行结果。例如,cstmt.registerOutParameter(1,java.sql.Types.TINYINT);cstmt.registerOutParameter(2,java.sql.Types.INTEGER);ResultSetrs=cstmt.executeUpdate();bytea=cstmt.getByte(1);intb=cstmt.getInt(2);CallableStatement接口
创建一个带参数的存储过程,存储过程向学生信息表STUDENT_INF中添加一条记录,并返回表中记录的数量,请通过程序调用该存储过程。//创建存储过程p1DELIMITER$$CREATEPROCEDUREp1(INnameVARCHAR(10),OUTconINT)BEGININSERTINTOSTUDENT_INF(id,name,gender,age)VALUES(6,name,’女’,17);SELECTcount(1)INTOconFROMSTUDENT_INF;END$$DELIMITER;CallableStatement接口importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.Types;publicclassExample9_4{publicstaticvoidmain(String[]args)throwsException{ Connectioncon=newDBCon().getConnection();//创建连接 CallableStatementcs=con.prepareCall("CALLp1(?,?);"); cs.setString(1,"乐乐"); cs.registerOutParameter(2,Types.INTEGER); cs.execute();ResultSetset=cs.getResultSet();//获取输出结果 while(set.next()){System.out.print(set.getString("NAME")+""); } //获取输出参数的结果 inti=cs.getInt(2); System.out.print("i:"+i); }}加个执行结果截图???事务
日常生活中,如果我们需要将资金从一个银行账户转到另一个账户。此时,一个非常重要的问题就是我们必须同时将资金从一个账户取出并且存入另一个账户,如果在将资金存入其它账户时系统发生了故障,那么我们必须撤销取款操作。对于此类应用,在进行数据库访问中,为了确保数据库完整性,可以将一组命令构成一个事务(transaction)。
当事务中所有命令都顺利执行后,事务可以被提交(commit)。否则,如果其中某个命令遇到错误,那么事务将被撤回(rollback),就好像任何命令都没有被执行过一样。事务
默认的情况下,数据库连接处于自动提交模式。每个SQL命令一旦被执行,便被立即提交给数据库,这时就无法对它进行撤回操作。在使用事务时,需要首先关闭这个默认值:conn.setAutoCommit(false);使用事物操作,可以使用通常的方法创建一个Statement语句对象:Statementstmt=conn.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高考英语3500词汇第64天 swing-test(学生版)
- 氨气中毒病因介绍
- (高考英语作文炼句)第3篇译文老师笔记
- 开题报告:指向核心素养的青少年音乐创造力培养模式研究
- 悬挑式脚手架专项施工方案(专家论证)
- 呼和浩特市某实验楼工程施工组织设计方案
- 开题报告:学校家庭社会协同育人机制研究
- 《催化剂表征与测试》课件
- 开题报告:新工科导向下民办高校OBE实验实训教学规范的构建与实践-以生态环境产业学院为例
- 《检测综合应用》课件
- 保险公司案件防控工作方案
- 心血管疾病的介入治疗课件
- 人工智能在生命科学领域的应用培训
- 道路工程监理大纲
- 中国古典舞身韵智慧树知到期末考试答案章节答案2024年泰山学院
- MOOC 信号与线性系统-华中科技大学 中国大学慕课答案
- 工程安全质量管理
- 细分市场案例分析
- 2024年广西计算中心有限责任公司招聘笔试参考题库附带答案详解
- 升压站共建及分摊合同模板
- 幼儿园医生助教医学知识培训课件
评论
0/150
提交评论