28JAVA与数据库2JDBC详解.docx

上传人:b****4 文档编号:6979057 上传时间:2023-05-10 格式:DOCX 页数:13 大小:157.99KB
下载 相关 举报
28JAVA与数据库2JDBC详解.docx_第1页
第1页 / 共13页
28JAVA与数据库2JDBC详解.docx_第2页
第2页 / 共13页
28JAVA与数据库2JDBC详解.docx_第3页
第3页 / 共13页
28JAVA与数据库2JDBC详解.docx_第4页
第4页 / 共13页
28JAVA与数据库2JDBC详解.docx_第5页
第5页 / 共13页
28JAVA与数据库2JDBC详解.docx_第6页
第6页 / 共13页
28JAVA与数据库2JDBC详解.docx_第7页
第7页 / 共13页
28JAVA与数据库2JDBC详解.docx_第8页
第8页 / 共13页
28JAVA与数据库2JDBC详解.docx_第9页
第9页 / 共13页
28JAVA与数据库2JDBC详解.docx_第10页
第10页 / 共13页
28JAVA与数据库2JDBC详解.docx_第11页
第11页 / 共13页
28JAVA与数据库2JDBC详解.docx_第12页
第12页 / 共13页
28JAVA与数据库2JDBC详解.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

28JAVA与数据库2JDBC详解.docx

《28JAVA与数据库2JDBC详解.docx》由会员分享,可在线阅读,更多相关《28JAVA与数据库2JDBC详解.docx(13页珍藏版)》请在冰点文库上搜索。

28JAVA与数据库2JDBC详解.docx

28JAVA与数据库2JDBC详解

《java程序设计》讲义

JAVA与数据库

2、JDBC详解

教学重点

Statement及其子接口的区别

Statement的常用方法。

SQL注入的漏洞演示

PreparedStatement的优点,占位符及运行原理。

PreparedStatement的常用方法。

Properties配置文件的使用方法。

教学难点

数据库性能和安全意识,SQL注入,占位符,事务和批处理

教学目标

掌握Statement的接口及其子类

●PreparedStatement

●CallableStatement

熟练掌握常用的Statement的方法

熟练PreparedStatement的使用

熟悉SQL注入概念

掌握MySQL的数据类型与JAVA数据类型的对应

掌握批处理及事务的概念

1、JDBC简介复习

●时间:

10分钟

●教学方法:

提问

1)、JDBC的概念及意义是什么?

2)、JDBC是谁提供的?

它是由一组接口和类组成的,常用的接口和类有哪些?

3)、MySQL的驱动包是谁提供的?

这个驱动包的内容是什么?

4)、JAVA通过JDBC连接数据库的步骤有那几步?

●引入MySQL的驱动包5.1.37

●建立一个DBUtil工具类,用来提供驱动注册、获取数据库连接、释放资源的操作

●通过DBUtil的getConnection方法获得数据库连接conn

●通过conn获得一个Statement对象,用来发送SQL给数据库服务器

●如果是select操作,通过ResultSet处理结果集

●通过DBUtil的release释放资源

5)、资源释放的顺序是什么?

2、Statement详解

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

1)、Statement接口

Statement接口只能用来执行静态SQL,即不带参数的的SQL,获得Statement的方法有以下几种:

返回 Statement 的 java.sql 中的方法

 Statement

Connection.createStatement() 

          创建一个 Statement 对象来将SQL语句发送到数据库。

 Statement

Connection.createStatement(int resultSetType,int resultSetConcurrency) 

          创建一个 Statement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。

 Statement

Connection.createStatement(int resultSetType,int resultSetConcurrency,int resultSetHoldability) 

          创建一个 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。

 Statement

ResultSet.getStatement() 

          获取生成此 ResultSet 对象的 Statement 对象。

Statement的发送SQL语句给数据库的方式分为:

executeQuery、executeUpdate

课堂实例:

完成jdbcDemo工程中的StudentDAO接口设计

增加一条student数据

删除一条student数据

修改一条student数据

查询数据库中的全部数据

查询数据库中学生人数

2)、SQL注入

例如,在数据库中给student表增加一个password属性

模拟登录操作

控制台提示用户输入学号,等待用户输入

控制台提示用户输入密码,等待用户输入

系统获取学号和密码,判断登录是否成功

将登录结果显示在控制台上

publicclassSQLInjoin{

publicstaticvoidmain(String[]args){

Connectionconn=DBUtil.getConnection();

Statementstmt=null;

ResultSetrs=null;

Stringsno="";

Stringpassword="";

Scannersc=newScanner(System.in);

System.out.println("请输入学号");

sno=sc.nextLine();

System.out.println("请输入密码");

password=sc.nextLine();

try{

stmt=conn.createStatement();

Stringsql="select*fromstudentwheresno='"+sno+"'andpassword='"+password+"'";

System.out.println(sql);

rs=stmt.executeQuery(sql);

if(rs.next()){

System.out.println("登录成功");

}else{

System.out.println("登录失败");

}

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

DBUtil.release(rs,stmt,conn);

}

}

}

3)、PreparedStatement接口

 ResultSet

executeQuery() 

          在此 PreparedStatement 对象中执行SQL查询,并返回该查询生成的 ResultSet 对象。

 int

executeUpdate() 

          在此 PreparedStatement 对象中执行SQL语句,该语句必须是一个SQL数据操作语言(DataManipulationLanguage,DML)语句,比如 INSERT、UPDATE 或DELETE 语句;或者是无返回内容的SQL语句,比如DDL语句。

课堂示例:

如何使用PreparedStatement完成增删改查。

3、存储过程

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

存储过程的调用:

存储过程是一种特殊的SQL语句,用于对数据库进行操作。

存储过程放在数据库中,它可以把复杂的查询与客户端隔离,而只给客户提供必要的查询接口。

使用存储过程的好处是性能好,他在服务器上执行,离数据最接近,比直接发送SQL语句速度要快得多。

存储过程的好处:

1.由于数据库执行动作时,是先编译后执行的。

然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

publicclassCallProcedure{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

Connectionconn=null;

Statementstmt=null;

try{

//动态导入数据库的驱动

Class.forName("com.mysql.jdbc.Driver");

//获取数据库链接

conn=DriverManager.getConnection(

"jdbc:

mysql:

//localhost:

3306/stu","root","root");

//创造调用存储过程的SQL

Stringsql="{CALLtest_procedure()}";

//执行调用存储过程的SQL语句

stmt=conn.prepareCall(sql);

stmt.execute(sql);

System.out.println("OK!

");

}catch(Exceptione){

e.printStackTrace();

}finally{

//关闭Statement

try{

stmt.close();

}catch(Exceptione){

}

//关闭Connection

try{

conn.close();

}catch(Exceptione){

}

}

}

}

4、ResultSet结果集与MySQL数据类型

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

BIT

(1)(newinMySQL-5.0)

BIT

java.lang.Boolean

BIT(>1)(newinMySQL-5.0)

BIT

byte[]

TINYINT

TINYINT

java.lang.BooleaniftheconfigurationpropertytinyInt1isBitissettotrue(thedefault)andthestoragesizeis1,orjava.lang.Integerifnot.

BOOL,BOOLEAN

TINYINT

SeeTINYINT,aboveasthesearealiasesforTINYINT

(1),currently.

SMALLINT[(M)][UNSIGNED]

SMALLINT[UNSIGNED]

java.lang.Integer(regardlessifUNSIGNEDornot)

MEDIUMINT[(M)][UNSIGNED]

MEDIUMINT[UNSIGNED]

java.lang.Integer,ifUNSIGNEDjava.lang.Long(C/J3.1andearlier),orjava.lang.IntegerforC/J5.0andlater

INT,INTEGER[(M)][UNSIGNED]

INTEGER[UNSIGNED]

java.lang.Integer,ifUNSIGNEDjava.lang.Long

BIGINT[(M)][UNSIGNED]

BIGINT[UNSIGNED]

java.lang.Long,ifUNSIGNEDjava.math.BigInteger

FLOAT[(M,D)]

FLOAT

java.lang.Float

DOUBLE[(M,B)]

DOUBLE

java.lang.Double

DECIMAL[(M[,D])]

DECIMAL

java.math.BigDecimal

DATE

DATE

java.sql.Date

DATETIME

DATETIME

java.sql.Timestamp

TIMESTAMP[(M)]

TIMESTAMP

java.sql.Timestamp

TIME

TIME

java.sql.Time

YEAR[(2|4)]

YEAR

IfyearIsDateTypeconfigurationpropertyissettofalse,thenthereturnedobjecttypeisjava.sql.Short.Ifsettotrue(thedefault)thenanobjectoftypejava.sql.Date(withthedatesettoJanuary1st,atmidnight).

CHAR(M)

CHAR

java.lang.String(unlessthecharactersetforthecolumnisBINARY,thenbyte[]isreturned.

VARCHAR(M)[BINARY]

VARCHAR

java.lang.String(unlessthecharactersetforthecolumnisBINARY,thenbyte[]isreturned.

BINARY(M)

BINARY

byte[]

VARBINARY(M)

VARBINARY

byte[]

TINYBLOB

TINYBLOB

byte[]

TINYTEXT

VARCHAR

java.lang.String

BLOB

BLOB

byte[]

TEXT

VARCHAR

java.lang.String

MEDIUMBLOB

MEDIUMBLOB

byte[]

MEDIUMTEXT

VARCHAR

java.lang.String

LONGBLOB

LONGBLOB

byte[]

LONGTEXT

VARCHAR

java.lang.String

ENUM('value1','value2',...)

CHAR

java.lang.String

SET('value1','value2',...)

CHAR

java.lang.String

5、批处理Batch

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

批处理与非批处理分别插入2万条记录的性能比:

6、事务概念及处理

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

1)、什么是事务

publicclassRunInsert{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

Connectionconn=null;

Statementstmt=null;

try{

//动态导入数据库的驱动

Class.forName("com.mysql.jdbc.Driver");

//获取数据库链接

conn=DriverManager.getConnection(

"jdbc:

mysql:

//localhost:

3306/jdbc_teaching","root","");

//开启事务

conn.setAutoCommit(false);

//创造SQL语句

Stringsql="INSERTINTOuser_list(user_name,user_password)VALUES('Eric','123')";

//执行SQL语句

stmt=conn.createStatement();

stmt.executeUpdate(sql);

//提交事务

mit();

System.out.println("OK!

");

}catch(Exceptione){

e.printStackTrace();

//回滚事务

try{

conn.rollback();

}catch(Exceptione2){

}

}finally{

//关闭Statement

事务与批处理的混合使用,实际上不就是事务么?

publicclassRunInsertBench{

publicstaticvoidmain(String[]args){

Connectionconn=null;

Statementstmt=null;

try{

//动态导入数据库的驱动

Class.forName("com.mysql.jdbc.Driver");

//获取数据库链接

conn=DriverManager.getConnection(

"jdbc:

mysql:

//localhost:

3306/jdbc_teaching","root","");

//开启事务

conn.setAutoCommit(false);

//创造执行SQL语句的环境

stmt=conn.createStatement();

//添加处理进当前批次

stmt.addBatch("INSERTINTOuser_list(user_name,user_password)VALUES('Name789','234')");

stmt.addBatch("INSERTINTOuser_list(user_name,user_password)VALUES('Name567','234')");

//执行当前批次

stmt.executeBatch();

//提交事务

mit();

System.out.println("OK!

");

}catch(Exceptione){

e.printStackTrace();

//回滚事务

try{

conn.rollback();

}catch(Exceptione2){

}

}finally{

//关闭Statement

try{

stmt.close();

}catch(Exceptione){

}

//关闭Connection

try{

conn.close();

}catch(Exceptione){

}

}

}

}

7、properties配置文件

●时间:

15分钟

教学方法:

实际操作分析,讨论,解释

1、properties文件

url=jdbc:

mysql:

//202.196.38.108:

3306/stu

userName=root

passwd=root

driverName=com.mysql.jdbc.Driver

2、DBUtil工具类

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2