一、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. ruby中数组的常用函数

    在程序中定义一个数组 在程序中定义一个数组,因为我们在下面说明. fruits = ["apple", "orange", "lemon"] ...

  2. 【LeetCode题解】169_求众数(Majority-Element)

    目录 169_求众数(Majority-Element) 描述 解法一:暴力法 思路 Java 实现 Python 实现 复杂度分析 解法二:哈希表 思路 Java 实现 Python 实现 复杂度分 ...

  3. Eclipse编辑JS响应慢,复制粘贴卡顿的解决方案

    我使用的是官网标准版的eclipse4.3 for javaEE, 写JS时卡的简直无法忍受,尝试去掉所有的validate,包括菜单和项目属性中的都没作用. 整个人都急疯了~ 后来在项目根目录.pr ...

  4. 【转】外国朋友出的js题目,你能对几道

    原文地址 http://perfectionkills.com/javascript-quiz/ 中文地址加解释:by Aaron:http://www.cnblogs.com/aaronjs/p/3 ...

  5. python学习之参数传递

    ^参数传递分为定义(形参)和调用(实参)两种情况.^ 1. 定义(形参) 默认参数 def func(x, y=None): # 任何时候必须 优先定义 位置参数 # 默认参数和可变参数*args 顺 ...

  6. Angular的第一个helloworld

    在安装了node,npm,angular-cli,vscode之后,我们来创建一个angular的应用 创建第一个hello world 使用的IDE工具为vscode 打开vscode,打开一个命令 ...

  7. C#关于操作符重载与转换

    随便写写 首先,假设我们有一个Person类型 其类型定义如下 class Person { public string Name { get; set; } = "Person" ...

  8. MVC登陆认证简单设置

    首先,弄个基类 /// <summary> /// 所有控制器基类,里面重写了OnActionExecuted方法 /// </summary> public class Ba ...

  9. Java 使用new Thread和线程池的区别

    本文转至:https://www.cnblogs.com/cnmenglang/p/6273761.html , 孟凡柱的专栏 的博客,在此谢谢博主! 1.new Thread的弊端执行一个异步任务你 ...

  10. p2p手机绑定

    本文工具类     http://www.cnblogs.com/jokerq/p/8590498.html 1.需求分析 2.设计分析 3.前台页面(freemarker) <script t ...