一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一、JDBC的概述
###<1>概念
JDBC:java database connection ,java数据库连接技术
是java内部提供的一套操作数据库的接口(面向接口编程),实现对数据库的统一访问。
###<2>作用
是连接java应用程序和数据库的一个桥梁和纽带
体现了java的one write , run anywhere

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

# 二、通过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) 获取数据

注意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注入的更多相关文章
- jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作
首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...
- Entity Framework 程序设计入门二 对数据进行CRUD操作和查询
前一篇文章介绍了应用LLBL Gen生成Entity Framework所需要的类型定义,用一行代码完成数据资料的读取, <LLBL Gen + Entity Framework 程序设计入门& ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- jdbc工具类2..0
一.创建外部文件 url=jdbc:mysql:///qy66 use=root password=root driver=com.mysql.jdbc.Driver 二.创建工具类 package ...
- JavaWeb(四):JDBC
数据持久化(persistence) 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各 ...
- JDBC 及 sql注入问题
一.相关概念 1.什么是JDBC JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...
随机推荐
- 模块打包工具webpack
1.webpack的安装 1.1在安装node的基础上,npm install -g webpack(window版本,因为是全局安装,所以无所谓是哪个路径下) 1.2新建一个文件夹用于此项目 eg ...
- UIKit 框架之UITextView
// // ViewController.m // UItextView // // Created by City--Online on 15/5/22. // Copyright (c) 2015 ...
- sql中全文检索CHARINDEX 和PATINDEX 区别
最近经常使用字符串查找功能. 包括 1.全匹配查找字符串 2.模糊查找字符串 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置.PATINDEX 可使用通配符,而 CHARIND ...
- setInterval与setTimeout的区别
在制作网页动态效果时,一定会遇到某些需求,要求某段程序等待多时时间后再开始执行,就像在我们的生活中一样,待会儿再开始做一件事.在JavaScript中主要通过定时器实现此类需求,本文将对定时器做一个概 ...
- 【转】手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- winform绑定多张图片
开发winform程序的时候经常设计到要显示多张图片的问题,其解决思路一般是先遍历文件夹中的所有图片,然后再把这些图片添加到ImageList控件中,最后再绑定显示出来.这里我们介绍两种绑定的方法: ...
- WebForm控件多字段绑定
一.这里的多字段绑定是什么意思? 多字段绑定控件其实就是把两个字段显示在一起作为一个字段现在控件上! 可能读者看了可能还是有点懵逼,说的还是比较抽象!的确,光从这上面的确是无法具体到某特定一种情况!那 ...
- 键盘输入,输出int数组的函数
public class function { public static void main(String[] args) { //输入数组数据(例如10个) int [] array = inPu ...
- [日常] 搭建golang开发环境
下载目录:https://studygolang.com/dl32位选 go1.10.linux-386.tar.gz64位选 go1.10.linux-amd64.tar.gz uname -a查看 ...
- solr + tomcat + mysql整合
上一次分享了solr+tomcat的整合 学习就是要一步一步的进行才有趣 所以这次给大家分享solr+tomcat+mysql 一.准备工作 1.一张带数据的数据库表(我用的是这张叫merchant的 ...