IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JDBC连接数据库:尚学堂笔记 -> 正文阅读

[大数据]JDBC连接数据库:尚学堂笔记

JDBC介绍

  • JDBC(Java Database Connectivity) 是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql, javax.sql)使用这些类库可以以一种 标准 的方法、方便地访问数据库资源

  • jdbc用于做数据库与java的连接的接口

1.JDBC程序编写步骤

img

2.获取数据库连接

1.1要素一:Driver 接口实现类(驱动类)

java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。 mySql的驱动: com.mysql.cj.jdbc.Driver

将驱动jar 包拷贝到 Java 工程的一个目录中,习惯上新建一个 lib 文件夹。(复制文件,贴贴到bin即可)

在驱动 jar 上 右键–>Build Path–>Add to Build Path

(新建路径后才可以使用此驱动包,否则不可用)

图9

1.2加载与注册JDBC驱动

加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

Class.forName(“com.mysql.cj.jdbc.Driver”);

注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序

使用 DriverManager.registerDriver ("com.mysql.cj.jdbc.Driver") 来注册驱动

2. 要素二:URL(统一资源定位器,即:网址)

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

jdbc:子协议:子名称 协议:JDBC URL中的协议: jdbc 子协议:子协议用于标识一个数据库驱动程序 子名称:一种标识数据库的方法。

tu12

MySQL的连接URL编写方式:

jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
jdbc:mysql://localhost:3306/atguigu
jdbc:mysql://127.0.0.1\:3306/librarymanage

3 要素三:用户名和密码

user, password 可以用 “属性名=属性值” 方式告诉数据库 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

user=root
password=xxxxxxxxx

连接方式一:基本原理(不常用)

//1.提供java.sql.Driver接口实现类的对象,为了实现驱动连接
 ? ? Driver driver = new com.mysql.cj.jdbc.Driver();
?
//2.提供url,实现对某个数据库的操作
 ? ? String url = "jdbc:mysql://localhost:3306/test";
 ? ?
//3.提供Properties的对象,指明用户名 root 和 密码 
 ? ?  Properties info = new Properties();
 ? ?  info.setProperty("user", "root");
 ? ?  info.setProperty("password", "XXXXXX");
 ? ?
//4.调用driver的connect(),获取连接,以此连接数据库
 ? ?  Connection conn = driver.connect(url, info);

Properties类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。

连接方法二:(常用)

//1.数据库连接的4个基本要素:
 ? String url = "jdbc:mysql://localhost:3306/test";
 ? String user = "root";
 ? String password = "XXXXXX";
 ? String driverName = "com.mysql.jdbc.Driver";
?
 //2.加载驱动 (①实例化Driver ②注册驱动)
  Class.forName(driverName);
 ?          
 //3.注册驱动
  DriverManager.registerDriver(driver);
 ? ? ? ?
 //4.获取连接
  Connection conn = DriverManager.getConnection(url, user, password);
?

3.实现数据库的增删改查

数据库的增删改查由sql语句来实现,而增删改可归为一类,其操作相同只是sql的不同,而查询为另一类。这些操作由PrepatedStatement来实现。

PreparedStatement 介绍

  • 可以通过调用 Connection 对象的 preparedStatement(String sql) 方法获取 PreparedStatement 对象

  • PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句

  • PreparedStatement 对象所代表的 SQL 语句中的参数用问号( ? )来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数

  • setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

//添加
insert into 表名(变量)values(?)
?
//修改
update 表名 set 变量= ? where 用于定位的变量 = ?
?
//删除
delete form 表名 where 用于定位的变量 = ?;
?
//查询
select 变量 from 表名 where 用于定位的变量 = ?

举例说明:

//向数据库添加一个记录
    public void testconnction() {       
 ?
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage";
        String user="root";
        String passsword="XXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn=DriverManager.getConnection(url,user,passsword);
        
        //预编译sql语句,返回ps实例
        String sql
 ? ? ?  = "insert into  student(id,name,age)values(?,?,?)";
        ps = conn.prepareStatement(sql);
        
        //填充占位符
        ps.setInt(1,4);(1:为位置)
        ps.setString(2,"哪吒");
        ps.setInt(3,19);
        
        //执行操作
        ps.execute();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        //资源的关闭
        try {
            if(ps!=null)
             ? ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
             ? conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }

运行后:

?

//修改数据库的一条记录
    public void testUpate() {
        
        Connection conn=null;
        PreparedStatement ps=null;
        try {
        //1.数据库的连接  
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage";
        String user="root";
        String passsword="XXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn=DriverManager.getConnection(url,user,passsword);
            
        //2.预编译sql语句,返回preparedstatement的实例
        String sql = "update student set name= ? where id = ?";//修改名字,通过id来查到位置
        ps = conn.prepareStatement(sql);
            
            //3.填充占位符
            ps.setObject(1, "小帅");
            ps.setObject(2, 1);
            
            //4.执行
            ps.execute();
        } 
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //5.资源的关闭
            try {
            if(ps!=null)
             ? ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
             ? conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }   }

运行后:

?

//删除一个记录
    public void testconnction() {       
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //读取配置文件的三个基本信息
        String  url="jdbc:mysql://localhost:3306/manage
        String user="root";
        String passsword="XXXXXX";
        
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //获取连接
        conn = DriverManager.getConnection(url,user,passsword);
        
        //  System.out.println(conn);
        
        //预编译sql语句,返回ps实例
        String sql = "DELETE FROM student WHERE id = ?";
        ps = conn.prepareStatement(sql);
        
        //填充占位符
        ps.setInt(1,1);
        
        //执行操作
        ps.execute();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        //资源的关闭
        try {
            if(ps!=null)
             ? ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn!=null)
             ? conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }
//通用的增删改操作
    public void update(String sql,Object ...args) {//sql中占位符的个数与可变型参args的个数一致
    Connection conn=null;
    PreparedStatement ps=null;
    try {
        //1.获取数据库连接
        conn = jdbcUtil.getConnection();
        //2.预编译sql语句,返回preparestament的实例
        ps = conn.prepareStatement(sql);
        //3.填充占位符
        for(int i=0;i<args.length;i++)
        {
            ps.setObject(i+1, args[i]);//小心参数声明错误
        }
        //4.执行
        ps.execute();
    }catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
        //5.资源的关闭
        jdbcUtil.closeResource(conn, ps);
    }
        
    }

调用通用的代码:

public void testCommonupdate() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入书名");
        String book_name=input.next();
        System.out.println("请输入价格");
        double book_price=input.nextDouble();
        System.out.println("请输入作者");
        String book_writer=input.next();
        System.out.println("请输入数量");
        int book_num=input.nextInt();
        
        String sql="insert into book(book_name,book_price,book_writer,book_num)values(?,?,?,?)";
        
        update(sql,book_name,book_price,book_writer,book_num);
        
    }

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 11:57:30  更:2021-10-19 11:58:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:26:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码