Bootstrap

JDBC简介

一、JDBC简介

1.什么是jdbc
JDBC全称:java database connectivity,简称jdbc, 翻译就是 Java 数据库连接。

2.jdbc有什么作用:
是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。可以通过jdbc代码实现对数据库的操作。包括DDL,DML,DQL等。

二、JDBC执行步骤

1.导入驱动jar包
链接:https://pan.baidu.com/s/1mP3Nb4wKd1VrBrGmbD3QDg
提取码:t0kh
导入jar包步骤

  • 1.在你的web-INF目录下创建一个lib包,专门放置jar包
  • 2.将jar包复制到lib路径下
  • 3.右键单击,选择add as library
  • 4.将level改成module library 点击OK

如果你的lib路径下的jar包有以下小箭头,就添加成功了
在这里插入图片描述
2.注册驱动

	Class.forName("com.mysql.jdbc.Driver");

3.获取连接

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

4.定义SQL语句

	String sql = "sql语句";

5.获取执行SQl对象

Statement statement = connection.createStatement();

6.执行sql语句

statement.executeUpdate(sql);

7.处理结果

8.释放资源

statement.close();
connection.close();
package com.example.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class jdbcdemo {
    public static void main(String[] args) throws Exception {
//        1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

//        2.获取连接
        String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);
//        3.定义sql语句,这里以创建一个work_user表为例
        String sql1 = "use dbcsdn";
        String sql2 = "create table work_user(" +
                "id int(5) primary key auto_increment," +
                "username varchar(20) unique," +
                "password varchar(20))";
//        4.获取sql对象
        Statement statement = connection.createStatement();
//        5.执行sql
        int l1 = statement.executeUpdate(sql1);
        int l2 = statement.executeUpdate(sql2);

//        6.处理结果
        System.out.println("sql1受影响条数"+l1);
        System.out.println("sql2受影响条数"+l2);

//        7.释放资源
        statement.close();
        connection.close();
    }
}

三、执行步骤中类的简介

1、DriverManager类

DriverManager类下面提供的全是静态方法,只需要用类名点方法就可以调用,不需要实例化。它的作用主要有两个:
1.注册驱动: registerDriver()

	Class.forName("com.mysql.jdbc.Driver");

其中的Driver类里面有一个静态代码块,有一句DriverManager. registerDriver()完成驱动的注册
在这里插入图片描述

2.获取连接:getConnection(url, username, password);
这个方法可以通过mysql的URL地址、数据库用户名、密码获取连接。传入的参数就是对应的URL地址:形如jdbc.mysql://ip地址:端口号/数据库名称。如果是本机连接,IP地址可以写成127.0.0.1或者localhost。如果端口号是默认的3306,可以写成缩写格式:jdbc.mysql:///数据库名

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

2.Connection类

connection类主要有两个作用:一是可以获取执行sql的对象,二是管理事务的功能。我们都知道数据库里面的数据局一旦改变就是永久的,所以需要一个管理事务功能验证sql语句的正确性。在mysql中事务管理通过begin开启事务,rollback回滚事务,commit提交事务。在jdbc里面通过connection类的特定方法也可以实现这三个功能。

  1. 获取执行sql的对象用到的方法。
    第一个就是普通执行sql对象:connection.createStatement()方法,返回一个Statement对象。

    Statement statement = connection.createStatement();
    

statement类下面有两个对数据进行操作的方法,分别是excuteUpdate(),excuteQuery()。excuteUpdate()这个方法主要是实现DML(操作数据),DDL(操作数据库,操作表)的代码。执行成功之后会返回一个值,这个值就是受影响的行数。但是DDL中就算执行成功之后有可能是0,因为创建一个新的表这样的sql代码受影响行数是0。excuteQuery()主要是实现DQL(查询语句),这个方法会返回一个resultSet对象,这个对象主要用于接受查询到的内容。

演示excuteUpdate()方法。

package com.example.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class jdbcdemo {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);

        String sql = "insert  into work_user values " +
                "(1,'name1','password1')," +
                "(2,'name2','password2');";

        Statement statement = connection.createStatement();

        int i = statement.executeUpdate(sql);

        System.out.println("受影响的行数是:"+i+"行");

        statement.close();
        connection.close();
    }
}

第二个是防止sql注入的prepareStatement()方法,其中传入sql语句,可以防止sql注入,最终返回一个PrepareStatement对象。

2.jdbc事务管理用法举例

package com.example.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbcdemo {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);

        String sql1 = "insert  into work_user values " +
                "(5,'name5','password5')," +
                "(6,'name6','password6');";

        String sql2 = "update work_user set username = 'name002' where id = 2;";

        Statement statement = connection.createStatement();

        try {
            // 开启事务
            connection.setAutoCommit(false);

            int l1 = statement.executeUpdate(sql1);
            System.out.println("sql1受影响的行数是:"+l1+"行");
            int l2 = statement.executeUpdate(sql2);
            System.out.println("sql2受影响行数是:"+ l2+ "行");
            // 提交事务
            connection.commit();
        } catch (Exception e) {
            //回滚事务
            connection.rollback();
            e.printStackTrace();
        }
        statement.close();
        connection.close();
    }
}

3、ResultSet类

作用:对DQL查询语句进行封装,返回一个resultset对象,并且可以通过特定方法获取查询结果。

  1. 对DQL查询语句封装

    ResultSet resultSet = statement.executeQuery(sql);
    
  2. 通过特定方法获取查询结果

next()方法。返回Boolean类型,主要用于判断当前行是否有有效数据,若有就返回true,否则返回false。

getXXX()方法。通过resultSet获取数据,对应数据类型定义对应方法。传参可以为字段名,也可以是列对应的编号。

package com.example.jdbc;

import java.sql.*;

public class jdbcdemo {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/dbcsdn";
        String username = "root";
        String password = "1234";
        Connection connection = DriverManager.getConnection(url, username, password);

        String sql = "select * from work_user";


        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("username");
            String psd = resultSet.getString("password");

            System.out.print("id:"+id+"\t");
            System.out.print("username:"+name+"\t");
            System.out.println("password:"+psd);
            System.out.println("---------------");
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

;