目录

基础知识

DriverManager接口

java.sql.DriverManager类负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。

DriverManager类提供的常用静态方法

方法名称 功能描述
getConnection(String url, String user, String password) 获取数据库的连接,三个参数依次代表:数据库的URL,用户名,密码。
setLoginTimeout(int second) 设置每次等待建立数据库连接的最长时间
setLogWriter(java.io.PrintWriter out) 用来设置日志的输出对象
println(String message) 用来输出指定消息到当前的JDBC日志流

Connection接口

java.sql.Connection接口可与指定的数据库进行连接

Connection类提供的常用方法

方法名称 功能描述
createStatement() 创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例
prepareStatement() 创建并返回一个PrepareStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行预编译处理
prepareCall() 创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该实例
setAutoCommit() 设置自动自动提交模式,默认为true,自动将更改同步到数据库中
getAutoCommit() 查看是否处于自动提交模式,是则返回true,否则返回false
setSavepoint() 在当前事物中创建并返回一个Savepoint实例,前提条件是房前connection实例不能处于自动提交模式,否则将抛出异常
releaseSavepoint() 从当前事物中移除指定的Savepoint实例
setReadOnly() 设置当前Connection实例的读取模式,传递参数为Boolean。不能在事物中执行该操作,否则抛出异常
isReadOnly() 返回是否处于只读模式
isClosed() 返查看当前Connection实例是否关闭
commit() 将上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection是咧当前拥有的所有数据库锁定
rollback() 取消当前事物中的所有更改,并释放Connection是咧当前拥有的所有数据库锁定。如果实例处于自动提交模式,将抛出异常
close() 立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接

Statement接口

java.sql.Statement接口用来执行静态的SQL语句,并返回执行的结果。

Statement类提供的常用方法

方法名称 功能描述
executeQuery(String sql) 执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate(String sql) 执行指定的静态INSERT,UPDATE,DELETE语句,并返回一个int型数值,即同步更新记录的条数
clearBatch() 清除位于Batch中的所有SQL语句。如果驱动器不支持批量处理将抛出异常
addBatch(String sql)() 将特定的SQL命令添加到Batch中。String型入口参数通常为INSERT或UPTATE语句。如果驱动器不支持批量处理将抛出异常
close() 立即释放Statement实例占用的数据库和JDBC资源

PreparedStatement接口

java.sql.PreparedStatement接口继承并扩展Statement接口,用来执行动态的SQL语句,即包含参数的SQL语句。

PreparedStatement类提供的常用方法

方法名称 功能描述
executeQuery(String sql) 执行指定的动态SELECT语句,并返回一个永远不能为null的ResultSet实例
executeUpdate(String sql) 执行指定的动态INSERT,UPDATE,DELETE语句,并返回一个int型数值,即同步更新记录的条数
setInt(int i,int x) 为指定参数设置int型值,对应参数的SQL类型为Intager
setLong(int i,Long x)() 为指定参数设置Long型值,对应参数的SQL类型为BigInt
clearParamenters() 清除当前所有参数的值

String、Double、Boolean等类型的用法相同

ResultSet接口

java.sql.ResultSet接口类似于一个数据表,通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息,如列名、类型等,ResultSet实例通过执行查询数据库的语句生成。

ResultSet接口提供的常用方法

方法名称 功能描述
first() 移动指针到第一行。如果结果集为空则返回false,否则返回true。
last() 移动指针到最后一行。如果结果集为空则返回false,否则返回true。
previous() 移动指针到上一行。如果结果集为空则返回false,否则返回true。
next() 移动指针到下一行。如果结果集为空则返回false,否则返回true。
clearParamenters() 清除当前所有参数的值
beforeFirst() 移动指针到ResultSet实例的开头,即第一行之前
afterLast() 移动指针到ResultSet实例的开头,即最后一行之后
absolute(int i) 移动指针到指定行。i为正数则表示从前向后编号,负数表示从后往前编号,编号均从1开始
relative(int i) 移动指针到相对于当前行的指定行。i为正数则表示从前向后移动,负数表示从后往前移动。
getRow() 查看当前行的索引编号。索引编号从1开始,不存在则返回0.
findColumn(String name) 查看指定列名的索引编号。name为要查询列的名称
isBeforeFirst()、isAfterLast()、isFirst()、isLast() 查看指针是否处于该位置,在则返回true,否则返回false
close() 立即释放ResultSet实例占用的数据库和JDBC资源,当关闭所属的Statement实例时也将执行此操作
getRow() 查看当前行的索引编号。索引编号从1开始,不存在则返回0.
findColumn(String name) 查看指定列名的索引编号。name为要查询列的名称
isBeforeFirst()、isAfterLast()、isFirst()、isLast() 查看指针是否处于该位置,在则返回true,否则返回false
getInt() 以Int型获取指定列对应的SQL类型的值。如果列值为NULL,则返回0。其他获取其他数据类型的方式相同
updateInt() 更改SQL类型对应Int型的指定列。用于插入和更新,但不会同步到数据库,需要执行updateRow()或者insertRow()方法完成同步。其他数据类型更改的方式相同
moveToInsertRow() 将指针移动到插入行,并记住当前行的位置
moveToCurrentRow() 移动指针到记住的位置,即调用moveToInsertRow()方法之前所在的行
insertRow() 将插入行的内容同步到数据库。如果指针不在插入行上,或者不允许为空的列的值为空,将抛出异常
updateRow() 将当前行的更新内容同步到数据库。更新当前行的列值后,必须调用该方法,否则不会将更新的内容同步到数据库
deleteRow() 删除当前行。执行该方法后,并不会立即同步到数据库,而是在执行close()方法后才同步到数据库

连接数据库

准备工作

需要的工具:
1、eclipse
2、Mysql
3、sql-connector-java包

安装Mysql:教程

Mysql安装好后下载sql-connector-java

进入链接后,点击下面的jar即可下载
下载connector

导入jar包

创建项目

java项目

java项目 java项目

1、创建lib文件夹
2、将mysql-connector-java包导入lib文件夹中

右键SQL项目,点击创建Folder(文件夹),并命名为lib 创建文件夹

将mysql-connector-java解压到桌面,打开文件夹找到mysql-connector-java-8.0.20.jar
jar 将jar包直接拖到lib文件夹 jar

然后添加连接 jar

jar

连接数据库

首先在Mysql中创建一个数据库STU:

create database STU;

创建一个表:

use STU
create table 信息表(
    id INT(8) primary key,
    name CHAR(20) not null,
    score INT(2) not null
);

插入信息:

insert into 信息表(id,name,score) values(18240001,'张三',87);
insert into 信息表(id,name,score) values(18240002,'李四',84);
insert into 信息表(id,name,score) values(18240003,'王五',79);

表的结构为:
jar

完成以上,即可开始连接数据库!

package sqlpackage;

import java.sql.*;

/**
* @author NTaurus
*
*/
public class Dbc {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //驱动器名字
        String driver = "com.mysql.cj.jdbc.Driver";
        //所连接数据库的url,(?serverTimezone=GMT)为设置时差
        String url = "jdbc:mysql://localhost:3306/STU?serverTimezone=GMT";

        //用户名
        String user = "root";
        //密码
        String password = "Limit0502";
        //创建Connection的实例
        Connection con;
        try {
            //加载驱动器
            Class.forName(driver);
            //使用getConnection()方法连接数据库
            con = DriverManager.getConnection(url,user,password);
            //创建Statement对象,用来执行静态sql语句
            Statement st = con.createStatement();
            ResultSet rs;
            String q = "SELECT *FROM 信息表";
            rs = st.executeQuery(q);
            System.out.println("连接数据库成功!");
            System.out.println("+----+-----+-----+");
            System.out.println("|   学号        名字       分数|");
            System.out.println("+----+-----+-----+");
            while(rs.next()) {  //在表中从头到尾遍历
                System.out.println('|'+rs.getString("id")+"  "+rs.getString("name")+"   "+rs.getInt("score")+"|");
            }
            System.out.println("+----+-----+-----+");
            rs.close();
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }

    }

}

连接成功!

jar