一、JDBC的概述
###<1>概念
JDBC:java database connection ,java数据库连接技术
是java内部提供的一套操作数据库的接口(面向接口编程),实现对数据库的统一访问。

###<2>作用
是连接java应用程序和数据库的一个桥梁和纽带
体现了java的one write , run anywhere
![](1.png)

###<3>组成
DriverManager类:驱动管理类,用于注册驱动
Connection接口:数据库连接接口,和数据库连接
Statement接口:操作数据库中数据的接口,执行sql语句
PreparedStatement接口:操作数据库中数据的接口,执行sql语句,预处理的能力
ResultSet接口:结果集接口,封装了查询的结果数据
![](2.png)

# 二、通过JDBC实现对数据库的操作
###<1>准备
1. 创建一张表
create table person(
id smallint primary key auto_increment,
name varchar(20)not null,
age tinyint unsigned not null,
gender enum('男','女'),
shows varchar(50)
)

2. 创建一个Bean对象
class Person{
int id;
}

3. 导入MySQL数据库厂商提供的驱动

4. 操作数据,使用JDBC访问数据库的步骤:(记住)
1. 加载数据库驱动程序
2. 获取数据库连接对象
3. 编写SQL语句
4. 获取Statement对象,执行SQL语句
5. 处理结果集数据
6. 释放资源

###<2>实现:使用jdbc实现数据插入操作
1. 加载数据库驱动程序
Class.forName("com.mysql.jdbc.Driver");
2. 获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=123");
3. 编写SQL语句
String insertSQL = "insert person value(null,'北川杏树',39,2,'一个粗犷的老男人')";
4. 获取Statement对象,执行SQL语句
Statement st = conn.createStatement();
st.executeUpdate(insertSQL);
5. 处理结果集数据
6. 释放资源
st.close();
conn.close();

###<3>DriverManager类介绍
作用:注册数据库驱动
获取数据库连接对象

3.1 注册数据库驱动,方式一:
DriverManager.registerDriver(new 具体的驱动对象);

注册数据库启动,方式二:
Class.forName("驱动的全路径");

特点:方式一,程序的依赖性强,驱动注册了两次
方式二,程序更灵活,拓展性强

3.2 获取连接对象
DriverManager.getConnection(String url,String username,String password);
DriverManager.getConnection(String url,Properties info);
DriverManager.getConnection(String url_user_pwd);

参数一:连接数据库的URL
URL的组成:协议 + ip地址 + 端口号 + 数据库名称
例如:jdbc:mysql 127.0.0.1 3306 db1

参数二:用户名,root
参数三:密码,123

###<4>Connection接口介绍:
作用:和数据库建立起连接
方法:Statement createStatement();
创建一个Statement对象,执行SQL语句

事务操作的方法:

###<5>Statement接口介绍:
作用:执行SQL语句(将SQL语句发送到数据库)
返回结果集对象
方法:
int executeUpdate(String sql) 更新数据
ResultSet executeQuery(String sql) 查询数据

批处理方法:
void addBatch(String sql)
将SQL语句添加到Statement的执行列表中
int[] executeBatch()
将一批命令提交给数据库执行

###<6>ResultSet接口介绍:
作用:用来封装结果集数据,内部含有一个游标,默认指向数据前
方法:
boolean next() 将游标从当前位置向下移动一行
getObject(String columnName) 获取数据
getObject(int columnIndex) 获取数据

注意1:结果数据中字段的顺序和数据库表中字段顺序没有关系。
通过getObejct(int index)方式获取数据时,从1开始
推荐使用getObject(String columnName) 获取数据
![](3.png)

注意2:
在finally代码块中释放资源
在释放资源之前需要做非空判断

# 练习
使用JDBC实现数据的插入操作
使用JDBC实现对数据库数据的修改和删除

# 三、封装JDBC访问数据库的工具类(重点)
优化代码:提高代码的重用性,将一个公用的代码提取成方法

// 加载驱动
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

// 获取数据库连接对象
public static Connection getConnection(String url, String root, String pwd) throws SQLException {
Connection conn = DriverManager.getConnection(url,root,pwd);
return conn;
}

// 释放资源
public static void closeRes(Connection conn, Statement st, ResultSet rs) {
if (rs != null)rs.close();
if (st != null)st.close();
if (conn != null)conn.close();
}

提取数据库配置信息:
java中提供了properties配置文件,存储配置信息。
文件类型.properties,文件内容:键=值 的方式存储信息。
使用#注释信息

1.编写MySQL相关参数的配置文件
mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/db1
mysqlUser=root
mysqlPwd=123

2. 加载配置文件中的数据
// 加载驱动
static{
//加载配置文件
//参数一:配置文件的路径
ResourceBundle rb = ResourceBundle.getBundle("cn.xdl.demo.db_config");
USER = rb.getString("mysqlUser");
PWD = rb.getString("mysqlPwd");
URL = rb.getString("mysqlURL");
DRIVER = rb.getString("mysqlDriver");

System.out.println(USER+","+PWD);

try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

# 练习
使用JDBC查询数据库中的数据
封装操作数据库的工具类

# 四、使用JDBC实现登陆和注册功能
分析:
cn.xdl.client
ClientMain
cn.xdl.entity
UserBean
cn.xdl.service 业务逻辑处理包
ApplicationService
cn.xdl.util
DBUtils

创建用户表:
create table user(
id int primary key auto_increment,
user varchar(20) not null unique,
pwd varchar(20) not null
)

# 练习
实现注册和登陆功能

# 五、防止SQL注入
###<1>PreparedStatement接口介绍:
使用:
在预处理操作中使用'?'进行占位操作。
执行sql语句时,进行数据的动态设置

好处:安全较高
性能能搞,书写灵活

方法:
PreparedStatement pst = Connection对象.preparedStatement(sql语句);
补全:
setObject(位置,数值);
注意,位置从1开始

执行:
ResultSet rs = pst.executeQuery();
int result = pst.executeUpdate();

一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入的更多相关文章

  1. jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作

    首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...

  2. Entity Framework 程序设计入门二 对数据进行CRUD操作和查询

    前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...

  3. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  4. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  6. MySQL JDBC事务处理、封装JDBC工具类

    MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...

  7. jdbc工具类2..0

    一.创建外部文件 url=jdbc:mysql:///qy66 use=root password=root driver=com.mysql.jdbc.Driver 二.创建工具类 package ...

  8. JavaWeb(四):JDBC

    数据持久化(persistence) 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各 ...

  9. JDBC 及 sql注入问题

    一.相关概念 1.什么是JDBC JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...

随机推荐

  1. Linux下svn服务器搭建

    初次在linux上搭建svn服务器,本来以为很繁琐,其实很简单,主要分为以下几个步骤: 1.  首先安装subversion,命令:yum install subversion 2.  创建svn仓库 ...

  2. RabbitMQ上手记录–part 4-节点集群(单机多节点)

    现在互联网应用动不动就说要HA,好像不搞个HA都不好意思说自己的应用能承载高并发,大用户量访问.RabbitMQ这个经典的消息组件,也必然逃不掉单点失效的尴尬局面.当然在RabbitMQ在被广泛应用于 ...

  3. [codeup] 2046 八皇后

    题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...

  4. ie,你还能再浪一点不

    一个div,设置了高度,并且溢出滚动 各位观众,当点击滚动条的时候,event.target应该是什么呢? 火狐,chrome都认为是点击了div,这个也很好理解,他是div的滚动条,自然应该算div ...

  5. 关于C#判断是否是数字的正则式

    有话要说 今天我同事突然让我帮他看个问题,他说想不通为什么数据库中会有不合法的内容,我都已经用正则过滤了,并且在本地调通了的! 我问他是不是你正则有问题,他说没问题啊,前端和后端的正则是一样的,前端我 ...

  6. [javaSE] 网络编程(TCP,UDP,Socket特点)

    UDP特点: 面向无连接,把数据打包发过去,收不收得到我不管 数据大小有限制,一次不能超过64k,可以分成多个包 这是个不可靠的协议 速度很快 视频直播,凌波客户端,feiQ都是UDP协议 TCP特点 ...

  7. PHP错误日志和内存查看

    1.通过命令查看服务器上一共开了多少的 php-cgi 进程: ps -fe |grep "php-fpm"|grep "pool"|wc -l 2.查看FPM ...

  8. Java的工厂模式(一)

    Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...

  9. java设计模式-----18、职责链模式

    概念: Chain of Responsibility(CoR)模式也叫职责链模式.责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的 ...

  10. javascript之for循环的几种写法

    背景 javascript中的for循环选择多种多样,可你知道其中的差别在哪里吗?什么时候又该用哪种循环才是最佳策略?以上这些是本文想讨论的,欢迎交流. 说明 1.20年前的for循环 //20年前的 ...