MySQL——JDBC

2023-11-06

1、数据库驱动

在这里插入图片描述

  • 程序需要通过数据库驱动,和数据库打交道

2、JDBC

  • SUN公司为了简化开发人员的(对数据的统一)操作,提供了一个(Java操作数据库的)规范,俗称JDBC
  • 对于开发人员,只需要掌握JDBC接口操作即可

3、第一个JDBC程序

  1. 创建测试数据库

    CREATE DATABASE `jdbcStudy` CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    USE `jdbcStudy`;
    
    CREATE TABLE `users`(
     `id` INT PRIMARY KEY,
     `NAME` VARCHAR(40),
     `PASSWORD` VARCHAR(40),
     `email` VARCHAR(60),
     birthday DATE
    );
    
     INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`)
    VALUES('1','zhangsan','123456','zs@sina.com','1980-12-04'),
    ('2','lisi','123456','lisi@sina.com','1981-12-04'),
    ('3','wangwu','123456','wangwu@sina.com','1979-12-04')
    
  2. 导入数据库驱动
    在这里插入图片描述

  3. 编写测试代码

    package demo;
    
    import java.sql.*;
    
    //第一个JDBC程序
    public class JdbcFirstDemo {
        public static void main( String[] args ) throws ClassNotFoundException, SQLException {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver"); //固定写法,加载驱动
    
            //2.连接信息
            String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
            String username = "root";
            String password = "123456";
            //3.连接成功    数据库对象 Connection 代表数据库
            Connection connection = DriverManager.getConnection(url, username, password);
            //4.执行SQL的对象 Statement 执行sql的对象
            Statement statement = connection.createStatement();
            //5.执行SQL的对象 去 执行SQL,可能存在结果,查看返回结果
            String sql="SELECT * FROM users";
            ResultSet resultSet = statement.executeQuery(sql);  //返回结果集,结果集封装了全部查询出来的结果
            while (resultSet.next()){
                System.out.println("id="+resultSet.getObject(1));
                System.out.println("name="+resultSet.getObject(2));
                System.out.println("pwd="+resultSet.getObject(3));
                System.out.println("email="+resultSet.getObject(4));
                System.out.println("birthday="+resultSet.getObject(5));
                System.out.println("======================");
            }
            //6.释放连接
            resultSet.close();
            statement.close();
            connection.close();
        }
    }
    
    

    在这里插入图片描述

4、步骤总结

  1. 加载驱动
  2. 连接数据库 DriverManager
  3. 获得执行sql的对象 Statement
  4. 获得返回的结果集

5、JDBC对象解释

  • Class.forName(“com.mysql.jdbc.Driver”); //加载驱动
  • connection: 数据库对象,获得一个数据库
  • statement: 执行SQL语句
    1. statement.executeQuery(sql) //查询语句,返回ResultSet结果集
    2. statement.executeUpdate(sql) //更新语句,返回更新的行数
    3. statement.execute(sql) //任何SQL语句
  • ResultSet: SQL查询结果集,根据数据库的类型
    1. resultSet.next() //指针,移动到下一个数据
    2. resultSet.getInt(参数); //获得整型数据,可以是下标(从1开始),也可以是"表字段名称"
    3. resultSet.getString(参数); //获得字符串数据,可以是下标(从1开始),也可以是"表字段名称"
    4. resultSet.getObject(参数); //获得任意型数据,可以是下标(从1开始),也可以是"表字段名称"
  • 释放资源:
    1. resultSet.close();
    2. statement.close();
    3. connection.close();

6、写工具类

  1. 在src目录下创建 db.properties 文件

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false
    username = root
    password = 123456
    
  2. 创建工具类 JdbcUtils

    package demo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties;
    
    public class JdbcUtils {
        private static String driver=null;
        private static String url=null;
        private static String username=null;
        private static String password=null;
        static {
            try{
                InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
                Properties properties = new Properties();
                properties.load(in);
                driver= properties.getProperty("driver");
                url= properties.getProperty("url");
                username= properties.getProperty("username");
                password= properties.getProperty("password");
                // 1.驱动只用加载一次
                Class.forName(driver);
            }catch (IOException e){
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        // 获取连接
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url, username, password);
        }
    
        //释放资源
        public static void release( Connection conn, Statement st,ResultSet rs ){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(st!=null){
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    
    
  3. 使用工具类

    package demo;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestInsert {
        public static void main( String[] args ) {
            Connection conn=null;
            Statement st=null;
            ResultSet rs=null;
            try {
                conn = JdbcUtils.getConnection();//获得数据库连接
                st = conn.createStatement();    //获得SQL的执行对象
                String sql="INSERT\tINTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) " +
                        "VALUES(4,'Java学不会','123456','2929054638@qq.com','2022-07-02')";
                int i = st.executeUpdate(sql);
                if(i>0){
                    System.out.println("插入成功");
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                JdbcUtils.release(conn,st,rs);
            }
    
        }
    }
    
    

7、JDBC操作事务

7.1、创建表

-- 创建用户表
create table account(
    id int primary key auto_increment,
    name varchar(40),
    money float
);

-- 插入数据
insert into account(name,money) values ('A',1000);
insert into account(name,money) values ('B',1000);
insert into account(name,money) values ('C',1000);

7.2、事务

  • 要么都成功,要么都失败

  • ACID原则:

    1. 原子性:要么全部成功,要么全部失败
    2. 一致性:总数不变
    3. 隔离性:多个线程互不干扰
      1. 脏读:一个事务读取了另一个没有提交的事务
      2. 不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了改变
      3. 虚读(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来结果不一致
    4. 持久性:一旦提交不可逆,持久化到数据库
    package demo01;
    
    import demo.JdbcUtils;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class TestTransaction01 {
        public static void main( String[] args ) {
            Connection conn=null;
            PreparedStatement st=null;
            ResultSet rs=null;
            try {
                conn = JdbcUtils.getConnection();
    
                //关闭数据库的自动提交,自动会开启事务
                conn.setAutoCommit(false);
    
                String sql1="update account set money = money-100 where name ='A'";
                st = conn.prepareStatement(sql1);
                st.execute();
    
                int x = 1/0;    //报错
    
                String sql2="update account set money = money+100 where name ='B'";
                st = conn.prepareStatement(sql2);
                st.execute();
                //提交事务
                conn.commit();
                System.out.println("操作成功");
            } catch (SQLException throwables) {
                try {
                    conn.rollback();    //如果失败就回滚,默认会回滚
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } finally {
                JdbcUtils.release(conn,st,rs);
            }
    
    
        }
    }
    
    

7.3、总结

  1. 开始事务: conn.setAutoCommit(false);
  2. 一组业务执行完毕,提交事务
  3. 可以在catch语句中显示的定义,回滚语句,默认失败就会回滚

8、数据库连接池

  • 数据库连接——执行完毕——释放
  • 连接——释放十分浪费系统资源
  • 池化技术:准备一些预先的资源,过来就连接预先准备好的
    1. 最小连接数
    2. 最大连接数
    3. 等待超时
  • 编写连接池,实现一个接口 DataSource
    1. 开源数据源实现
    2. DBCP
    3. C3P0
    4. Druid
    • 使用了这些数据库连接池只有,在项目开发中就不需要编写连接数据库的代码了

8.1 、DBCP:

  1. 创建 dbcpconfig.properties 文件

    #连接设置 这里面的名词,是DBCP数据源中定义好的
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbcstudy?userUnicode=true&characterEncoding=utf8&useSSL=false
    username=root
    password=123456
    
    #<!-- 初始化连接 -->
    initialSize=10
    
    #最大连接数量
    maxActive=50
    
    #<!-- 最大空闲连接 -->
    maxIdle=20
    
    #<!-- 最小空闲连接 -->
    minIdle=5
    
    #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60-->
    maxWait=60000
    
    #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:【属性名=property;】
    #注意:"user""password" 两个属性会被明确地传递,因此这里不需要包含他们。
    connectionProperties=useUnicode=true;characterEncoding=utf8
    
    #指定由连接池所创建的连接的自动提交(auto-commit)状态。
    defaultAutoCommit=true
    
    #driver default 指定由连接池所创建的连接的只读(read-only)状态。
    #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
    defaultReadOnly=
    
    #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
    #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
    defaultTransactionIsolation=READ_COMMITTED
    
  2. 工具类

    package demo02;
    
    import demo.JdbcUtils;
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.apache.commons.dbcp2.BasicDataSourceFactory;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JdbcUtils_DBCP {
        private static BasicDataSource dataSource = null;
        static {
            try{
                InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
                Properties properties = new Properties();
                properties.load(in);
    
                //创建数据源 工厂模式-->创建对象
                dataSource = BasicDataSourceFactory.createDataSource(properties);
    
            }catch (Exception e){
            }
        }
    
        // 获取连接
        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();  //从数据源中获取连接
        }
    
        //释放资源
        public static void release( Connection conn, Statement st, ResultSet rs ){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(st!=null){
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    
    
  3. 测试代码

    package demo02;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestDBCP {
        public static void main( String[] args ) {
            Connection conn=null;
            Statement st=null;
            ResultSet rs=null;
            try {
                conn = JdbcUtils_DBCP.getConnection();//获得数据库连接
                st = conn.createStatement();    //获得SQL的执行对象
                String sql="INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) " +
                        "VALUES(6,'JavaStudy','123456','2929054638@qq.com','2022-07-02')";
                int i = st.executeUpdate(sql);
                if(i>0){
                    System.out.println("插入成功");
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                JdbcUtils_DBCP.release(conn,st,null);
            }
    
        }
    }
    
    

8.2、c3p0

  1. 创建 c3p0-config.xml 文件

    <?xml version="1.0"  encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?userUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;</property>
            <property name="user">root</property>
            <property name="password">123456</property>
    
            <property name="acquiredIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
        <name-config name="MySQL">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?userUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;</property>
            <property name="user">root</property>
            <property name="password">123456</property>
            <property name="acquiredIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </name-config>
    
    </c3p0-config>
    
  2. 工具类:

    package demo02;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JdbcUtils_c3p0 {
        private static ComboPooledDataSource dataSource = null;
        static {
            try{
    
                //创建数据源 工厂模式-->创建对象
                dataSource = new ComboPooledDataSource();
    
            }catch (Exception e){
            }
        }
    
        // 获取连接
        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();  //从数据源中获取连接
        }
    
        //释放资源
        public static void release( Connection conn, Statement st, ResultSet rs ){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(st!=null){
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
    
    
  3. 测试代码:

    package demo02;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class Testc3p0 {
        public static void main( String[] args ) {
            Connection conn=null;
            Statement st=null;
            ResultSet rs=null;
            try {
                conn = JdbcUtils_c3p0.getConnection();//获得数据库连接
                st = conn.createStatement();    //获得SQL的执行对象
                String sql="INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) " +
                        "VALUES(10,'JavaStudy','123456','2929054638@qq.com','2022-07-02')";
                int i = st.executeUpdate(sql);
                if(i>0){
                    System.out.println("插入成功");
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                JdbcUtils_DBCP.release(conn,st,null);
            }
    
        }
    }
    
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL——JDBC 的相关文章

  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 【Stata】CGSS数据清理:Codebook速成法

    对数据使用者来说 了解一个调查数据基本情况的常见途径就是查看该数据的codebook 对数据所有者 提供方来说 制作一份详细的codebook是其数据管理工作中不可或缺的一环 2016年上半年CGSS项目组把CGSS2003年到CGSS20
  • 解决Ubuntu安装后无法联网的问题-网卡驱动为安装成功

    转载自 http blog csdn net ifmvo article details 54023628 t0 起因 屁话 最近由于公司电脑不够用 所以暂时使用自己的笔记本做开发 i5 4G win7这配置看个视频 听个音乐还好 可我是做
  • 【动手学习pytorch笔记】9.卷积神经网络基础(卷积层,填充和步长,多输入输出通道,池化层)

    卷积层 二维互相关运算 import torch from torch import nn from d2l import torch as d2l def corr2d X K 计算二维互相关运算 h w K shape Y torch
  • 【LeetCode刷题】94、二叉树的中序遍历(C++)

    94 二叉树的中序遍历 原题连接 https leetcode cn problems binary tree inorder traversal 问题描述 给定一个二叉树的根节点 root 返回 它的 中序 遍历 示例 1 输入 root
  • react——事件绑定

    react有两种写法 一种是类组件 也叫有状态组件 一种是函数式组件 也叫无状态组件 而后引入了react hooks 函数式组件也能修改状态 在这两种组件中的事件绑定的原理一样 写法不一样 这篇文章主要就是记录这两种组件中的事件绑定写法
  • 迁移学习一、基本使用

    非完全原创 但遗失了原文链接 看到可更改 迁移学习 一 迁移学习方法介绍 1 微调网络的方法 微调网络的方法实现迁移学习 更改最后一层全连接 并且微调训练网络 2 将模型看成特征提取器 将模型看成特征提取器 如果一个模型的预训练模型非常的好
  • 实现model中的文件上传FTP(一)

    由于在django的model中配置了filefield或者imagefield配置了upload to参数只能将用户上传的文件上传到项目本地 就算重定向到项目外也只是直接读取文件系统 这样对未来的项目迁移或者资源管理都会造成很大的困扰 而
  • HJ2 计算某字符出现次数

    知识点字符串哈希 描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 n 1000 输入描述 第一行输入一个由字母和数字以及空格组成的字符串 第二行输
  • 设计模式梳理——访问者模式

    一 概述 访问者模式 Visitor 表示一个作用于某对象结构中的各元素的操作 它使你可以在不改变个元素的类的前提下作用于这些元素的新操作 二 UML图示 三 代码实现 我们都知道财务都是有账本的 这个账本就可以作为一个对象结构 而它其中的
  • springsecurity 提示:There is no PasswordEncoder mapped for the id "null"

    用户角色权限系统 springboot springsecurity mysql 提示如下错误信息 java lang IllegalArgumentException There is no PasswordEncoder mapped
  • 虚函数的原理

    引用 windows程序员面试指南 虚函数 虚函数通过虚函数表管理 特点 1 虚函数表属于类 类的所有对象共享这个类的虚函数表 2 虚函数指针属于对象 在每个对象内部的开头 指向同一虚函数表 继承特点 只继承一个父类无覆盖时 父类虚函数在子
  • 在64位电脑上 使用anaconda虚拟环境将Python程序打包成32位

    之前写啦一些打包博文 见链接 anaconda虚拟环境教程大全 使用pipenv建立虚拟环境解决python打包exe文件过大的问题 附打包带图标 多个py文件打包exe cmd执行python程序 文件夹直接进入cmd程序 python将
  • VirtualBox网络之桥接网卡

    如下图所示 VirtualBox支持的网络模式有多种 桥接网卡不同与其它的几种 首先体现在名字上 其它模式都带有 网络 字眼 说明当前的网卡需要接入一个由用户创建的网络 而桥接网卡则只是网卡 这种模式不需要创建网络 从效果上看 这种网卡与宿
  • Linux 下使用命令行查看PDF

    使用 evince命令查看 evince frames pdf
  • 低通、高通、带通、阻通滤波器

    目录 低通 高通 带通 阻通滤波器 低通 高通 带通 带阻滤波器的区别 通俗理解 1 低通滤波器 2 高通滤波器 3 带通滤波器 4 带阻滤波器 5 全通滤波器 低通 高通 带通 阻通滤波器 低通 高通 带通 带阻滤波器的区别 低通滤波器
  • STM32系列(HAL库)——F103C8T6通过NRF24L01(2.4G)无线模块进行双机通信

    本文参考 STM32L051C8T6 HAL库 nRF24L01 收发案例 硬件SPI通讯 1 软件准备 1 编程平台 Keil5 2 CubeMX 3 XCOM 串口调试助手 2 硬件准备 2套 1 F1的板子 本例使用经典F103C8T
  • ROS开发日记(1)——ROS基础知识

    ROS 即开源机器人操作系统 1 官方定义 ROS是面向机器人的开源的元操作系统 meta operating system 1 它能够提供类似传统操作系统的诸多功能 如硬件抽象 底层设备控制 常用功能实现 进程间消息传递和程序包管理等 此
  • java实现信息的增删改查功能的网页设计(1)

    仅供参考 不可转载 如遇其他情况概不负责 后果自负 切记 该项目运用的技术 spring springMVC ibatis 本网页只有一个页面 包过信息的增 删 改 查功能 只有部分代码 仅供参考 因该项目比较大 所以仅提供了一个页面内的增
  • 命名时取代基优先顺序_有机物命名:常见官能团的优先次序表

    一 官能团的优先次序 常见官能团的优先次序表类别序号官能团词头名称词尾名称 酸1 COOH羧基羧酸 2 SO3H磺基磺酸 羧 酸 衍 生 物3 COOR酯基羧酸酯 4 COX卤羰基酰卤 5 CONH2氨甲 酰基酰胺 腈6 CN氰基腈 醛7
  • MySQL——JDBC

    文章目录 1 数据库驱动 2 JDBC 3 第一个JDBC程序 4 步骤总结 5 JDBC对象解释 6 写工具类 7 JDBC操作事务 7 1 创建表 7 2 事务 7 3 总结 8 数据库连接池 8 1 DBCP 8 2 c3p0 1 数