JDBC关键步骤及代码

JDBC关键步骤及代码

  • JDBC简介
  • 实现代码
  • 代码解析
    • 1. 注册驱动
    • 2. 获取连接
    • 3. 获取数据库操作对象
    • 4. 执行sql语句
    • 5. 处理查询结果集
    • 6. 释放资源

JDBC简介

JDBC全称为java database connectivity(Java数据库连接),是sun公司指定的java数据库连接技术的简称。它是sun公司和数据库开发商共同开发出来的独立于DBMS的应用程序接口,它为java程序员进行数据库编程提供了统一的API。

实现代码

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBC {
    public static  void main(String[] args){
        Connection con = null;
        PreparedStatement pStatement = null;
        ResultSet res = null;
        try{
            // 1.注册驱动
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);

            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
            String user = "root";
            String password = "123456";
            con = DriverManager.getConnection(url, user, password);

            //3.获取数据库操作对象
            String sql = "select * from students where sno=?";
            pStatement = con.prepareStatement(sql);
            pStatement.setInt(1,1026);

            //4.执行sql语句
            res = pStatement.executeQuery();

            //5.处理查询结果集
            if(res.next()){
                System.out.println("查询成功,查询结果如下:");
                System.out.print("学号为:"+res.getInt(1));
                System.out.print("  姓名为:"+res.getString("name"));
                System.out.print("  分数为:"+res.getInt(3));
            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            //6.释放资源,try中的变量无法在finally中使用,关闭资源需从小到大依次关闭
            try {
                if (res != null) {
                    res.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (pStatement != null) {
                    pStatement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (con != null) {
                    con.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }
}

数据库内容如下:
JDBC关键步骤及代码_第1张图片
查询结果如下:
JDBC关键步骤及代码_第2张图片

代码解析

1. 注册驱动

Driver driver = new com.mysql.cj.jdbc.Driver();
//第一个Driver是接口,第二个Driver是实现类
DriverManager.registerDriver(driver);

此处的两行代码也可用如下代码代替:

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

该方法为类加载方法,要求JVM查找并加载指定的类,即该JVM会执行类的静态代码段,此方法将给定的类加载到Java虚拟机中。

Driver类:
JDBC关键步骤及代码_第3张图片
resgisterDriver(Driver driver)(DriverManager类中的一个方法)方法:

修饰和类型 方法和说明
static void resgisterDriver(Driver driver) 注册给定的驱动程序

2. 获取连接

String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
String user = "root";
String password = "123456";
con = DriverManager.getConnection(url, user, password);

url:统一资源定位符(某个资源的绝对路径)
其中包括:

  • 协议
  • IP地址
  • 端口号(port)
  • 资源名(此处的资源名为数据库名)

在数据库驱动的url后加上需加上“serverTimezone=UTC”,否则会报如下错误:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 
is unrecognized or represents more than one time(提示系统时区出现错误)

getConnection(String url, String user, String password)(DriverManager类中的一个方法)方法:

修饰和类型 方法和说明
static Connection getConnection(String url, String user, String password) 尝试建立与给定的数据库URL的连接

3. 获取数据库操作对象

String sql = "select * from students where sno=?";
pStatement = con.prepareStatement(sql);
pStatement.setInt(1,1026);

prepareStatement(String sql)(Connection类中的一个方法)方法:

类型 方法和说明
PreparedStatement prepareStatement(String sql) 创建一一个PreparedStatement对象, 用于将多参数化的SQL语句发送到数据库

setInt(int parameterIndex, int x)(prepareStatement类中的一个方法)方法:

类型 方法和说明
void setInt(int parameterIndex, int x) 将指定的参数设置为给定的Java int值

4. 执行sql语句

res = pStatement.executeQuery();

executeQuery()(PreparedStatement类中的一个方法)方法:

类型 方法和说明
ResultSet executeQuery() 执行此PreparedStatement对象中的SQL查询语句,并返回查询的ResultSet对象。

5. 处理查询结果集

 if(res.next()){
 	System.out.println("查询成功,查询结果如下:");
    System.out.print("学号为:"+res.getInt(1));
    System.out.print("  姓名为:"+res.getString("name"));
    System.out.print("  分数为:"+res.getInt(3));
}

next()(ResultSet类中的一个方法)方法:

类型 方法和说明
boolean next() 将光标从当前位置向前移动一行

getString(int columnIndex)、getString(String columnLabel)(均为ResultSet类中的方法)方法:

类型 方法和说明
String getString(int columnIndex) 检索当前行中指定列(1,2,3…)的ResultSet对象为String的内容
String getString(String columnLabel) 检索当前行中指定列(列名)的ResultSet对象为String的内容

6. 释放资源

在fianlly中关闭资源能保证资源一定释放(在try块中若其中一个语句抛出异常,则后面语句中的.close()会无法执行)。

你可能感兴趣的:(数据库,jdbc,数据库)