JDBC操作步骤,简单的使用

JDBC基本概念

1、JDBC:Java DataBase Connectivity(Java语言连接数据库)
2、JDBC本质是什么?
JDBC是SUN公司制定的一套接口(interface)
接口都有调用者和实现者。
面向接口调用、面向接口写实现类。这都属于面向接口编程

为什么要面向接口编程?
降低耦合:降低程序的耦合度,提高程序的扩展力。
多态机制就是非常典型的:面向抽象编程

编写JDBC六个步骤

第一步:注册驱动(作用:告诉Java程序,要连接的是哪个数据库(mysql、oracle…))
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭)
第三步:获取数据库操作对象(执行sql语句的对象)
第四步:执行SQL语句(DQL,DML…)
第五步:处理查询结果集(只有第四步为查询(select)语句时,才需要执行第五步)
第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间1同行,开启之后一定要关闭)
JDBC中的sql语句不需要提供封号结尾

URL

url:统一资源定位符(网络中某个资源的绝对路径)

https://www.baidu.com/ 这就是URL

URL包括哪几部分?

协议、IP、PORT、资源名

https://182.61.200.7:80/index.html

通信协议:https://
IP:182.61.200.7
服务器端口号:80
资源名:index.html

jdbc:mysql://localhost:3306/test1

协议:jdbc:mysql://
IP:localhost
服务器端口号:3306
资源名:test1

什么是同行协议,有什么用?

通信协议是通信之前就提前订好的数据传送格式。
数据包具体怎么传数据,格式提前定好的。

第一种注册驱动的方式

			//1、注册驱动
            Driver driver = new com.mysql.jdbc.Driver(); //多态,父类引用指向子类对象
            DriverManager.registerDriver(driver); //注册给定的驱动
package com.csx.jdbc;

import com.mysql.jdbc.Driver;

import java.sql.*;

/**
 * @program: TestJDBC
 * @description
 * @author: Csx
 * @create: 2020-05-04 17:14
 **/
public class TestJDBC01 {
    public static void main(String[] args)  {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1、注册驱动
            Driver driver = new com.mysql.jdbc.Driver(); //多态,父类引用指向子类对象
            DriverManager.registerDriver(driver); //注册给定的驱动
            //2、获取连接
            String url = "jdbc:mysql://localhost:3306/test1";
            String username = "root";
            String password = "root";
            con = DriverManager.getConnection(url,username,password);
            //3、获取数据库操作对象(Statement专门执行sql语句的)
            stmt = con.createStatement();
            //4、执行SQL语句
            //查询用executeQuery,需要第五步
            rs = stmt.executeQuery("select * from dept");
            //增删改用executeUpdate,不需要第五步,返回值是影响数据库中的的记录条数
            //int i = stmt.executeUpdate("insert into dept(DEPTNO,DNAME,LOC) values(50,'开发部','杭州')");
            //System.out.println(i==1?"处理成功":"处理失败");
        	//5、处理查询结果集
            while(rs.next()){
                String deptNo = rs.getString("DEPTNO");
                String deptName = rs.getString("DNAME");
                String loc = rs.getString("LOC");
                System.out.println("部门编号:"+deptNo+",部门名:"+deptName+",地址:"+loc);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6、释放资源
            //为了保证资源一定释放,在finally语句中关闭资源
            //并且要遵循从小到大依次关闭
            //因此要分别对其try...catch
            if (rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (con!=null){
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

第二种注册驱动的方式(常用)

利用反射来加载Driver类,利用类中的静态代码块实现对驱动的注册
直接反射这个.class文件,这个类就会被加载进JVM,静态代码块在类加载时就会被执行,所以驱动被注册
为什么这种方式常用?

因为参数是一个字符串,字符串可以写到xxx.properties配置文件中。

以下方法不需要接收返回值,因为我们只要用它的类加载动作

可以看到mysql驱动的源码Driver中也是调用的第一种方式,因此用反射机制加载该类,就可以让该类在编译阶段就执行
在这里插入图片描述

			//1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
package com.csx.jdbc;

import java.sql.*;

/**
 * @program: TestJDBC
 * @description
 * @author: Csx
 * @create: 2020-05-03 23:08
 **/
public class TestJDBC02 {
    public static void main(String[] args) {
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            //1、注册驱动
            //为什么这种方式常用?因为参数是一个字符串,字符串可以写到xxx.properties配置文件中。
            //以下方法不需要接收返回值,因为我们只要用它的类加载动作
            Class.forName("com.mysql.jdbc.Driver");
            //2、 获取连接对象
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1","root","root");
            //3、获取数据库操作对象
            st = con.createStatement();
            //4、执行sql语句
            rs = st.executeQuery("select * from dept");
            //5、处理查询结果集
            while (rs.next()) {
                String deptNo = rs.getString("DEPTNO");
                String dName = rs.getString("DNAME");
                String loc = rs.getString("LOC");
                System.out.println("部门编号:" + deptNo + "部门名:" + dName + "地址:" + loc);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                //6、释放资源
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                //6、释放资源
                if (st != null) {
                    st.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                //6、释放资源
                if (con != null) {
                    con.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

ResultSet获取查询结果集

1、光标(next())指向的行有数据,有数据返回true,没有数据返回false。
2、getString()方法的特点是:不管数据库中的数据类型是什么,都以String的形式取出。
3、JDBC中所有的下标从1开始。不是从0开始,1,2,3指的是数据库表中的第几列
4、如果起了别名,获取的名字要写别名
5、除了可以以String类型取出之外,还可以以特定的类型取出。

while(rs.next()){
      String deptNo = rs.getString(1);
      String deptName = rs.getString(2);
      String loc = rs.getString(3);
      System.out.println("部门编号:"+deptNo+",部门名:"+deptName+",地址:"+loc);
}

运行结果
在这里插入图片描述
以特定的类型取出
在这里插入图片描述

读取配置文件中的数据

配置文件

driver=com.mysql.jdbc.Driver
url =jdbc:mysql://localhost:3306/test1
username =root
password =root
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String username = bundle.getString("username");
String password = bundle.getString("password");
//1、注册驱动
Class.forName(driver);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值