前言:

当我们在数据库中创建了表格,添加了数据后,如何使用Java程序来读取、写入、修改数据库中的数据?这里就要用到JDBC的知识。接下来,本篇文章将带领读者来进入JDBC代码的世界。

1. JDBC简介

         JDBC其实是一个商标,它的全称为Java DataBase Connectivity(Java数据库连接)。通过它,我们就可以连接各种不同的数据库(SQLServer, MySQL, Oracle....)执行如 insert, delete, update, select等DML(数据库操作语言)语句,甚至可以执行如 create table, drop table等DDL(数据定义语言)语句。总的来说JDBC是使用Java程序连接数据库执行sql语句的技术。

        JDBC是商标,是技术,是规范,是标准,具体点是类和接口的集合。

2. JDBC使用(使用IDEA开发)

        a. 获得对应数据库的驱动程序jar包

                每一个数据库厂商都在官网向用户提供了驱动程序jar包。要注意您所使用的数据库的版本,例如 sqlserver2005 jdbc driver download.

        b. 项目引用jar包 (建议做法)

                在项目文件夹中新建一个lib文件夹(📂lib),lib文件夹中放入需要导入的jar包。接下来在IDEA界面点击 File -> Project Structure -> Libraries -> + -> java -> 项目文件夹中找到之前新建的lib文件,选中jar包,点击OK。    (部分过程参考下图)

数据库入参list java java数据库select_数据库入参list java

 

数据库入参list java java数据库select_数据库入参list java_02

 

c. 代码编写

                (1) 加载驱动程序

                Class.forName("驱动程序包名+类名") 静态方法;

                驱动程序包名+类名是实现了 java.sql.Driver 接口;

                forName方法会抛出一个编译时异常 ClassNotFoundException(必须处理),按Alt + Enter,选择try/catch解决;

                输入SQLServerDriver+回车,程序顶部将会生成驱动程序包名+类名,将其拷贝后删               除,放入 Class.forName("   ") 中。

数据库入参list java java数据库select_jdbc_03

                这行代码完成的事情:会把这个驱动程序加载到内存中,并在DriverManager类中注册

Connection

                首先要知道IP(对方的IP地址),port(对方的端口号),dbName(数据库名称),                             userName, pwd。

                使用DriverManager.getConnection();  静态方法, 该方法会抛出一个编译时异常                       SQLExecption。解决方法:Alt + Enter,选择Add 'catch' clause(s) 解决

(注1:调用java.sql包中的任何一个类的任何一个方法都会抛出编译时异常SQLException)

ip:1433;databaseName=dbName                        jdbc:表示使用的是 jdbc 驱动程序; sqlserver:表示连接的数据库种类; ip 地址:             在网络上通过 ip 地址来定位唯一一台计算机,这个 ip 可以是内 网的 ip,还可以是公网的,同           时如果连接的数据库在本机,我们使用 localhost 或者 127.0.0.1 表示。1433:端口号,又             称为服务号,又称为监听号,这个主机有可能装 了好几种数据库软件,比如SqlServer,                 mysql,oracle;那么我们连接那个数据库,这 个通过端口号确定, sqlserver 为 1433,               mysql 为 3306,oracle 为 1521。databaseName:数据库名称。某个数据库软件中还有很           多个数据库,比如 studentManager,crm 等,那你要连接哪一个数据库,这个通过数据库名             称来决定。

(注2:不能在URL语句中的'='两边加空格或其他字符,否则会连接不上数据库,系统报错)

                该方法的另外两个参数是连接数据库的用户名与密码,这个不需要解释。

数据库入参list java java数据库select_java_04

java.sql

数据库入参list java java数据库select_jdbc_05

                 (4) 执行SQL语句

                返回sql语句影响的行数

                int executeUpdate(String insertSql, updateSql, deleteSql);

                ResultSet executeQuary(String selectSql);           如下图:

 

数据库入参list java java数据库select_数据库_06

                 (5)关闭资源

                关闭资源顺序与建立资源顺序刚好相反

                将Connection con,Statement sta 声明为全局变量

数据库入参list java java数据库select_jdbc_07

                 在finally块中放入关闭资源的代码;sta = null,con = null为了让垃圾回收车尽快收集这            部分内存。

(注1),所以要加try,catch 块

                 当连接数据库时如果出现错误,会登陆失败,那么sta,con会报一个空指针异常,所以              要进行if语句的判断,系统只会报一个SQL语句的异常。

3.全部代码示例

package com.zhang;

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

public class TestJDBC2 {
    public static void main(String[] args) {
        Connection con = null;
        Statement sta = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("驱动程序加载完毕");
            String url = "jdbc:sqlserver://localhost:1433;databaseName=pas";
            con = DriverManager.getConnection(url, "sa", "sa");
            System.out.println(con);
            sta = con.createStatement();
            String sql = "delete from teacher where teaNum = '20210001'";
            int rows = sta.executeUpdate(sql);
            if (rows == 1){
                System.out.println("delete success");
            } else {
                System.out.println("delete error");
            }
        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序没有找到!!!");
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (sta != null){
                    sta.close();
                    sta = null;
                }
                if (con != null){
                    con.close();
                    con = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }
}