一、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,可以为多种关系数据库提供统一访问,它由 ...
随机推荐
- redis实战笔记(8)-第8章 构建简单的社交网站
本章主要内容 用户和状态 主页时间线 关注者列表和正在关注列表 状态消息的发布与删除 流API
- spring boot 2.0 源码分析(四)
在上一章的源码分析里,我们知道了spring boot 2.0中的环境是如何区分普通环境和web环境的,以及如何准备运行时环境和应用上下文的,今天我们继续分析一下run函数接下来又做了那些事情.先把r ...
- JAVA-4NIO之Channel之间的数据传输
转载:自并发编程网ifeve.com 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个c ...
- c#基础学习(0701)之一些简单的方法练习
一个简单的求数组最大值的方法 //可变参数 int max=GetMaxNumbers(101,30) static int GetMaxNumbers(params int[] pms) { ]; ...
- Jquery ui draggable在chrome和ie7下的bug
当页面足够长,向下滚动一些之后, 在拖动时,被拖动的div会向下产生滚动距离那么高(scrolltop)的差距 鼠标位置距div顶部差距了正好页面scroll的距离,页面scoll越多差的越多. 解决 ...
- win10 uwp 商业游戏
本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...
- XP系统运行wpf程序出现透明现象的解决
xp 虚拟机运行WPF程序的时候,有部分控件透明,在这儿有一个可能的解决方案: 关闭系统的硬件加速: 1. 按“WIN” + R 键,在“运行”输入框中输入“dxdiag”: 2. 在“DirectX ...
- 用于深拷贝的扩展方法 C#
using System.Runtime.Serialization.Formatters.Binary; using System.IO; public static class Tool { pu ...
- IDEA中Maven切换国内源
国内访问Maven仓库非常慢,笔者今天忘记切换国内源更新Maven仓库竟然更新了一下午.如果改成国内的源,那么很快就更新完成了. 在IDEA中打开“Settings”(快捷键++): 在搜索框中输入“ ...
- 一:Web
一:Web介绍 1.Web:网页,网络 2.Web应用:运行在网络上的应用程序 3.网络应用程序分类:C/S B/S C/S 客服端(client)/服务器(server) 典型应用:QQ,YY B/ ...