文章目录

  • 一,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. centos7 安装jdk7
  2. 谷歌像素递归超分辨率研究:怎么消灭低分辨率图像马赛克?
  3. The current branch is not configured for pull No value for key branch.master.merge found in config
  4. android室内定位+3d,基于Android平台的手机室内定位及导航的设计与实现
  5. Zclip:复制页面内容到剪贴板兼容各浏览器
  6. 4 截图_十年漫迷舍不得删的4张截图,有大汗淋漓的香磷,满满的都是回忆
  7. Sound Ventures斥资百万美元举行NFT竞赛活动
  8. Linux基础之-Bash命令优先级
  9. 考研编程练习----开门人和关门人
  10. android 盒子gpu,挑选电视盒子时CPU和GPU哪个更重要?
  11. 机器学习与Web安全结合的基础
  12. 《未来世界的幸存者》读书摘录及笔记
  13. svn: E230001: Server SSL certificate verification failed: certificate issued for a different hostnam
  14. 双窗格文件管理器:Commander One PRO Mac中文版
  15. ble 读写特征值特征值_BLE添加特征值
  16. 英文字典app android,学生英语词典app
  17. 智能微模块一体化机柜
  18. 视频教程-其实你还不懂Word-Office/WPS
  19. 诺贝尔奖距离中国内地多远(ZT)
  20. 贪吃的猴子c语言的思路,贪吃的猴子(贪吃的猴子?C语言)

热门文章

  1. Spyder上安装TensorFlow环境教程
  2. 我们第一时间上手三星Galaxy S8:外观华丽,但Bixby却是个半成品
  3. 微信定时发情话--python小程序
  4. Description 输入3个数,代表三角形的三条边长,判断这三条边是否能构成三角形,如果能, 计算并输出三角形的面积,否则输出NO。 Input 输入包括多组测试数据,每组有三个数,中间用空格隔开
  5. 华为P9销量破千万,工业设计能否开启国产手机分水岭?
  6. 霸气!开源项目名字就叫 BAT,具有语法高亮的 CAT 类命令
  7. 免费简单易用的视频剪切编辑工具—Avidemux
  8. Python爬虫ExcelTableau可视化数据分析
  9. 刷机总结(pixel2)
  10. 刚入职新公司上班需要注意的点有哪些