MySql教程

JDBC连接Mysql数据库学习复习总结(一)-2021.05.09

本文主要是介绍JDBC连接Mysql数据库学习复习总结(一)-2021.05.09,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JDBC(Java Database Connection)

JDBC为Java开发者使用数据库提供了统一的编程接口,它由一组Java类和接口组成。是Java程序与数据库系统通信的便准API。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并执行相应的操作。

sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库,因此,sun公司决定自己提供一套API,凡是数据库想与Java进行连接的,数据库厂商自己必须实现JDBC这套接口,而数据库厂商的JDBC实现,我们就叫他此数据库的数据库驱动

下面先介绍JDBC里面常用的接口与类

JDBC中常用的类和接口

介绍一些JDBC之中常用的接口和类,这些接口和类都在Java.sql包里面。

Connection接口

Connection接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果。Connection接口常用的方法如下表格
在这里插入图片描述

Statement接口

Statement接口用于在已经建立连接的基础上向数据库发送SQL语句,在JDBC中有三种Statement对象,分别是Statement、PreparedStatement 和CallableStatement。Statement对象用于执行不带参数的简单的SQL语句;PreparedStatement继承了Statement,用来执行动态的SQL语句;CallableStatement继承了PreparedStatement,用于执行对数据库的存储过程(存储过程是Mysql里面的术语,具体需要参考Mysql数据库的内容)的调用。Statement接口的常用方法如下
在这里插入图片描述

PreparedStatement接口

PreparedStatement接口用来动态地执行SQL语句。通过PreparedStatement实例执行的动态SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以反复地执行该SQL语句。PreparedStatement接口常用的方法如下
在这里插入图片描述

DriverManager 类

DriverManager 类用来管理数据库中的所有驱动程序。**它是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。**如果通过getConnection()方法可以建立连接,则经连接返回,否则抛出SQLException异常。DriverManager 类的常用方法如下所示。
在这里插入图片描述

ResultSet接口

ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针向下移。
在JDBC2.0(JDK 1.2)之后,该接口添加了一组更新方法updateXXX(),该方法有两个重载方法,可根据列的索引号和列的名称来更新指定列。但该方法并没有将对数据进行的操作同步到数据库中,需要执行updateRow()或insertRow()方法更新数据库。ResultSet接口的常用方法如下表
在这里插入图片描述
在这里插入图片描述

JDBC连接数据库流程

要访问数据库,首先要加载数据库的驱动程序(只需要在第一次访问数据库时加载一次),然后每次访问数据库时创建一个Connection对象接着执行操作数据库的SQL语句最后在完成数据库操作后销毁前面创建的Connection对象,释放与数据库的连接。 主要的步骤如下
1.加载JDBC驱动程序
2.建立与数据库的连接
3.发送SQL语句
4.得到查询结果

看如下代码:

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

/**
 * 测试跟数据库建立连接
 */
public class jdbc01 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");

            //建立连接(建立连接对象内部其实 包含了 Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点)
            //真正开发中,为了提高效率,都会使用连接池来管理连接对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

            stmt = conn.createStatement();//The object used for executing a static SQL statement and returning the results it produces.
            String sql = "CREATE TABLE `t_user2` (\n" +
                    "  `id` int(10) NOT NULL AUTO_INCREMENT,\n" +
                    "  `username` varchar(30) DEFAULT NULL,\n" +
                    "  `pwd` varchar(30) DEFAULT NULL,\n" +
                    "  `regTime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,\n" +
                    "  PRIMARY KEY (`id`)\n" +
                    ") ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;\n";
            stmt.execute(sql);
            System.out.println(conn);
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

代码分析:
1.首先加载驱动类

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

Class类是java.lang包中的一个类,通过该类的静态方法forName()可加载com.mysql.jdbc.Driver驱动类。
2.使用java.sql包中的Connection接口,并通过DriverManger类的静态方法getConnection()创建连接对象,代码如下

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

3.向数据库发送SQL语句。使用Statement接口声明一个SQL语句对象,并通过刚才创建的连接数据库对象conn的createStatement()方法创建SQL对象,代码如下

stmt = conn.createStatement();//The object used for executing a static SQL statement and returning the results it produces.

4.接下来就可以对数据库里面的数据执行查找添加修改删除等操作

5.销毁(销毁)创建的对象及连接,顺序按照下面的规则;
6.关闭的顺序:
ResultSet—>Statement---->Connection的顺序关闭(后开的先关闭),一定要将三个try catch分开写

测试 PreparedStatement 基本用法

package com.bjsxt.jdbc;
import java.sql.*;

/**
 * 测试 PreparedStatement 基本用法
 */
public class jdbc02 {
    public static void main(String[] args) {
        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //建立连接
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

            String sql = "insert into t_user1 (username,pwd,regTime) values (?,?,?)";
            //参数索引是从1开始而不是0;
            //?表示占位符

            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,"李剑1");
            ps.setString(2,"123456t");
            ps.setDate(3,new java.sql.Date(System.currentTimeMillis()));
            //也可以不考虑数据的类型而使用ps.setObject()方法来直接赋值;
            
            System.out.println("插入一条记录");
            ps.execute();//执行语句
            
            System.out.println(conn);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
    }
    }
}

测试 ResultSet 基本用法

package com.bjsxt.jdbc;
import java.sql.*;

/**
 * 测试 ResultSet 基本用法
 */
public class jdbc03 {
    public static void main(String[] args) {
        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //建立连接
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

            String sql = "select id,username,pwd from t_user1 where id >=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setObject(1,1);

            ResultSet rs = ps.executeQuery();
            while (rs.next()){
                System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getString(3));
            }
            
            System.out.println(conn);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
    }
    }
}

这篇关于JDBC连接Mysql数据库学习复习总结(一)-2021.05.09的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!