JAVA-JDBC: (1) java连接数据库的粗略步骤

【JDBC系列】- jdbc的概念以及与数据库的交互流程 接下来详细介绍以下流程步骤中的一些小问题与小细节。使用jdbc与数据库进行通信,简单来说就只有6个步骤,首先需要注册驱动,获取连接,接着创建statement对象,用来存放sql语句并且执行,然后将获得到的数据进行解析,最后就是要把资源进行销毁。这里只是基本的使用jdbc,像mybatis、jpa、ibatis等持久层框架,都是对jdbc进行封装,万变不离其宗,想要学习底层知识,就需要把这学基础知识给学好! 阅读详情

版权声明:本系列博客是根据传智播客 李勇 老师讲的jdbc视频和自己的理解整理如下,希望可以和同水平的菜鸟一起共勉!!
JDBC: Java Data Base Connectivity (java 数据库连接) 由接口和少量的类构成的API. 由 java.sql 和 javax.sql两部分组成。

1. 应用程序、JDBC API、数据库驱动和数据库的关系:

这里写图片描述


2.Java连接数据库的基本步骤:

(1)注册相应的数据库驱动,(只需注册一次)
(2)建立连接(Connection)
(3)创建用于执行SQL的语句(Statement)
(4)执行语句(statement.execute())
(5)处理执行的结果(ResultSet)
(6)释放资源(rs.close() st.close() conn.close())

2.1 注册相应的数据库驱动

1.

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

2.

System.setProperty("jdbcDriver", "oracle.jdbc.OracleDriver");
System.setProperty("jdbcDrivers","oracle.jdbc.OracleDriver:com.mysql.jdbc.driver");

虽然不会对具体的驱动类产生依赖;但注册不太方便,可以同时注册多个驱动、中间用:隔开

3.

Class.forName("oracle.jdbc.OracleDriver");

通过Class的forName方法通过类名将驱动加载到虚拟机中,不一定会创建类的实例,

注释: OracleDriver的实现部分中一定包含一个静态代码块,将这个驱动加载到DriverManager的registeredDrivers中(ArrayList类型)。

2.2 建立连接

2.2.1 URL格式 User Password
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…

String url = "jdbc:oracle:thin:@localhost:1521:orcl";

user: 数据库登陆名称;password:数据库登陆密码;

2.2.2 通过DriverManager创建连接

Connection conn = DriverManager.getConnection(url,user,password);
2.3 创建执行SQL的语句(Statement)
Statement st = conn.createStatement();
2.4 执行SQL语句,拿到返回结果
String sql = "select * from stu";
ResultSet rs = st.executeQuery(sql);
2.5 处理结果集
while(rs.next()){     System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3));
}
2.6 释放资源
rs.close();
st.close();
conn.close();

3. 简单的实例代码:

3.1
package jdbc.one;

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

public class JDBCTest {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        seleDB();
    }
    static void seleDB() throws SQLException, ClassNotFoundException{
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        String user = "scott";
        String password = "";
        Connection conn = null;
        Statement st =null;
        ResultSet rs = null;
        try{            
            Class.forName("oracle.jdbc.OracleDriver");
            conn = DriverManager.getConnection(url, user, password);
            st = conn.createStatement();
            String sql = "select * from stu";
            rs = st.executeQuery(sql);
            while(rs.next()){         System.out.println(rs.getObject(1)+"\t"
            +rs.getObject(2)+"\t"+rs.getObject(3));
            }
        }finally{
            try{
                if(rs!=null)
                    rs.close();
            }finally{
                try{
                    if(st!=null)
                        st.close();
                }finally{
                    if(conn!=null)
                        conn.close();
                }
            }

        }
    }
}
3.2 简单的优化、
package jdbc.two;

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

public class JDBCVersionTwo {

    static void jdbcMethodOne() throws SQLException{
        Connection conn = null;
        Statement st = null;
        ResultSet rs =null;
        try{

            conn = JDBCUtils.getConnection();

            st = conn.createStatement();
            String sql = "select * from stu";

            rs = st.executeQuery(sql);
            while(rs.next()){
                System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3));
            }
        }finally{
            JDBCUtils.free(rs, st, conn);           
        }   
    }

    public static void jdbcMethodTwo() throws SQLException{
        Connection conn = null;
        Statement st = null;
        ResultSet rs =null;

        JDBCUtilsSingle instance = JDBCUtilsSingle.getInstance();

        try{

            conn = instance.getConnection();
            st = conn.createStatement();
            String sql = "select * from stu";

            rs = st.executeQuery(sql);
            while(rs.next()){
                System.out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3)+
                        "\t"+rs.getObject(4));
            }           
        }finally{           
            instance.free(rs, st, conn);
        }
    }
    public static void main(String[] args) throws SQLException {
        //jdbcMethodOne();
        jdbcMethodTwo();
    }

}

第一种静态的工具类代码:

package jdbc.two;

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

public final class JDBCUtils {

    private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    private static String user ="scott";
    private static String password = "";

    //因为驱动只需要注册一次,我们可以通过静态代码块形式实现
    static{
        try {
            Class.forName("oracle.jdbc.OracleDriver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError();
        }
    }

    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, user, password);
    }

    public static void free(ResultSet rs, Statement st, Connection conn){
        if(rs!=null)
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                if(st!=null)
                    try {
                        st.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }finally{
                        if(conn!=null)
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                    }

            }


    }
}

第二种单例形式的工具类

package jdbc.two;

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

public class JDBCUtilsSingle {

    private String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    private String user ="scott";
    private String password = "qian";

    private static JDBCUtilsSingle instance = null;

    private JDBCUtilsSingle(){}

    //延迟加载的单例模式,
    public static JDBCUtilsSingle getInstance(){
        if(instance==null)
            synchronized (JDBCUtilsSingle.class) {
                if(instance==null)
                    instance = new JDBCUtilsSingle();                   
            }
        return instance;
    }

    //因为驱动只需要注册一次,我们可以通过静态代码块形式实现
    static{
        try {
            Class.forName("oracle.jdbc.OracleDriver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException();
        }
    }

    public Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, user, password);
    }

    public void free(ResultSet rs, Statement st, Connection conn){
        if(rs!=null)
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                if(st!=null)
                    try {
                        st.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }finally{
                        if(conn!=null)
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                    }

            }
    }
}
GEE:哨兵时间序列遥感数据和动态阈值方法计算物候时期EOS/SOS(2) 本文将分享和解释论文《Improved Estimates of Arctic Land Surface Phenology Using Sentinel-2 Time Series》中使用到的基于阈值估算北极地区的植被物候,特别是北极地区的植被季节开始和结束的日期(SoS和EoS)的方法和代码。该方法使用的是使用哨兵2数据,并实现了两种阈值方法( 无平滑的阈值方法、平滑后的阈值方法)。 阅读详情

相关推荐

国土变更调查中六类拓扑错误的成因分析与高效修复实践

本文深入分析了国土变更调查中六类拓扑错误的成因,包括边界不一致和不规则图形等常见问题,并提出了高效的自动化修复实践。通过智能咬合算法、引力-斥力平衡模型等核心技术,显著提升了修复效率,节省人工质检时间70%。文章还分享了实战中的避坑指南和黄金法则,为相关从业人员提供了宝贵经验。

weixin_29202213的博客 359

JSP程序设计实训(八)——JDBC 技术(一)

JDBC 技术

WXY19990803的博客 1551

完整指南:从基础到高级使用 Semantic Kernel

通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。

net core ,前端 ,python 全栈开发 2804

javaEE(10)_jdbc基本使用

一、JDBC简介 1、SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC,JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API. J2SE的一部分,由java.sql,javax.sql包组成,开发还需要导入相应JDBC的数据库实现(即数据库驱动). 2、应用程序、JDBC API、...

dasheyi8825的博客 176

信息学奥赛一本通高手训练1680:序列

题目 代码 #include<cstdio> #include<iostream> #include<cmath> #define LL long long using namespace std; const LL N = 1400000+7; const LL mod = 1e9+7; int n, t; LL pos[N], sum[N], ans[N]; struct node{ LL ll, rr; }a[N]; int main(){ p

qingfeixueyue的博客 468

解密 vn.py 源码:从事件驱动到模块化设计的实战解析

本文深入解析vn.py源码,重点剖析其事件驱动机制与模块化设计。通过事件引擎、处理器字典等核心组件分析,展示如何实现低耦合高内聚的交易系统架构,并结合实战案例说明模块化设计带来的开发效率提升。文章还详细解读了Gateway抽象层、核心数据结构及设计模式应用,为量化交易开发者提供源码级实践指南。

weixin_27427619的博客 249

J2EE之JDBC详解

JDBC(Java Data Base Connectivity,Java数据库连接),由一些接口和类构成的API。 J2SE的一部分,由java.sql,javax.sql包组成。 应用程序、JDBC API、数据库驱动及数据库之间的关系       推荐博文: http://blog.youkuaiyun.com/jiangwei0910410003/article/details/

陈三的博客 1500

工业级4~20mA转0~3V信号调理电路原理图设计,已量产(电流传感器)

在工业现场,4~20mA 电流信号是模拟量传输的 “老熟人”—— 抗干扰强、能跑长距离,但嵌入式 MCU 的 ADC 一般只认电压信号。最近做项目时,我设计了一款能覆盖 0~25mA(含超量程冗余)、线性输出 0~3V 的调理电路,经过现场调试挺稳定,分享下细节。

不脱发的程序猿 525

JDBC规范与MySQL驱动的关系详解

jdbc规范与驱动的关系:类似接口和接口的实现类,通过驱动程序,java应用程序可与数据库进行通信。JDBC由一组java语言编写 的类和接口组成。   JDBC API : 提供了java应用程序到驱动管理器DriverManage的连接。 JDBC驱动程序API: 这支持驱动管理器DriverManager到数据库厂商提供的驱动程序的连接。 JDBC的核心组件: Drive...

瓶中水 5635

从工具选型到落地实践:吃透 SAP Fiori Launchpad 配置工具体系

摘要: SAP Fiori Launchpad配置远非简单添加应用和分配角色,涉及技术目录、业务目录、Spaces/Pages等多层管理。官方推荐新工具分工:技术目录用FLPAM维护应用定义,业务目录用FLPCM编排应用组合,Spaces/Pages优化用户体验布局,而传统Groups模式已被标记弃用。这种分层治理模式(定义层-编排层-展示层)能有效解决传输混乱、升级兼容性问题,尤其适合大规模项目实施。关键在于区分技术配置与业务呈现,避免将所有功能堆砌在单一旧工具中。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

IgH EtherCAT 从入门到精通:第 19 章 主站状态机(FSM)深度解析

文章摘要:IgH EtherCAT主站采用多层次有限状态机(FSM)架构实现总线管理。核心是Master FSM,负责总线扫描、从站配置和邮箱通信,通过函数指针状态机模式实现异步非阻塞操作。系统包含多个嵌套FSM:Slave FSM管理单个从站请求,Slave Scan FSM处理拓扑变化扫描,Slave Config FSM配置从站状态转换,Change FSM执行AL状态切换。这种设计通过状态函数指针转换实现复杂协议交互,各FSM协同工作完成EtherCAT网络的初始化、配置和实时通信,支持热插拔和错误

从事嵌入式linux android驱动开发,拥有全栈能力 145

1、JDBC连接数据库步骤(六个步骤)

1.注册驱动: Class.forName("com.mysql.jdbc.Driver");显示的加载到JVM中 2.获取连接: (1) 要连接数据库的url---- String url="jdbc:mysql://localhost:3306/test?"+ "useUnicode=true&characterEncoding=UTF8";//防止乱码 要连接数据库的用户名---- String user="xxxx"; 要连接数据库的密码---- String pass="xxxx";

you can you up up up的博客 2万+

华为OD机试双机位C卷-用户入网定期复评(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【用户入网定期复评】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【用户入网定期复评】。

qq_45776114的博客 833

java JDBC连接数据库步骤及代码

JDBC连接数据库,包含7个步骤 (1)加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现,成功加载后,会将Driver类的实例注册到DriverManager类中。 代码如下: static{ try { ...

夏沐的博客 5万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JDBC连接数据库的步骤,方法

文章目录前言一、JDBC是什么?二、使用步骤1.JDBC连接步骤1. 导入数据库对应的jar包2. 注册驱动3. 获取数据库连接对象4. 定义sql语句5. 获取执行sql的对象 Statement6. 执行sql7. 对结果进行处理8. 释放资源2.准备工作3.JDBC连接数据库步骤代码详解1.导入数据库对应的jar包,并Add As Library2.注册驱动1.编写数据库配置文件jdbc.properties2.编写JDBCUtils工具类读取配置文件,获取连接,关闭资源3.编写测试类,测试JDBC连

weixin_44159171的博客 9136

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java——JDBC连接数据库(步骤详解!!!)

Java——JDBC连接数据库(步骤详解!!!)

贝尔摩德苦艾酒 10万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVA之JDBC连接数据库

JAVA JDBC连接数据库 SQL

qq_53312143的博客 9591

JDBC? Java Database Connectivity(Java语言连接数据库)

JDBC课堂笔记 1、什么是JDBC? Java DataBase Connectivity 在java语言中编写sql语句,对mysql数据库中的数据进行CRUD操作。 2、JDBC相关的类库在哪里? java.sql.*; 3、JDBC本质上是一堆什么呢? java.sql.*; 这个包下都是JDBC的接口,SUN公司制定的! JDBC是体现“接口作用”的非常经典的例子。 JDBC降低了耦合度,提高了扩展力。 对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行! JDBC整

途中的博客 1万+

jdbc连接数据库的基本步骤

jdbc连接数据库的基本步骤 精简版 1.在项目中导入java.sql包 2.加载数据库驱动程序 3.定义数据库的链接地址 4.得到与数据库的连接对象 5.声明sql语句 6.得到语句对象 7.执行sql语句 8.处理sql语句的返回结果 9.关闭对象 Class.forName(“com.my...

bggl的博客 4609

【Java】JDBC连接数据库详细步骤(面试必备)

面试必备,带你寻根知源JDBC连接数据库的六步,知其然知其所以然,超详细步骤手把手带你探究反射注册驱动以及工具类的封装

m0_56164356的博客 4607

【JDBC篇】java 如何连接数据库(超详细步骤)

java 如何连接数据库(超详细步骤)

m0_64231944的博客 5420

Java数据库连接(Java Database Connectivity,JDBC)

第一个jdbc程序 回到顶部 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成。 JDBC为数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。 使用JDBC编写的程序能够自动地将SQL语句传送给

词语大杂烩 2538

JDBC连接MySQL数据库步骤

JDBC全称:Java DataBase Connectivity;是Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,例如:MySQL、Oracle、SQLServer等数据库;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序; JDBC简单的用途就是与数据库建...

weixin_44589334的博客 4251

java JDBC数据库连接步骤

JDBC(java database connect)顾名思义:是一种java连接数据库的方式 1.定义驱动和数据库字符串 2.注册驱动 3.连接数据库 4.数据库操作 5.关闭数据库连接和数据集合 以上5点是连接数据库的一般步骤。 JDBC连接数据库: 1、JDBC所需的四个参数(user,password,url,driverClass) driverClass连接数据库所需的驱动。 什么是驱...

吴成伟的博客 2895

JDBC连接数据库步骤

​ JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1、JDBC所需的参数 2、加载JDBC驱动程序: ​ 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), ​ 这通过java.lang.Class类的静态方法forName(String className)实现。 ​ 例如: ​ try{ ​ //加...

weixin_45493960的博客 1908

JDBC连接数据库7个步骤

JDBC连接数据库7个步骤 JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1、JDBC所需的四个参数(user,password,url,driverClass) (1)user用户名 (2)password密码 (3)URL定义了连接数据库时的协议、子协议、数据源标识。 •书写形式:协议:子协议:数据源标识 协议:在JDBC中总是以jdbc开始 子协议:是桥连接的驱动...

zhouchenkan的博客 2563
上一篇: 多元线性回归之Spss实现
下一篇: JAVA-JDBC: (2) 数据库的粗略的CRUD及SQL注入问题
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值