前言:
当我们在数据库中创建了表格,添加了数据后,如何使用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。 (部分过程参考下图)
c. 代码编写
(1) 加载驱动程序
Class.forName("驱动程序包名+类名") 静态方法;
驱动程序包名+类名是实现了 java.sql.Driver 接口;
forName方法会抛出一个编译时异常 ClassNotFoundException(必须处理),按Alt + Enter,选择try/catch解决;
输入SQLServerDriver+回车,程序顶部将会生成驱动程序包名+类名,将其拷贝后删 除,放入 Class.forName(" ") 中。
这行代码完成的事情:会把这个驱动程序加载到内存中,并在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语句中的'='两边加空格或其他字符,否则会连接不上数据库,系统报错)
该方法的另外两个参数是连接数据库的用户名与密码,这个不需要解释。
java.sql
(4) 执行SQL语句
返回sql语句影响的行数
int executeUpdate(String insertSql, updateSql, deleteSql);
ResultSet executeQuary(String selectSql); 如下图:
(5)关闭资源
关闭资源顺序与建立资源顺序刚好相反
将Connection con,Statement sta 声明为全局变量
在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();
}
}
}
}