首页 > 其他分享 >【学习笔记】JDBC

【学习笔记】JDBC

时间:2022-10-05 20:22:41浏览次数:67  
标签:JDBC Driver 数据库 mysql resultSet 笔记 学习 connection sql

JDBC

 

什么是数据库驱动

数据库驱动就是连接应用程序与数据库的

image-20221005162617436

如果没有数据库驱动,应用程序是无法直接到达数据库的,数据库驱动是由数据库厂商来做的

 

什么是JDBC

SUN公司为了简化开发人员对数据库的统一操作,提供了一个(Java操作数据库)规范,成为JDBC

这些规范的实现由具体的厂商去做

对开发人员,只需要掌握JDBC接口的操作即可

image-20221005163154492

需要导入数据库驱动包

 

JDBC程序

  1. 创建测试数据库

    CREATE DATABASE `jdbcStudy` CHARACTER SET utf8 COLLATE utf8_general_ci;
    ​
    USE `jdbcStudy`;
    ​
    CREATE TABLE `users`(
     `id` INT PRIMARY KEY,
     `NAME` VARCHAR(40),
     `PASSWORD` VARCHAR(40),
     `email` VARCHAR(60),
     birthday DATE
    );
    ​
     INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`)
    VALUES('1','zhangsan','123456','[email protected]','1980-12-04'),
    ('2','lisi','123456','[email protected]','1981-12-04'),
    ('3','wangwu','123456','[email protected]','1979-12-04')
  1. 创建一个项目

  1. 导入数据库驱动

    需要将下载好的数据库驱动包 mysql-connector-java-5.1.47.jar 复制到项目中

    然后add as library

  2. 编写测试代码

    package com.lesson;
    ​
    import java.sql.*;
    ​
    public class JdbcTest {
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");   //固定写法
    ​
            //2.用户信息和url
            //三个参数:useUnicode=true  支持中文编码
            // characterEncoding=utf8  设置字符集为utf8
            // useSSL=true    使用安全的连接
            String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
            String username = "root";
            String password = "123456";
    ​
            //3.连接数据库对象   Connection代表数据库
            Connection connection = DriverManager.getConnection(url, username, password);//驱动管理 去获得连接
    ​
            //4.执行sql对象   Statement执行sql对象
            Statement statement = connection.createStatement();
    ​
            //5.sql对象去执行sql
            String sql = "select * from users";
            //查询语句
            ResultSet resultSet = statement.executeQuery(sql);  // 返回结果集,结果集中封装了我们查询出来的全部的结果
            while(resultSet.next()){
                System.out.println("id:" + resultSet.getObject("id"));
                System.out.println("name:" + resultSet.getObject("NAME"));
                System.out.println("pwd:" + resultSet.getObject("PASSWORD"));
                System.out.println("email:" + resultSet.getObject("email"));
                System.out.println("birthday:" + resultSet.getObject("birthday"));
                System.out.println("============================");
            }
    ​
            //6.释放连接
            resultSet.close();
            statement.close();
            connection.close();
        }
    }

    image-20221005190520614

 

 

步骤:

  • 加载驱动

  • 连接数据库 DriverManager

  • 获得执行sql的对象 Statement

  • 获得返回的结果集

  • 释放连接

 

DriverManager

Class.forName("com.mysql.jdbc.Driver");   //固定写法
//之前的写法
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

现在一般推荐第一种写法,不推荐之间的写法,

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
​
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

原因就是在Driver类中,只有一段静态代码块,一旦执行力Class.forName(),这段代码就执行了

这段静态代码块中已经帮你注册过了,如果你在去主动注册的话,就相当于注册了两遍。

所以我们推荐使用Class.forName() 的方式去执行

 

URL

String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
​
//公式:
//协议名://主机名:端口号/数据库名?参数1&参数2;
//mysql 默认端口号为3306
//oralce 默认端口号为1521
//jdbc:oralce:thin:@localhost:1521:sid;     oralce的url写法

 

Connection

Connection connection = DriverManager.getConnection(url, username, password);

Connection代表数据库,它可以做数据库能做的事,如

connection.commit();  //事务提交
connection.rollback(); //事务回滚
connection.setAutoCommit(true); //设置事务自动提交

 

Statement 执行sql的对象 PrepareStatement 和它相同

statement.executeQuery(sql);   //执行查询,返回resultSet结果集
statement.executeUpdate(sql);  //更新、插入、删除都是用这个,返回受影响的行数
statement.execute(sql);  //可以执行任何sel

 

ResultSet 查询的结果集

封装了所有的查询结果

可以获得指定的数据类型

//如果不知道类型,就使用getObject()
resultSet.getObject();
//知道了列的类型,就使用指定的类型
resultSet.getString();
resultSet.getInt();
resultSet.getFloat();
resultSet.getDouble();
......

遍历,使用指针

resultSet.next();  //移动到下一个
resultSet.previous();  //移动到上一个
resultSet.beforeFirst();  //将光标移动到最前面
resultSet.afterLast();   //将光标移动到最后面
resultSet.absolute(row);  //移动到指定行

 

释放资源

resultSet.close();
statement.close();
connection.close();  //十分占资源,使用完要关闭

标签:JDBC,Driver,数据库,mysql,resultSet,笔记,学习,connection,sql
From: https://www.cnblogs.com/wztblogs/p/16756281.html

相关文章

  • 并发学习记录16:任务调度线程池
    在任务调度池功能加入之前,可以使用java.util.Timer来实现定时功能,Timer的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能......
  • 第十三小组chap1-2学习总结
    内容概括:一.初识c语言二..学习内容概括三.易错点总结 四.总结一.初识c语言 C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C......
  • 【专业学习】常用的技术网站
    常用的技术网站1.c++网站;​​cplusplus​​​​http://www.cplusplus.com/​​主要用于查找c++一些知识点及其使用。2.linux学习;​​鸟哥的linux私房菜基础学习篇​​​​http:/......
  • 编程的学习总结
    一,实验代码   #include<stdio.h>intmain(){printf("Hello,world!")}  二,设计思路 第一步:打框架第二步:算法是排序   第三步:编译,查......
  • Java学习 三大循环语句和switch语句
    Java学习三大循环语句和switch语句 while循环语句(当)只要布尔表达式为true,循环就回一直执行下去。**我们大多是情况会让循环停止下来的,我们需要一个让表达式时效......
  • 学习笔记——Django项目中的cookie
    2022-10-05得到cookie信息的实例联系:在子应用中的“views.py”文件:fromdjango.httpimportHttpResponsedefget_cookie(request):cookies=request.COOKIES......
  • docker笔记
    Docker常用命令#查看当前docker版本docker-vdocker--version#查看都docker的系统信息dockerinfo#搜索镜像dockersearch镜像#获取镜像dockerpull......
  • Python学习(三)win7 下添加python环境变量
    我的电脑--属性--高级系统设置;环境变量--新建,变量名:“PYTHONHOME”,变量值:python的安装路径;找到Path--编辑,在变量值的最后边添加“;%PYTHONHOME%;%PYTHONHOME%\Scrip......
  • 知识图谱的多模态数据增强表示学习
    知识图谱的多模态数据增强表示学习目录知识图谱的多模态数据增强表示学习摘要1.介绍2.相关工作3.方法A.知识提取B.知识表示学习4.结果A.数据集B.实验设置C.链接......
  • MYSQL学习笔记
    学习笔记目录如下: ​​​*.sql文件的导入与介绍​​(一)   ​​MYSQL学习笔记之<基本概念>​​(二)   ​​MYSQL学习笔记之<单标查询>​​(三)    ​​MYS......