JavaWeb系列之十二(jdbc)



1.jdbc的简介

Java DataBase Connectivity;java数据库的链接

比如按一个显卡,就要需要显卡驱动,我们要安装数据库驱动,厂商会提供,提供一个jar包,sun公司提供和通用的接口,实现这个接口,这个接口就是jdbc,提供用于操作数据库的标准接口,

2.jdbc的应用

第一步:加载数据库的驱动 使用DriverManager里面registerDriver方法

第二步:创建链接 DriverManager.getConnection();

在方法里面有三个参数

第一个参数:要连接的是哪一个数据库

简写方式 jdbc:mysql:///day15

使用范围:如果连接的是本机,并且端口是3306

第二个参数:连接数据库用户名

第三个参数:密码

第三步:编写sql语句

第四步:执行sql语句

首先创建statement对象

通过对象里面方法执行sql

如果执行查询语句,使用executeQuery

查询返回是一个结果集 resultset

遍历结果集得到每一条记录

第五步:释放资源,谁最后打开,谁就最先关闭

3.jdbc的DriverManager对象

在sql包里面

主要用途:

第一个加载数据库的驱动,registerDriver会加载两次,通过mysql的源码,Driver类里面静态代码块里面是类加载的时候执行,一般使用放射数据库的驱动,Class.forName("com.mysql.jdbc.Driver");剩下的都是加载sql的包

第二个驱动获取数据库的链接

getConnection(String url;String user,String password)

第一个参数:要连接的是哪个数据库

第二个参数:连接数据库用户名

第三个参数:使用数据库密码

4.jdbc的Connection对象

在sql包里面

创建statement对象:createstatement():表示执行sql语句的对象

创建prepareStatement对象:prepareStatement(String sql) :表示预编译的对象

创建CallableStatement对象: prepareCall(String sql)  :执行存储过程的对象

setAutoCommit(boolean autoCommit) :表示是否会自动提交,设置成false不会自动提交,默认情况下是自动提交

commit() :表示提交事务

rollback() :表示回滚事务

5.jdbc的statement对象

主要功能:执行sql语句

方法:

执行查询操作时候:ResultSet executeQuery(String sql)

返回是ResultSet结果集,遍历结果集得到每一条记录

执行增加 修改 删除时候:int executeUpdate(String sql)

返回int,成功的记录数

执行sql语句的方法:boolean execute(String sql)

返回布尔类型,

如果第一个结果为 ResultSet 对象(执行查询操作),则返回 true;

如果其为更新计数或者不存在任何结果,则返回 false

6.jdbc的ResultSet对象

执行查询操作时候,返回ResultSet

遍历结果集的方法:next()

while(rs.next()){ }

得到每一行里面内容:

比如得到字段是int类型,使用方法getInt(“字段名称”)

比如得到字段是string类型,使用方法getString(“字段名称”)

如果不知道字段是什么类型,使用方法getObject(String columnLabel)

使用getXX方法得到值,可以写字段名称,另外可以写字段的位置,但是位置从1开始的

结果集的遍历

首先rs在第一行之前,当执行了next方法之后,一行一行进行向下遍历

在默认情况下,结果集只能向下通过,不能修改遍历之后的值

但是可以设置结果集可以滚动,同时可以修改

结果集的遍历

7、jdbc的滚动结果集(了解)

如果想要结果集是滚动的,表里面必须有主键

结果集类型

* TYPE_FORWARD_ONLY : 结果集只能向下

* TYPE_SCROLL_INSENSITIVE : 结果集可以滚动

* TYPE_SCROLL_SENSITIVE : 结果集可以滚动

结果集并发策略

* CONCUR_READ_ONLY : 结果集不可以修改

* CONCUR_UPDATABLE : 结果集可以修改

组合:

* TYPE_FORWARD_ONLY  CONCUR_READ_ONLY : 结果集只能向下且不可修改(默认)

* TYPE_SCROLL_INSENSITIVE  CONCUR_READ_ONLY : 结果集可滚动,但不可修改.

* TYPE_SCROLL_SENSITIVE  CONCUR_UPDATABLE : 结果集可滚动,而且可修改.

在创建statement时候,设置滚动的结果集

createStatement(int resultSetType, int resultSetConcurrency)

方法里面的两个参数,使用ResultSet里面的常量传递

8、jdbc的释放资源

原则:谁最后打开,谁最先关闭

之前关闭连接的方法会产生一个问题,如果程序执行过程中出现了异常,关闭语句不会执行到

写finally,表示含义是无论是否出现异常,finally总会被执行到,需要把关闭的语句写到finally里面

//关闭连接

if(rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

//让jvm快速回收

rs = null;

}

10、封装jdbc的工具类

读取properties配置文件有两种方式:

读取properties配置文件的第一种方式:使用类加载器读取(只能读取classes下面的文件)

//因为文件在src下面,部署到tomcat里面会在classes里面

//读取classes里面的文件,使用类加载器读取 properties

InputStream in = MyJDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");

//读取properties文件

Properties p = new Properties();

p.load(in);

drivername = p.getProperty("drivername");

url = p.getProperty("url");

username = p.getProperty("username");

password = p.getProperty("password");

一般在开发都使用第二种方式读取 (使用ResourceBundle工具类读取properties配置文件)

ResourceBundle.getBundle("配置文件名称,没有后缀名").getString("配置文件里面的值的名称");

static {

drivername = ResourceBundle.getBundle("db").getString("drivername");

url = ResourceBundle.getBundle("db").getString("url");

username = ResourceBundle.getBundle("db").getString("username");

password = ResourceBundle.getBundle("db").getString("password");

}

使用范围:只能读取classes里面的properties配置文件

如果想要在工具类加载时候就读取配置文件,同时赋值,

通过写静态代码块实现 static { 里面放读取配置文件的代码}

11、javaee的dao模式

回顾mvc开发模式(也称为模型二)

m:模型,使用javabean技术实现封装数据

v:视图,使用jsp技术实现显示数据

c:控制器:使用servlet技术实现管理操作,什么数据显示到哪个jsp页面中

dao:用于操作数据库的模式

画图分析dao模式

javaee的结构:客户端层,web层,业务逻辑层,持久化层

web层,业务逻辑层,持久化层 这三层称为javaee的三层结构

dao模式:使用在持久化层的模式,专注于对数据库进行操作模式(crud)

首先创建接口,在接口里面定义操作数据库的方法

其次创建类实现这个接口里面的操作数据库的方法

在业务逻辑层通过dao提供的接口进行操作数据库

jsp+servlet+javabean+jdbc架构:可以实现目前所能看到的所有的应用

一般企业中不使用这种架构,因为这个架构太底层了(代码太多了)

一般企业里面使用框架实现系统 ,一般常用的框架 SSH: struts2 spring hibernate

在web层一般使用struts2框架

在业务逻辑层一般使用spring框架

在持久化层一般使用hibernate框架

mvc和dao的关系

这两个都是模式,这两个模式是不同开发时期,由不同的人提出来的。mvc是由开发人员提出的,

dao模式是由sun公司提出的。mvc整体的架构模式,dao专注于持久化层(操作数据库的模式)

可以在mvc模式里面使用dao模式专注于操作数据库

13、SQL注入的漏洞的防范

select * from stu where sname=‘"+user.getUsername()+"‘ and password=‘"+user.getPassword()+"‘"

select * from stu where sname=‘zhangsan‘ or ‘1=1‘ and password=‘qqq‘"

使用prepareStatement对象防止sql注入

预编译sql的对象:预先把sql在执行之前先编译

创建prepareStatement

PreparedStatement prepareStatement(String sql)

代码

String sql = "select * from stu where sname=? and password=?";

//预编译sql

pst = conn.prepareStatement(sql);

//传递参数,第一个参数表示第一个参数 开始从1

pst.setString(1, user.getUsername());

pst.setString(2, user.getPassword());

//执行sql

rs = pst.executeQuery();

14、jdbc的批处理操作(了解)

批处理:同时执行多条sql语句

方法

addBatch(sql):把sql语句加载到批处理操作里面

executeBatch():执行批处理操作

代码

//创建statement对象

stmt = conn.createStatement();

//把这些sql加到批处理里面

stmt.addBatch(sql1);

stmt.addBatch(sql2);

stmt.addBatch(sql3);

//执行多个sql

stmt.executeBatch();

时间: 2024-10-17 00:08:06

JavaWeb系列之十二(jdbc)的相关文章

javaweb学习总结(三十二)——JDBC学习入门【转】

原文地址:javaweb学习总结(三十二)——JDBC学习入门 一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后 才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数 据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作

C++语言笔记系列之十二——C++的继承

C++的继承 1.继承方式 public(公有继承) 派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员. 派生类的对象只能访问基类的public成员. protected(保护继承),private(私有继承) 派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员. 派生类的对象不能访问基类的任何成员. 2.例子 example 1: #include <iostream.h> clas

hbase源码系列(十二)Get、Scan在服务端是如何处理?

继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Delete一样,上一篇我本来只打算写Put的,结果发现Delete也可以走这个过程,所以就一起写了. Get 我们打开HRegionServer找到get方法.Get的方法处理分两种,设置了ClosestRowBefore和没有设置的,一般来讲,我们都是知道了明确的rowkey,不太会设置这个参数,它默认是false的. if (get.hasClosestRowBef

quick-cocos2d-x 学习系列之十二 关于websocket

quick-cocos2d-x 学习系列之十二 关于websocket 1.  概念 百度百科:WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可

Dubbo学习系列之十二(Quartz任务调度)

Quartz词义为"石英"水晶,然后聪明的人类利用它发明了石英手表,因石英晶体在受到电流影响时,它会产生规律的振动,于是,这种时间上的规律,也被应用到了软件界,来命名了一款任务调度框架--Quartz.现实软件逻辑中,周期任务有着广泛的存在,如定时刷新配置信息,定期盘点库存,定时收发邮件等,至于定时任务处理,也有Spring的ScheduledThreadPool,还有基于注解@Scheduled的方式,ScheduledThreadPool主要是基于相对时间,不方便控制,而@Sche

javaweb学习总结(三十二)——JDBC学习入门

一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这

JavaWeb学习总结(十二)——Session

一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. Session技术把用户的数据写到用户独占的sess

avaweb(三十二)——JDBC学习入门

一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道,如下所示: 1.2.JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这

JavaWeb学习总结(十二)——Session【转】

一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况 下).因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用 户的session中取出该用户的数据,为用户服务. 二.Session和Cookie的主要区别 Cookie是把用户的数据写给用户的浏览器. Session技术把用户的数据写到用户独占的se