JDBC连接数据库的几种方法与简单解析

2023-11-11

首先要知道jdbc:使用Java代码发送sql语句的技术就是jdbc技术。即jdbc是一个接口,用于不同的数据库(oracle、mysql、sqlserver。。)的操作。使用jdbc发送sql语句的前提:
登录数据库服务器(连接数据库服务器)
数据库的IP地址
端口
数据库用户名
密码

这里写图片描述
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接

——————————-oracle——————
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521

——————————-mysql——————-
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称(本机一般默认为localhost);
port:端口号,默认3306

—————————SQL Server——————
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433

————————–DB2————————–
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<:port>/dbname
注:machine_name:数据库所在的机器的名称;(port默认5000)
这里以Mysql为例。
所需jar包:mysql-connector-java-5.1.7-bin.jar
代码如下:

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Properties;

import org.junit.Test;
public class Demo1{
        //首先连接到数据库的URL
        private String url = "jbdc:mysql://localhost:3306/demo";/*jdbc协议:数据库子协议:主机:端口/连接的数据库*/
        private String user = "root";//数据库用户名
        private String password = "root";//数据库密码
        /*
            第一种方法
        */
    @Test
    public void test1() throws Exception{
        //1.创建驱动程序类对象
        Driver driver = new com.mysql.jdbc.Driver();//需要导入上面提到的jar包
        //设置用户名和密码
        Properties pro = new Properties();
        pro.setProperty("user",user);
        pro.setProperty("password",password);
        //2.连接数据库
        Connection conn = driver.connect(url,pro);
        //测试是否连接成功
        System.out.println(conn);
    }
    /*
            第二种方法(使用驱动管理器类连接数据库)
        */
        @Test
    public void test2() throws Exception{
    //创建驱动程序类对象
        Dirver dirver = new com.mysql.jdbc.Dirver();   

/*Mysql*/
        //Driver driver2 = new com.oracle.jdbc.Driver();/*oracle*/
        //1.注册驱动程序(可以注册多个)
        DirverManager.registerDirver(dirver);
        //2.建立连接到数据库
        Connection conn = DriverManager.getConnection(url, user, password);
        //测试是否连接成功
        System.out.println(conn);
    }   

}

运行后,成功结果应该会显示类似信息:
这里写图片描述


分析:在test2方法中,创建驱动程序类对象new com.mysql.jdbc.Dirver(); 后在进行注册驱动程序DirverManager.registerDirver(dirver); 实际上已经注册了两次。因为在Driver.class文件中有如下一段静态代码块:

// ---------------------------------------------

    //
    // Register ourselves with the DriverManager
    //
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

即在进行创建驱动程序类对象Driver的时候就执行了registerDriver(new Driver());,所以第二种方法中省略DirverManager.registerDirver(dirver);语句也正确。


基于以上分析,可以采用 通过得到字节码对象的方式加载静态代码块,从而注册驱动程序,即把创建驱动类对象语句换成Class.forName(“com.mysql.jdbc.Driver”);括号内双引号语句为Dirver.Class文件所在的包名(上面所提到的jar包里面)即可。完整代码如下:

@Test
    public void test3() throws Exception{
        //通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //2.连接到具体的数据库
        Connection conn = DriverManager.getConnection(url, user, password);
        System.out.println(conn);
    }

据此,这部分的连接已经成功了。对代码进行简单的分析有助于理解记忆而不是死记硬背达到活学活用。本例以Mysql数据库进行,其他数据库类似。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC连接数据库的几种方法与简单解析 的相关文章

  • Android Studio 0.8.2 URI 有一个权限组件

    我收到 Gradle 项目同步失败 消息 当我启动 Android Studio 时 当我尝试清理项目时 我收到 无法完成 Gradle 执行原因 URI 具有权限组件 我已经尝试了几件事 但仍然陷入困境 我将配置文件从用户文件夹中移出 并
  • 是否有与 Java 的 IdentityHashMap 等效的 Python 版本?

    我正在遍历一个数据结构 想要构建一个映射 X gt Y 的字典 其中 X 是我正在遍历的数据结构中的一个字段 Y 是我正在动态构建的数据结构中的一个字段 X 是不可散列的类型 Java的IdentityHashMap的目的是模拟动态字段 由
  • Flink Kafka - 如何使应用程序并行运行?

    我正在 Flink 中创建一个应用程序 读取某个主题的消息 对其进行一些简单的处理 将结果写入不同的主题 我的代码确实有效 然而它不并行运行我怎么做 看来我的代码只在一个线程 块上运行 在 Flink Web 仪表板上 应用程序进入运行状态
  • 为什么java中的BigInteger被设计成不可变的?

    在 java 中 BigInteger 是不可变的 但我想了解为什么 因为很多时候它用于进行大量计算 从而产生大量对象 所以 不让它变得不可变感觉有点直观 我想到的情况类似于字符串操作 然后是 StringBuilder 的选项 是否应该有
  • Webdriver 和 Chrome:DevToolsActivePort 文件不存在

    我正在尝试安装 配置 Selenium 以在队友不在办公室时进行一些 UI 测试 我已经安装了 Selenium Webdriver 和 Eclipse 以及 Chrome Firefox 和 Edge 浏览器驱动程序 我有一些非常简单的脚
  • JTextPane 的样式是否具有类似控制台的格式?

    有没有办法使 JTextPane 中的文本看起来与控制台输出的文本相似 我的意思是 基本上 每个字符如何具有相同的宽度 以便 ASCII 艺术或间距缩进之类的东西可以正常工作 例如 目前 如果我输入 First 然后输入 5 个空格 然后在
  • Mockito - 监视真实对象调用原始方法

    想象一下下面的代码 List list List spy spy list doThrow new NullpointerException when spy get 0 doThrow 执行list get 0 这根本没有意义 我想定义模
  • Spring:url 无法正确解析链接

    尽管我对 Java 有丰富的经验 但我对 Spring 框架和 Web 应用程序还很陌生 当我在本地 tomcat 服务器上运行我的网站时 URL 为 http localhost 8080 myApp 现在 请求映射将我委托到我的主页 R
  • 尽管使用了 NTP 偏移量,设备仍会在几秒后启动指令

    背景 我有两台物理设备 一台 Galaxy S3 手机 和一台 Asus 700T 平板电脑 我想在同一时间执行同一组指令 因此 我使用的是 Android 的平台框架 基本 SNTP 客户端代码 https github com andr
  • 在 Volley 中更新 UI 最有效的方法是什么

    最近我在 android 中使用 Volley 库 它工作得很好 但我想知道更新 UI 的最有效方法 我有一个包含所有 Volley 方法的 Utils 类 现在我传递了所有视图将作为参数更新 但我读到我可以在活动中实现侦听器 然后将它们作
  • R:连接到 Teradata 时 JDBC() 找不到 Java 驱动程序路径

    我正在尝试通过 RStudio 连接到 Teradata 但由于某种原因 JDBC 函数在识别 Java 驱动程序所在的路径时出现问题 请参阅下面的代码 library RODBC library RJDBC library rJava b
  • 如何生成0-8范围内除一个特定数字之外的随机数?

    我正在尝试开发 Tic Tac Toe 游戏 其中玩家 1 将单击一个按钮放置 X 稍后玩家 2 计算机 将在第一步中随机将 O 放置到其他按钮 为此 我需要创建一个随机数0 8 之间 除了玩家 1 点击的那个之外 我正在使用以下代码来生成
  • Android O - 通知通道和NotificationCompat

    我无法改变这种感觉 Android 开发人员再次提出了一些新东西 却让每个人都对他们如何看待该功能的使用一无所知 我说的是 Android O 中的通知通道 多年来 我一直使用兼容性支持库来避免处理特定平台的细节 即 Notificatio
  • Java KeyListener:按下两个键时如何执行操作?

    请看下面的代码 import java awt event import javax swing import java awt public class KeyCheck extends JFrame private JButton ch
  • String.substring 在 Java 中到底做了什么?

    我一直想如果我这样做String s Hello World substring 0 5 然后我就得到一个新字符串s Hello Java API 文档中也记录了这一点 返回一个新字符串 该字符串是该字符串的子字符串 但当我看到下面两个链接
  • Java 8 Streams - 嵌套映射到列表

    firstlist stream map x gt return secondList stream map y gt return a string collect Collectors toList Output I need Get
  • 从多个文本文件读取数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是Java编程新手 我正在尝试打印
  • Rmi 错误 IllegalArgumentException、MarshalException

    为所有人上课 package Task2 import java rmi RemoteException import java rmi server UnicastRemoteObject public class IdCl extend
  • ACTION_MEDIA_BUTTON 的广播接收器不起作用

    我正在为 Android 操作系统版本 4 0 3 ICS 编写 Android 应用程序 问题是我没有从 BroadcastReceiver 的 onReceive 方法中的 Log d 获得输出 这意味着我的应用程序没有正确处理广播 我
  • 为什么 pagefactory 类在从另一个类初始化时返回 null

    在我的测试课上 我有DesiredCapabilities为 Appium 测试设置 在该课程中 我初始化了 BasePage 课程pagefactory元素 当我运行测试时 它按预期工作 现在 我尝试将 DesiredCapability

随机推荐

  • vue路由history模式刷新404问题解决方案

    server listen 8888 默认端口是80 如果端口没被占用可以不用修改 server name localhost root E vue my project dist vue项目的打包后的dist location try f
  • 2021-08-12c++考试题目

    一 选择题 每题3分 1 关于虚函数 正确的描述是 A 构造函数不能是虚函数 B 析构函数不能是虚函数 C 虚函数可以是友元函数 D 虚函数可以是静态成员函数 2 在32位操作系统g 编译器环境下 下面程序的运行结果为 1 2 3 4 5
  • Servlet线程安全吗?

    Servlet不是线程安全的 要解释为什么Servlet为什么不是线程安全的 需要了解Servlet容器 即Tomcat 使如何响应HTTP请求的 当Tomcat接收到Client的HTTP请求时 Tomcat从线程池中取出一个线程 之后找
  • 伏秒平衡

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 相关介绍 伏秒值就是伏秒积 即电感两端的电压V和这段时间T的乘积 顾伏秒值也通常称作为伏秒积 伏秒平衡 一般用在开关电路 伏秒积平衡没有要求一定是恒压源激励 电感两端电压是
  • bs4爬取网页图片

    最近学习爬虫 利用bs4批量爬取图片 由于每个父链接点进去的子链接命名格式不一样 所以暂时没有找到把所有父链接下子链接图片全部下载的方法 只是下载了每个父链接点进去的第一个子链接图片 import requests from bs4 imp
  • DataGrip简单特性介绍和navicat作简单对比

    本文主要是面向学生或者初学者的 DataGrip 版本 2020 2 Navicat版本 Navicat for mysql V11 2 以下只是本人简单的使用感受 没有指标上 性能上 的测试 可能有很多点是自己摸索不到从而产生误会 请各位
  • mysql delete 与drop_MySQL中 delete和drop的区别

    DELETE命令的简单介绍 DELETE是一种数据操作语言 DDL 命令 可以使用DELETE命令来从表中删除部分或全部记录 可以和WHERE子句一起使用 用于删除满足添加的某些记录 如果未指定WHERE条件 则将删除所有记录 相关视频教程
  • HashSet集合添加元素的过程

    HashSet底层为数组 链表存储数据 根据元素的哈希值确定元素在数组中存储的位置 当哈希值一样时 调用equals 方法 当为true时 则表明数据一样 否则不一样 我们向HashSet中添加元素a 首先调用元素a所在类的hashCode
  • 基于mykernel的简单时间片轮转多道程序内核代码分析

    一 实验环境 1 mykernel mykernel是由科大孟宁老师建立的一个用于开发您自己的操作系统内核的平台 它基于Linux Kernel 3 9 4 source code 我们可以在这里找到mykernel的源代码 https g
  • 计算机网络课程设计-网络聊天程序的设计与实现

    一 实验题目 网络聊天程序的设计与实现 二 实验目的 了解Socket通信的原理 在此基础上编写一个聊天程序 三 总体设计 一 实验原理 WinSock是一个网络编程接口 可以访问很多种网络协议 它是TCP IP协议的一种封装 通过调用Wi
  • 垃圾回收器(GC)

    目录 垃圾回收 概述 垃圾回收机制 垃圾回收标记阶段 Finaliztion机制 垃圾回收阶段算法 System gc 与STW 垃圾回收器 CMS G1回收算法 查看 JVM 垃圾回收器设置垃圾回收器 垃圾回收 概述 垃圾回收功能是jav
  • 家庭媒体服务器系统,如何创建自己的“家庭媒体流服务器”使用Plex与FreeNAS - 第3部分...

    每个人都有自己的电影 歌曲 视频歌曲 图片等的收藏 他们很多都想知道我们如何流到我们所有的家庭设备 这里是我们可以使用Plex Media Server通过LAN网络在我们的家中使用智能电视 iPad 手机 平板电脑 笔记本电脑等设备流式传
  • 预处理命令 文件包括

    预处理命令 源程序中以 开头的行称为预处理指令 预处理指令并不是C语言的语法成分 而是传给编译程序的指令 包括 宏定义 define undef 文件包含 include 条件编译 if ifdef else elif endif 其他 l
  • Webmin--一个用于Linux基于Web的系统管理工具

    Webmin是一个用于Linux系统管理的开源的基于web的系统管理配置工具 有了这个工具的帮助 我们可以管理内部的系统配置 诸如设置用户账户 磁盘配额 像Apache DNS PHP MySQL 文件共享的服务等 Webmin应用程序是基
  • 问题 J: 36.for循环求阶乘

    题目描述 利用for循环来计算n 的值 输入格式 输入一个整数n n lt 20 输出格式 输出n 的结果是多少 输入样例 3 输出样例 6 这是一道肥肠煎蛋的递归题 边界是n 0 注意定义函数时要用long long哦 完整代码如下 in
  • c++ 第五章 模板

    模板 程序 算法 数据结构 数据结构 能够存储任意类型 算法 能够操作存储任意类型数据结构 泛型编程 泛型编程 面向过程编程 用模板实现函数过程 面向对象编程 用模板实现类 一 基本范例 a 模板定义是以template关键字开头 b 类型
  • Redis高可用高性能缓存的应用系列03 - 缓存过期淘汰策略LRU、LFU

    概述 Redis高可用高性能缓存的应用系列的第3篇 主要介绍Redis缓存过期淘汰策略和内存淘汰策略回收的LRU和LFU的知识点进行说明 Redis过期键删除策略 Redis设置key时 都会设置一个过期时间 那么当过期时间到了都是怎么处理
  • 【地理空间】轨迹相似度算法(DTW、LCSS)

    序列相似度 在现实生活中我们常常需要比较两串数字的相似度 比如两串数字 一维 再比如两条轨迹 二维 那么如何计算两个序列的相似度呢 有人提出了DTW算法 一种计算序列距离的方法 DTW算法原理 算法原理主要参考 https blog csd
  • Databend 设计概述

    Databend 是一个开源的 完全面向云架构的新式数仓 它提供快速的弹性扩展能力 并结合云的弹性 简单性和低成本 使 Data Cloud 构建变得更加容易 Databend 把数据存储在像 AWS S3 Azure Blob 这些云上的
  • JDBC连接数据库的几种方法与简单解析

    首先要知道jdbc 使用Java代码发送sql语句的技术就是jdbc技术 即jdbc是一个接口 用于不同的数据库 oracle mysql sqlserver 的操作 使用jdbc发送sql语句的前提 登录数据库服务器 连接数据库服务器 数