09-JDBC-程序员宅基地

技术标签: java  mysql  jdbc  小码哥 java架构师系列  

如何通过Java操作数据库

在这里插入图片描述
三大厂商实现数据库的底层代码肯定不一样(不然也不会开发三套数据库)。在没有JDBC之前,如果想开发人员是面向MySQL开发的,但是一段时间后需要迁移到Oracle数据库,那么原来编写的数据库代码都不能用了。JDBC的作用是提供开发人员操作数据库的接口,然后各大厂商实现接口,开发人员只需要面向JDBC接口编程。
*属于JavaSE的一部分:有JDK就可以用

JDBC使用步骤

1.将Driver(驱动程序)注册到DriverManager(驱动程序管理者)
比如用的驱动是mySQL驱动(lib目录下的mysql-connector-java包),就需要这个步骤将驱动注册到驱动程序管理者上进行管理。

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

上述代码是类装载代码,装载一个类,会执行这个类中的静态代码块(合理利用源码资源)。com.mysql.jdbc.Driver类源码如下:
在这里插入图片描述
java.sql.DriverManager.regiserDriver(new Driver());达到了注册驱动的效果。

2.利用DriverManager创建Connection(数据库连接)
上一步注册好了,就已经知道了要用哪一个数据库。这一步可以用JDBC中的DriverManager来创建连接。

DriverManager.getConnection(url:"jdbc:mysql://localhost:3306/xmg",usename:"root",password:"root");

在这里插入图片描述
3.利用Connection创建Statement(语句)

Statement stmt=conn.createStatement();

4.利用

stmt.execute(sql:"");

5.关闭资源(关闭Statement、Connection)

stmt.close();
conn.close();

进一步,可以抽取数据库相关信息:
在这里插入图片描述

JDBC版本

在这里插入图片描述
我们只需要将供应商的Jar放在类路径中,然后DriverManager就可以自动检测并加载驱动程序:所以Class.forName(driverClassName);不用写了,程序会自动干这件事情。

private static void test2() {
    
        // 0.数据库相关的信息

        // JDK7开始,try-with-resources

        try {
    
            // Class.forName(driverClassName);
            // DriverManager.registerDriver(new Driver());
            //try-with-resource语句
            try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                 Statement stmt = conn.createStatement()) {
    
                stmt.execute("UPDATE student SET age = 100 WHERE id = 1");
            }
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    }

Statement的常见API

在这里插入图片描述

结果集resultSet

在这里插入图片描述

 private static void test4() throws Exception {
    
        try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            Statement stmt = conn.createStatement()) {
    
            String sql = "SELECT id myId, name myName FROM student";
            ResultSet rs = stmt.executeQuery(sql);  // 4:编译、解析、优化、执行
            while (rs.next()) {
    
                System.out.println(rs.getInt("myId"));
                System.out.println(rs.getString("myName"));
                System.out.println("---------------------");
            }
        }
    }

依赖注入与PreparedStatement

在这里插入图片描述
没使用PreparedStatement:

  Statement stmt = conn.createStatement()) {
    
            String sql = "SELECT * FROM user WHERE username = '" + username + "' AND password = '" + password + "'";
            System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);

使用PreparedStatement:

String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
        try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
     // 3:编译、解析、优化
            // 设置参数值
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行SQL语句
            ResultSet rs = pstmt.executeQuery(); // 执行
            if (rs.next()) {
    
                System.out.println("登录成功");
            } else {
    
                System.out.println("登录失败,用户名或密码不正确");
            }
        }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39521369/article/details/118368923

智能推荐

Google验证码ReCaptcha V3-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏10次。因为工作的原因需要使用Google验证码ReCaptcha v3,所以我就上网了解了一下,下面是我的一些学习分享。大家应该都是用过google的验证码,如这种情况的需要我们手动去选择,ReCaptcha V3则不需要了,不需要用户去手动的验证。大白话:用户不用再选择哪些图里有飞机,哪些图里有汽车等。ReCaptcha V3 会在后台对用户的行为进行监测,然后会返回一个分数(0-1)之间,我们就可以自定义了,小于0.5的就是机器人,他们就需要被验证,验证手机号等。1.首先是去reCapt._recaptcha v3

Web集群之Haproxy+nginx-程序员宅基地

文章浏览阅读92次。目录一、比较常见的Web集群调度器二、Haproxy应用分析三、Haproxy调度算法原理四、Haproxy搭建 Web 群集1、编译安装Nginx服务器2、部署haproxy服务器3、测试 Web集群五、日志六、Haproxy参数优化一、比较常见的Web集群调度器目前常见的Web集群调度器分为软件和硬件软件通常使用开源的LVS、Haproxy、NginxLVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好硬

基于SpringBoot+Vue的华强北商城二手手机管理系统毕业设计-程序员宅基地

文章浏览阅读823次,点赞6次,收藏7次。博主介绍:全网粉丝15W+,CSDN特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐Java精品实战案例《500套》

机器学习:生成模型和判别模型的区别_概率框架的生成模型与判别模型之间的差异以及代表性的机器学习算法-程序员宅基地

文章浏览阅读418次。一、名词解释生成方法由数据学习联合概率风波P(X,Y),然后求出条件概率分布P(Y|X)为预测的模型,即生成模型:P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)}P(Y∣X)=P(X)P(X,Y)​这样的方法之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关系。典型的生成模型由朴素贝叶斯法和隐马尔可夫模型。判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关_概率框架的生成模型与判别模型之间的差异以及代表性的机器学习算法

php图床api源码,京东免费图床上传接口php源码-程序员宅基地

文章浏览阅读920次。/**京东图床PHP代码*/if (class_exists('CURLFile')) { // php 5.5$post['file'] = new \CURLFile(realpath($_FILES['Filedata']['tmp_name']));} else {$post['file'] = '@'.realpath($_FILES['Filedata']['tmp_name']);}...

基于stm32f103的红外对管(TCRT5000)接收发送_红外对管引脚-程序员宅基地

文章浏览阅读7.6k次,点赞9次,收藏80次。基于stm32f103的红外对管(TCRT5000)接收发送广西●河池学院广西高校重点实验室培训基地系统控制与信息处理重点实验室本篇博客来自河池学院: 智控无人机小组写作时间: 2020年8月8日一、模块简介在此模块中黑色灯管为接收端,白色灯管为发送端,可通过电位器旋钮调节检测距离,有效距离范围 2~30mm,检测角度35度,工作电压为 3.3V-5V。电源指示灯提示是否有电源,开关指示提示是是否有物体遮挡。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广_红外对管引脚

随便推点

java后台微信小程序获取手机号_java 小程序能获取openid,但是不能获取手机号码是为什么-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏9次。首先我们获取手机号需要合法域名的比如(https://www.baidu.com)自己的域名在这里我们看,我这个请求地址是会提示不合法的,所以无法请求现在我们利用合法的域名来获取手机的接口,是Ok的话不多说,我们直接干代码首先wxml文件显示的ui <view class='head head-height'> <block wx:if="{{phone==null||phone==''}}"> <view class="userinfo"_java 小程序能获取openid,但是不能获取手机号码是为什么

ProcessOn - 高大上的免费中文在线作图工具/思维导图制作软件_process on电脑版本-程序员宅基地

文章浏览阅读2.7k次。点此进入:https://www.processon.com/i/5518b08ae4b0a52a9843e123 ProcessOn 网页版在线作图工具!你只需要有一个浏览器即可制作思维导图、流程图、UML图、界面原型设计、组织结构图等等,上手非常容易,而且免费、免安装无烦恼。简单强大的在线作图工具:ProcessOn 是一款用 HTML5 开发的在线网页版作图工具 (类_process on电脑版本

语义分割标注工具 coco-annotator 安装&使用_coco-annotator linux安装教程-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏4次。环境ubuntu18.04基于Docker1-Uninstall old versionssudo apt-get remove docker docker-engine docker.io containerd runc2-Install Docker CEUpdate the apt package index:sudo apt-get updateIns..._coco-annotator linux安装教程

用两个栈模拟队列_两个站模拟队列-程序员宅基地

文章浏览阅读868次。文章目录前言一、两个栈模拟队列的入队操作二、两个栈模拟队列的出队操作三、完整代码前言用两个栈实现队列一、两个栈模拟队列的入队操作代码如下(示例):void push(int x) { stack1.push(x); }二、两个栈模拟队列的出队操作代码如下(示例):int pop() { if (stack2.empty() == true){ while (stack1.empty() == false){ _两个站模拟队列

IntelliJ IDEA上手这一篇就够了,从入门到上瘾-程序员宅基地

文章浏览阅读1.7w次,点赞30次,收藏162次。IntelliJ IDEA上手这一篇就够了,从入门到上瘾_intellij idea

网络协议讲解(TCP-UDP-IP-DNS-NAT-DHCP-HTTP等)_tcp/ip协议和http协议和dhcp-程序员宅基地

文章浏览阅读1.7k次。TCP/IP协议:是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP:是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。UDP:UDP用户数据报协议,是面向无连接的通讯协议IP:IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高..._tcp/ip协议和http协议和dhcp

推荐文章

热门文章

相关标签