10月8日 Jdbc(1)

news2024/10/7 13:14:03

jdbc

接口是一个类的父类

 java连接数据库, java操作数据库,  把java作为数据库的一个客户端

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

​        当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

jdbc开发步骤:

  1. 编码, 使用jdk提供的jdbc接口(位于java.sql包),

核心接口: java.sql.Connection(连接)

​ java.sql.Statement(发送sql,通知数据库执行)

​ java.sql.ResultSet(获取查询sql的结果集)

一个核心类: java.sql.DriverManager(数据库驱动管理器), 得到数据库的连接对象

jdbc开发步骤:

  1. 添加第三方数据库驱动ja

  1. 编码, 使用jdk提供的jdbc接口(位于java.sql包),

        核心接口: java.sql.Connection(连接)

​         java.sql.Statement(发送sql,通知数据库执行)

​         java.sql.ResultSet(获取查询sql的结果集)

        一个核心类: java.sql.DriverManager(数据库驱动管理器), 得到数据库的连接对象

 jdbc的编码

//写程序:记住思路和套路  多谢有时候没有太大作用

>1. 项目中导入数据库驱动jar
>2. 加载启动类
>3. 得到连接对象Connection
>4. 创建Statement对象
>5. 编写sql语句(java普通字符串)
>6. 执行之
>7. 如果增删改, 得到结果: 受影响行数, 如果查询,得到结果集(ResultSet), 解析ResultSet得到数据
>8. 关闭资源

实现查询 

import java.sql.*;
import java.util.Date;
import java.util.Scanner;

/**
 * 查询
 */
public class Demo2 {
    public static void main(String[] args) {
         /*
        1. 加载启动类
        2. 得到连接对象Connection
        3. 创建Statement对象
        4. 编写sql语句(java普通字符串)
        5. 执行之
        6. 如果增删改, 得到结果: 受影响行数, 如果查询,得到结果集(ResultSet), 解析ResultSet得到数据
        7. 关闭资源
         */
        Connection conn = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf8&useSSL=false";
            conn = DriverManager.getConnection(url, "root", "123");
            statement = conn.createStatement();
            System.out.print("请输入要查询员工姓名:");
            Scanner input = new Scanner(System.in);
            String name = input.next();
            String sql = "select * from emp where ename = '"+name+"'";
            System.out.println(sql);
            resultSet = statement.executeQuery(sql);

            //循环获取数据, 一行一行的获取
            //一定要先调用next()
            while(resultSet.next()){
                //获取这一行的单元格中数据
                // getXxx(int 列序号): 从1开始   Xxx: 数据类型
                int empNo = resultSet.getInt(1);
                String ename = resultSet.getString(2);
                String job = resultSet.getString(3);
                int mgr = resultSet.getInt(4);
                Date hiredate = resultSet.getDate(5);
                double sal = resultSet.getDouble(6);
                double comm = resultSet.getDouble(7);
                int deptNo = resultSet.getInt(8);

                System.out.println(empNo+","+ename+","+job+","+mgr+","+hiredate+","+sal+","+comm+","+deptNo);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally{
            //倒序关
            try {
                if(resultSet != null) {
                    resultSet.close();
                }
                if(statement != null) {
                    statement.close();
                }
                if(conn != null) {
                    conn.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

使用jdbc操纵数据库

import javax.xml.bind.SchemaOutputResolver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * 使用jdbc操作数据
 */
public class Demo1 {
    public static void main(String[] args) {
        /*
        1. 加载启动类
        2. 得到连接对象Connection
        3. 创建Statement对象
        4. 编写sql语句(java普通字符串)
        5. 执行之
        6. 如果增删改, 得到结果: 受影响行数, 如果查询,得到结果集(ResultSet), 解析ResultSet得到数据
        7. 关闭资源
         */
        Connection conn = null;
        Statement statement = null;

        try {
            //1. 加载启动类  反射  核心: Class
            Class.forName("com.mysql.jdbc.Driver");

            //2.得到连接对象Connection  通过DriverManager的静态方法getConnection()
            String url = "jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf8&useSSL=false";
            conn = DriverManager.getConnection(url, "root", "123");
            //System.out.println(conn);
            System.out.println("与数据库服务器连接上了...");

            //3.创建Statement对象
            statement = conn.createStatement();

            //4.编写sql语句
            //System.out.print("请输入要删除的员工编号:");
            System.out.print("请输入要加薪的员工编号:");
            Scanner input = new Scanner(System.in);
            int empno = input.nextInt();

            //删除

            //String sql ="delete  from  emp where empno = "+empno;

            String sql ="update emp set sal = sal + 500 where empno = "+empno;

            //5.执行之  执行增删改sql:  Statement的 int executeUpdate(sql)
            //     执行查询sql: Statement的 ResultSet executeQuery(sql)
            int rs = statement.executeUpdate(sql);
            if(rs > 0){
                //System.out.println("删除成功");
                System.out.println("加薪成功");
            }


        } catch (ClassNotFoundException e) {//Driver类找不到
            //出现原因: 1. 驱动jar没到导入  2. 驱动类包.类名字符串写错
            e.printStackTrace();
        } catch (SQLException throwables) {
            //出现原因: 1. 数据库服务没有开启  2. url写错  3. 用户名错误  4.密码错误
            throwables.printStackTrace();
        }finally{
            //倒序关
            try {
                if(statement != null) {
                    statement.close();
                }
                if(conn != null) {
                    conn.close();
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }

}
important!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWS SAA-C03考试知识点整理

S3: 不用于数据库功能 分类: S3 Standard :以便频繁访问 S3 Standard-IA 或 S3 One Zone-IA : 不经常访问的数据 Glacier: 最低的成本归档数据 S3 Intelligent-Tiering智能分层 :存储具有不断变化或未知访问…

网络安全副业如何年入数十万 (如何让你的副业超过主页)

安全从业经历与副业经验画了一张“网络安全之副业有道”的思维导图”,该图随着认知提高,将继续丰富完善,共同交流学习。 任何学习的过程一定是要有正向反馈的,如技能的提升、圈内的名气、输出知识带来的经济收入,等等…

如何使用Inno Setup将可执行文件.exe和它的依赖文件及文件夹打包成一个可以安装的.exe文件

环境: Inno Setup 6.2.2 rustdesk编译文件和依赖 问题描述: 如何使用Inno Setup将可执行文件.exe和它的依赖文件及文件夹打包成一个可以安装的.exe文件 解决方案: 一、创建编译脚本 1.新建脚本 下一步 2.填写程序名称版本等信息 3.设置安装默认目录和运行用户更改 选…

什么是SOI

在芯片制程中,经常会听到“SOI”这个名词。而芯片制造上也通常使用SOI衬底制造集成电路。SOI衬底的独特结构可以大大提高芯片的性能,那么SOI到底是什么?有哪些优点?应用在哪些领域?如何制造? 什么是SOI衬底…

SystemVerilog Assertions应用指南 Chapter 1.14蕴含操作符

1.14蕴含操作符 属性p7有下列特别之处 (1)属性在每一个时钟上升沿寻找序列的有效开始。在这种情况下,它在每个时钟上升沿检查信号“a”是否为高。 (2)如果信号“a”在给定的任何时钟上升沿不为高,检验器将产生一个错误信息。这并不是一个有效的错误信息,因为我…

Next.js和sharp实现占位图片生成工具

占位图片(Placeholder Image) 是前端开发中常用的工具,用于在网页加载慢或未加载完整的情况下,为图像元素提供占位。但是,有时候我们需要更灵活的方式来生成自定义占位图片以满足特定需求。在这篇博客中,我…

ArGIS Engine专题(14)之GP模型根据导入范围与地图服务相交实现叠置分析

一、结果预览 二、需求简介 前端系统开发时,可能遇到如下场景,如客户给出一个图斑范围,导入到系统中后,需要判断图斑是否与耕地红线等地图服务存在叠加,叠加的面积有多少。虽然arcgis api中提供了相交inserect接口,但只是针对图形几何之间的相交,如何要使用该接口,则需…

文件对比工具Beyond Compare 4(4.4.7) for Mac

Beyond Compare 4 是一款强大的文件和文件夹比较工具。它提供了一个直观的界面,使您可以快速比较和同步文件和文件夹。 Beyond Compare 4 具有许多有用的功能,包括比较和合并文件、文件夹和压缩文件,以及同步文件和文件夹。它支持各种类型的文…

C++新经典 | C++ 查漏补缺(STL标准模板库)

目录 一、STL总述 1.容器 (1)顺序容器 (2)关联容器 (3)无序容器 (4)常用容器 (4.1)array 数组 (4.2)vector (4.3…

软件功能测试的6种方法

对于测试人员而言,软件产品每个按钮的功能是否准确,链接是否能正常跳转,搜索时会不会出现页面错误,验证并减少这些软件使用过程中可能出现的各种小问题都是功能测试的内容。而对于用户而言,功能能否正常执行都是非常直…

Visual Components软件有哪些用途 衡祖仿真

Visual Components是一款用于制造业虚拟仿真的软件,主要用于工业自动化和制造领域。我们一起来看一下该软件有哪些功能吧! 1、工厂仿真 Visual Components可以建立虚拟的工厂环境,模拟和优化生产流程。用户可以创建工厂布局、定义设备和机器人…

【试题031】C语言关系运算符和逻辑非例题

1.题目: 设int p;,与if(p0)等价的是 () A if(p) B if(!p) if(p1) Dif(p!0) 2.分析: [ ] if中的条件是p0为真,也就是说p0[ ] 那么!p1,逻辑非就是将结果取反的操作[ ] p0也就是p≠1 3.截图:

KT142C语音芯片直接焊到我的板子上面,插上usb,但是出不来虚拟U盘怎么办

KT142C的芯片,我直接焊到我的板子上面,插上usb,但是出不来虚拟U盘怎么办? 1、这个问题,其实最好的解决方案,就是对比我们的测试板,因为出现这种情况,不好找原因 2、但是有测试板的话…

【Arduino32】PWM控制直流电机速度

硬件准备 震动传感器:1个 红黄绿LED灯:各一个 旋钮电位器:1个 直流电机:1个 1K电阻:1个 220欧电阻:3个 杜邦线:若干 硬件连线 软件程序 const int analogInPin A0;//PWM输入引脚 const…

AWS SAP-C02教程8-大数据和机器学习

接下来是一个组跟数据和机器学习有关的内容,这部分在SAP-C02考试中目前占比可能不多且不是很深入,但是随着AI的趋势,这部分内容将会越来越重要,但是经常会出现在考题的选项中,因此了解其基本功能和在解决方案中的应用也是非常重要的。 目录 1 大数据1.1 Kinesis家族1.1.1…

JMeter添加插件

一、前言 ​ 在我们的工作中,我们可以利用一些插件来帮助我们更好的进行性能测试。今天我们来介绍下Jmeter怎么添加插件? 二、插件管理器 ​ 首先我们需要下载插件管理器jar包 下载地址:Install :: JMeter-Plugins.org 然后我们将下载下来…

Docker-镜像的备份迁移及私有仓库的搭建

一、Docker-备份与迁移 A服务器系统配置 B服务器系统配置 1.用命令将容器保存为镜像。 案例,将A服务器的Docker容器迁移到另外一台服务器B,A服务器的容器配置过对应的文件,不想在B服务器重新搭建,可以使用该案例。 docker c…

vue 组件封装 综合案例1

vue 组件封装 综合案例 **创建 工程: H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day05\准备代码\11-综合案例-商品列表 vue --version vue c…

2023年中国游戏机设备分类、销量及市场规模分析[图]

游戏机设备行业是指生产和销售游戏机设备的行业,包括游戏机硬件、游戏软件、游戏周边设备等。随着科技的进步和游戏市场的不断扩大,游戏机设备行业也在不断发展和和创新。 游戏机设备分类 资料来源:共研产业咨询(共研网&#xff…

关于setInteval定时器在不同浏览器下表现差异

背景: 项目下用到websocket, 中间使用了setInterval 定时向服务端发送心跳包, 5s/次, 观察正常, 就将浏览器最小化后, 经过了两天, 周一过来查看, 咋才 5000次; 问题分析: 遇到这种简单的问题当然是请教一下GPT 来的最快最实际, 不出所料, 马上得到证实; chrome 88 版本之…