JAVA的JDBC编程

数据库编程的必备条件

1.编程语言:JAVA,C,C++,Python等
2.数据库:如Oracle,Mysql,sql server等
3.数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包。如:mysql提供了java的驱动包mysql-connector-java,需要基于java操作mysql急需要该驱动包.同样的,要基于javaa操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

JAVA的数据库编程:JDBC

JDBC,即Java Database Connectivity,java数据库链接,是一种用于执行sql语句的java API,是java中的数据库连接规范,这个API由java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员的数据库连接规范提供了一个标准的API,可以为多种关系数据库提供统一访问.

JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库层次接口:
在这里插入图片描述

JDBC使用

1.前期工作

准备数据库驱动包,并添加到项目的依赖中:
在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中。再配置该jar包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置Dependencies,点击+,JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的jar包都引入作为依赖.

2.使用步骤

  1. 创建数据库连接Connection
    DriverManager创建
    DataSource获取
  2. 创建操作命令Statement
    PreparedStatement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet
  5. 释放资源(先创建的后释放,这点很重要)

3.具体实现

1.TestJDBC.java

package com.yty;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @author yty
 * @version 1.0
 * @date 2021-11-16 19:15
 */
public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        //1.创建DataSource对象(Datasource对象生命周期应该是要跟随整个程序
        DataSource dataSource =new MysqlDataSource();
        //接下来针对dataSource进行配置,以便后面能够顺利访问数据库
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysqlJDBC?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.建立和数据库的连接
        //为了验证当前的网络通信是否正常
        //不正常会有SQLException异常
        //connection对象生命周期应该是短的,每个请求创建一个新的connection
        Connection connection=dataSource.getConnection();

        //3.拼装SQL语句,用到PrepareStatement对象
        //现已插入数据为例
        //当前插入的数据是写死的,其实也可以让程序再运行时得到
        //动态的拼接进去
        int id=1;
        String name="曹操";
        int classId=10;
        //?表示占位符,可以把具体的变量的值替换到?位置
        String sql="insert into student values(?,?,?)";
        PreparedStatement statement= connection.prepareStatement(sql);
        //1,2,3相当于?下标(从1开始算)
        statement.setInt(1,id);
        statement.setString(2,name);
        statement.setInt(3,classId);
        System.out.println("statement: "+ statement);

        //4.拼装完成之后执行sql
        //inser delect update 都是以executeUpdate方法来执行
        //select就使用executeUpdate来执行
        //返回值表示此次操作修改了多少行
        int ret=statement.executeUpdate();
        System.out.println("ret: "+ ret);

        //5.执行完毕之后,关闭释放资源
        //一定是先创建的后释放,顺序一定不能记错!!!
        statement.close();
        connection.close();
    }
}

2.TestSlelct.java

package com.yty;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestSelect {
    public static void main(String[] args) throws SQLException {
        // 1. 创建 DataSource 对象
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysqljdbc?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        // 2. 创建 Connection 对象, 和数据库建立连接.
        Connection connection = dataSource.getConnection();

        // 3. 借助 PrepareStatement 拼装 SQL 语句.
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // 4. 执行 SQL 语句
        ResultSet resultSet = statement.executeQuery();

        // 5. 遍历结果集. 遍历过程和使用迭代器遍历集合类有点像
        //    结果集相当于一张表. 这个表里有很多行, 每一行是一条记录(又包含很多列)
        //    next() 一方面是判定当前是否存在下一行. 另一方面如果存在下一行就获取到这一行.
        //    可以直观的把 resultSet 对象想象成是一个 "光标"
        while (resultSet.next()) {
            // resultSet 的光标指向了当前行, 就可以把当前行中的列数据都获取到
            // 当前表中的每一行包含三个列. id, name, classId, 可以根据列名来获取对应的列数据.
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int classId = resultSet.getInt("classId");
            System.out.println("id: " + id + " name: " + name + " classId: " + classId);


        }
        //5.释放资源
        //后创建的先释放
        resultSet.close();
        statement.close();
        connection.close();
    }
}

3.TestUpdate.java

package com.yty;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * @author yty
 * @version 1.0
 * @date 2021-11-17 0:09
 */
public class TestUpdate {
    public static void main(String[] args) throws SQLException {
        //让用户输入要修改的id为n的同学的姓名
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要修改的学生的id:");
        int id= scanner.nextInt();
        System.out.println("请输入要修改的学生的姓名:");
        String name= scanner.next();

        //1.创建DataSource对象
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysqlJDBC?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.建立连接
        Connection connection=dataSource.getConnection();

        //3.拼装sql语句
        String sql="update student set name=? where id=?";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);

        //4.执行sql
        int ret=statement.executeUpdate();
        if (ret==1){
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }

        //5.关闭资源
        statement.close();
        connection.close();
    }
}

4.TestDelete.java

package com.yty;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * @author yty
 * @version 1.0
 * @date 2021-11-17 0:10
 */
public class Testdelect {
    public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要删除的学生姓名:");
        String name= scanner.next();

        //1.创建datasource对象
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/mysqlJDBC?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.创建Connection对象,和数据库连接
        Connection connection=dataSource.getConnection();


        //3.拼装sql
        String sql="delete from student where name= ? ";
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setString(1,name);

        //4.执行sql
        int ret=statement.executeUpdate();
        if (ret==1){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }

        //5.关闭资源
        statement.close();
        connection.close();
    }
}

4.注意事项

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值