文章目录

  • 一,JDBC简介
  • 二,JDBC操作
  • 三,statement 和 Preparedstatement的区别
  • 四,练习

一,JDBC简介

一,JDBC的概念
JDBC:java database connectivity java数据库连接。(通过java对数据库进行操作)
JDBC的本质:其实就是提供了一些方法与接口(规范),实现是由数据库的厂商来实现 (驱动包)

如下图所示:

二,JDBC操作

一,JDBC连接数据库的步骤
1.导入jar包
2.通过反射来加载驱动
3.得到连接对象 connection
4.得到发送sql 对象(交通工具)
5.得到返回的结果
6.关闭资源 从下往上进行关闭
注意点:所有的jar包都是导入的是 java.sql.*

二,JDBC的详细解释
1, Class.forName(“com.mysql.jdbc.Driver”); 通过反射来加载驱动 Driver =>驱动类

2,DriverManager 驱动管理对象来获取连接对象

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/user?characterEncoding=utf-8", "root", "root");

url : 表示连接数据库的地址 jdbc:mysql://localhost:3306/数据库的库名?characterEncoding=utf-8 || jdbc:mysql:///day03_db 只支持本地连接
jdbc : 表示主的协议=>也就是使用jdbc来连接数据库
mysql : 表示子协议=>也及时使用mysql数据库
localhost: : 表示本机的ip地址
3306 : 表示mysql数据库的端口号,端口号后是数据库的库ming
? : 后 都是表示设置的参数 characterEncoding=utf-8 ==>设置其编码格式
username :表示数据库的用户名
password :表示数据库 密码

3,conn.createStatement(); ==>表示通过连接对象来获取执行sql 的对象Statement(交通工具)

4,sta.executeQuery(sql) 发送sql语句,数据库返回一个结果集 ResultSet

5,关闭资源(从下往上关闭)

6,?表示占位符号

三,JDBC操作中出现的常见错误
1,nknown database ‘us’ :数据库不存在

2,Access denied for user ‘root’@‘localhost’ (using password: YES) :用户名与密码不正确

3,You have an error in your SQL syntax :sql 异常

四,unit 测试
主要是用于测试 使用的步骤
1.导包 添加依赖
2.编写一个测试方法(不是main) 注意点:1.需要使用public void 2.这个方法没有返回值 3.这个方法没有参数
3.在方法加注解 @Test
4.直接运行 绿色表示没有错误 红色表示产生了错误

五,jdbcUtils工具类的封装
1.加载驱动(只需要加载一次,写在静态代码块)
2.获取连接对象写成一个方法 (三个参数写成常量)
3.增删改
4.查询
5.关闭资源

三,statement 和 Preparedstatement的区别

一,区别
Statement 产生的问题:1.sql注入,不安全,每次直接拼
PreparedStatement
①,他是 Statement 对象的一个子类
②,可以防止sql注入,保证sql语句的安全
③,预编译检验sql是否正确 =>效率高 =>替换Statement
④,避免sql语句的拼写

四,练习


封装数据库基类 BaseDao
用jdbc 增加一个宠物
根据 id修改宠物信息
删除 id为2的宠物
分页查询前五条信息
使用模糊查询 宠物名字为花的宠物

工具类代码:

package com.offic.day09homework;import javax.xml.transform.Result;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;public class JDBCBase {//定义常量final static String DRIVER = "com.mysql.jdbc.Driver";final static String URL = "jdbc:mysql://localhost:3306/user?characterEncoding=utf-8";final static String UID = "root";final static String UPWD = "root";static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}//定义创建Connection对象的方法public static Connection getCon() {try {Connection conn = DriverManager.getConnection(URL, UID, UPWD);return conn;} catch (SQLException e) {e.printStackTrace();}return null;}//定义增删改的方法public static int change(String sql, Object[] obj) {Connection conn = null;PreparedStatement ps = null;int num = -1;try {conn = getCon();ps = conn.prepareStatement(sql);if (obj != null && obj.length > 0) {for (int i = 0; i < obj.length; i++) {ps.setObject(i + 1, obj[i]);}}num = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally {close(null, ps, conn);}return num;}//定义查询的方法public static List<Pet> search(String sql, Object[] obj) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Pet> list = new ArrayList<>();try {conn = getCon();ps = conn.prepareStatement(sql);if (obj != null && obj.length > 0) {for (int i = 0; i < obj.length; i++) {ps.setObject(i + 1, obj[i]);}}rs = ps.executeQuery();while (rs.next()) {Pet p = new Pet();p.setHealth(rs.getInt("Health"));p.setId(rs.getInt("Id"));p.setLove(rs.getInt("Love"));p.setName(rs.getString("Name"));p.setStrain(rs.getString("Strain"));list.add(p);}} catch (SQLException e) {e.printStackTrace();} finally {close(rs, ps, conn);}return list;}//定义关闭流的方法public static void close(ResultSet rs, PreparedStatement ps, Connection conn) {try {if (rs != null) {rs.close();}if (ps != null) {ps.close();}if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}

测试类代码:

package com.offic.day09homework;import org.junit.Test;
import java.sql.Connection;
import java.util.List;public class test {public static void main(String[] args) {//        用jdbc 增加一个宠物String sql = "insert into pet(name,health,love,strain)values(?,?,?,?)";Object[] obj = {"小白",90,90,"泰迪"};int num = JDBCBase.change(sql,obj);if (num > 0){System.out.println("添加成功");}else{System.out.println("添加失败");}}@Testpublic void bb() {//        根据 id修改宠物信息String sql = "update pet set name=?,health=?,love=?,strain=? where id=?";Object[] obj = {"小黑", 95, 95, "中华田园犬",3};int num = JDBCBase.change(sql, obj);if (num > 0) {System.out.println("修改成功");} else {System.out.println("修改失败");}}@Testpublic void cc() {//        删除 id为2的宠物String sql = "delete from pet where id=?";Object[] obj = {2};int num = JDBCBase.change(sql, obj);if (num > 0) {System.out.println("删除成功");} else {System.out.println("删除失败");}}@Testpublic  void dd() {//        分页查询前五条信息String sql = "select * from pet limit ?,?";Object[] obj = {0,5};List<Pet> list = JDBCBase.search(sql, obj);for(Pet p : list){System.out.print(p.getHealth());System.out.print(p.getId());System.out.print(p.getLove());System.out.print(p.getName());System.out.print(p.getStrain());System.out.println();}}@Testpublic  void ee(){//       使用模糊查询 宠物名字为花的宠物String sql = "select * from pet where name like ?";Object[] obj = {"%花%"};List<Pet> list = JDBCBase.search(sql, obj);for(Pet p : list){System.out.print(p.getHealth());System.out.print(p.getId());System.out.print(p.getLove());System.out.print(p.getName());System.out.print(p.getStrain());System.out.println();}}
}

Pet类代码:

package com.offic.day09homework;import java.io.Serializable;public class Pet implements Serializable {private int id;private String name;private int health;private int love;private String strain;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getHealth() {return health;}public void setHealth(int health) {this.health = health;}public int getLove() {return love;}public void setLove(int love) {this.love = love;}public String getStrain() {return strain;}public void setStrain(String strain) {this.strain = strain;}
}

javaweb第九天 JDBC相关推荐

  1. JavaWeb:用JDBC操作数据库

    JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 什么是JDBC JDBC的全称是 ...

  2. IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

    文章目录 使用IDEA搭建JavaWeb项目 一.IDEA新建JavaWeb项目 1.新建java项目 2.修改项目配置 3.项目部署到Tomcat 二.使用JDBC和Servlet-JSP技术实现注 ...

  3. javaWeb前后台交互(Jdbc+Jsp+Servlet+mysql)

    最近翻看以前的笔记,想到以前自己学习完servlet+jsp+mysql却怎么也把前后台连接不上,最后自己折腾好几天,终于搭建成功,写这个笔记也算是记录一下,代码是那个时候的代码,现在稍微加工了下.可 ...

  4. 基于javaweb(jsp+jdbc+mysql)的仓库出入库系统毕业设计

    核心流程图 相关操作 数据库表和操作 javaweb后台权限管理系统 Javaweb仓库出入库操作 供货商操作 仓库操作 仓库入库操作 仓库出库操作 仓库补货操作 仓库商品表(出入库统计):cangk ...

  5. 购物系统-网上书店 javaweb jsp+Servelt+JDBC连接数据库(源码分享)

    目录 一.实现的功能 二.运行出来的结果 1.首先是一个登录页面 2.进入主界面 3.前台系统(浏览图书功能) 4.后台系统(书架维护功能) 三.实现讲解 四.代码分享 购物系统都大差不差,添加商品到 ...

  6. JavaWeb:JDBC之事务

    系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 事务 事务的四大特性:ACID mysq ...

  7. JavaWeb:JDBC之数据库连接池

    JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 池参数(所有池参数都有默认值) ...

  8. 解决java.util.MissingResourceException: Can‘t find bundle for base name resources.jdbc, locale zh_CN

    今天中午在写项目的时候,遇到了 java.util.MissingResourceException: Can't find bundle for base name resources.jdbc, ...

  9. javaweb知识点总结(黑马视频笔记)

    目录 什么是JavaWeb? Web JavaWeb JavaWeb技术栈 JDBC简介 概念 本质 快速入门 步骤 API详解 DriverManager Connection Statement ...

最新文章

  1. php的方向,PHP面试方向
  2. python防反编译_Python - 浅谈Python的编译与反编译
  3. python的垃圾处理机制_Python语法入门之垃圾回收机制
  4. 【中级软考】计算能力足够强大,所有加密算法原理上都会被破解吗?
  5. c 文件夹打包解包_linux中文档的压缩与打包
  6. UISwitch,UISegmentedControl及UISlider的初步学习
  7. SAP Spartacus Set Active BaseSite action执行的时间点 - Route路由触发方式
  8. 密码学数字信封的介绍
  9. Unity资源管理--AssetBundle学习
  10. STM32 - 定时器的设定 - 基础 01 - Timer Base - Prescaler description - Upcounting mode
  11. java socket 远程调用_使用Socket反射Java流操作进行方法的远程调用(模拟RPC远程调用)...
  12. 自己使用过比较好用的VSCode插件
  13. jQuery的回调管理机制(二)
  14. GPRS通信原理+中国移动micro sim 卡,实现经过tcp/ip 传输数据到服务器
  15. Cuteftp9.0安装说明书
  16. 将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
  17. Python爬虫入门以爬取当当商城图片为例
  18. 产品读书《游戏改变世界:游戏化如何让现实变得更美好》
  19. 解决org.apache.zookeeper.KeeperException$UnimplementedException:KeeperErrorCode = Unimplemented for /S
  20. 反编译+混淆的攻守战

热门文章

  1. 吴翰清澄清:从没黑过阿里网站!
  2. 那些年啊,那些事——一个程序员的奋斗史 ——15
  3. 基础元件学习——敏感电阻知识
  4. 09-zookeeper
  5. 微信请求错误:未能解析此远程名称
  6. 你有没有想过把创业构想让企业来帮你实现
  7. 【学习干货】给coder的10个读书建议
  8. 前端 JavaScript 原型和原型链
  9. 【Android】【问题分析】G-sensor因数据交互问题导致手机crash
  10. 常被混淆的账号体系与账户体系