MySQL数据库(数据库连接池)

news2024/11/25 2:20:45

文章目录

    • 1.批处理应用
        • 1.基本介绍
        • 2.批处理演示
          • 1.创建测试表
          • 2.修改url
          • 3.编写java代码
        • 3.批处理源码分析
    • 2.数据库连接池
        • 1.传统连接弊端分析
        • 2.数据库连接池基本介绍
          • 1.概念介绍
          • 2.数据库连接池示意图
          • 3.数据库连接池种类
    • 3.C3P0连接池
        • 1.环境配置
          • 1.导入jar包
          • 2.将整个lib添加到项目中
          • 3.配置代码提示
        • 2.C3P0方式一(java程序)
        • 3.C3P0方式二(配置文件)
          • 1.环境配置
            • 1.将c3p0-config.xml配置文件复制到src目录下
            • 2.修改配置文件的参数
          • 2.编写java代码
    • 4.德鲁伊连接池
        • 1.环境配置
          • 1.导入jar包
          • 2.将配置文件复制到src目录下,名字任意
          • 3.修改配置文件的参数
        • 2.编写java代码
    • 5.德鲁伊工具类
        • 1.编写代码
        • 2.测试使用
    • 6.Apache——DBUtils
        • 1.引出
        • 2.基本介绍
        • 3.Apache——DBUtils查询
          • 1.添加依赖
          • 2.编写java代码
            • 1.Actor.java(封装每一行的bean)
            • 2.查询多条记录
          • 3.查询单条记录
          • 4.查询单行单列记录
        • 4.DML操作
    • 7.BasicDao
        • 1.引出
        • 2.BasicDao分析
        • 3.代码实现
          • 1.文件目录
          • 2.BasicDao
          • 3.ActorDao
          • 4.Actor
          • 5.TestDao
          • 6.JDBCUtilsByDruid
          • 7.druid.properties

1.批处理应用

1.基本介绍

image-20240118195806605

image-20240118203024400

2.批处理演示

image-20240118203433909

1.创建测试表
-- 创建的测试表
CREATE TABLE admin2(
 id INT PRIMARY key auto_increment,
 username VARCHAR(32) NOT NULL,
 PASSWORD VARCHAR(32) NOT NULL
)
-- 查看表数据
SELECT * FROM admin2 
-- 查看行数
SELECT count(*) FROM admin2
2.修改url

image-20240118204517836

?rewriteBatchedStatements=true //添加这行代码
3.编写java代码
package jdbc_;

import org.junit.jupiter.api.Test;
import utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Batch_ {
    @Test
    public void testDML() {
        //建立连接
        Connection connection = JDBCUtils.getConnection();

        //编写sql语句进行插入
        String sql = "insert into admin2 values (null, ?, ?)";

        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = connection.prepareStatement(sql);
            //循环进行预处理,并添加到处理包中
            for (int i = 0; i < 5000; i++) {
                preparedStatement.setString(1, "Tom");
                preparedStatement.setString(2, "666666");
                //1.添加到处理包中,先不执行
                preparedStatement.addBatch();
                if ((i + 1) % 1000 == 0) {
                    //2.每执行1000次则执行一次
                    preparedStatement.executeBatch();
                    //3.执行之后清空处理包中的sql语句
                    preparedStatement.clearBatch();
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //关闭资源
            JDBCUtils.close(null, preparedStatement, connection);
        }
    }
}

3.批处理源码分析

image-20240118205608298

image-20240118205232540

2.数据库连接池

1.传统连接弊端分析

image-20240119091642286

image-20240119091627707

2.数据库连接池基本介绍
1.概念介绍

image-20240119091910403

2.数据库连接池示意图

image-20240119092246324

3.数据库连接池种类

image-20240119092345612

3.C3P0连接池

1.环境配置
1.导入jar包

image-20240119094059495

2.将整个lib添加到项目中

image-20240119094146794

3.配置代码提示

image-20240119094217187

2.C3P0方式一(java程序)
    @Test
    public void testC3P01() throws Exception  {
        //1.创建一个数据源对象,可以理解为这个数据源对象就是那个连接池
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();

        //2.读取配置文件,获取url,user,password,driver
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");

        //3.给数据源设置相关参数
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(user);
        comboPooledDataSource.setPassword(password);
        comboPooledDataSource.setDriverClass(driver);

        //4.设置初始化参数
        comboPooledDataSource.setInitialPoolSize(10); //初始化连接数
        comboPooledDataSource.setMaxPoolSize(50); //最大连接数

        //5.获取连接
        Connection connection = comboPooledDataSource.getConnection();
        System.out.println("连接OK");

        //6.关闭连接
        connection.close();
    }
3.C3P0方式二(配置文件)
1.环境配置
1.将c3p0-config.xml配置文件复制到src目录下
<c3p0-config>
 <!-- 数据源名称,可以随意-->
 <named-config name="hello">
     <!-- 驱动类 -->
     <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
     <!-- url-->
     <property name="jdbcUrl">jdbc:mysql://localhost:3306/hsp_db02</property>
     <!-- 用户名 -->
     <property name="user">root</property>
     <!-- 密码 -->
     <property name="password">root</property>
     <!-- 每次增长的连接数-->
     <property name="acquireIncrement">5</property>
     <!-- 初始的连接数 -->
     <property name="initialPoolSize">10</property>
     <!-- 最小连接数 -->
     <property name="minPoolSize">5</property>
     <!-- 最大连接数 -->
     <property name="maxPoolSize">50</property>

     <!-- 可连接的最多的命令对象数 -->
     <property name="maxStatements">5</property>

     <!-- 每个连接对象可连接的最多的命令对象数 -->
     <property name="maxStatementsPerConnection">2</property>
 </named-config>
</c3p0-config>
2.修改配置文件的参数

image-20240119100430525

2.编写java代码
    @Test
    public void testC3P02() throws Exception {
        //1.创建与配置文件名称相同的数据源
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("hello"); //注意:这里的hello是配置文件中的名字
        //2.获取连接
        Connection connection = comboPooledDataSource.getConnection();
        System.out.println("连接OK");
        //3.关闭连接
        connection.close();
    }

4.德鲁伊连接池

1.环境配置
1.导入jar包

image-20240119101351299

2.将配置文件复制到src目录下,名字任意

image-20240119101549362

#key=value
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/girls?rewriteBatchedStatements=true
#url=jdbc:mysql://localhost:3306/girls
username=root
password=root
#initial connection Size
initialSize=10
#min idle connecton size
minIdle=5
#max active connection size
maxActive=50
#max wait time (5000 mil seconds)
maxWait=5000
3.修改配置文件的参数

image-20240119102116306

2.编写java代码
package datasource;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Druid_ {
    public static void main(String[] args) throws Exception {
        //1.读取配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\druid.properties"));
        //2.创建数据源对象(就是连接池),将配置文件传进去
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        //3.获取连接
        Connection connection = dataSource.getConnection();
        System.out.println("连接OK");
        //4.关闭连接
        connection.close();
    }
}

5.德鲁伊工具类

1.编写代码
package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class JDBCUtilsByDruid {
    //静态数据源引用(jdbc的接口)
    private static DataSource dataSource;

    //静态代码块,在类加载时为数据源引用赋值
    static {
        //1.读取配置文件
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\druid.properties"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //2.使用配置文件,创建德鲁伊数据源对象
        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //编写getConnection方法
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    //把Connection对象放回连接池
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }


}

2.测试使用
package datasource;

import org.junit.jupiter.api.Test;
import utils.JDBCUtilsByDruid;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class DruidUtils_Use {
    @Test
    public void testSelect() {
        //建立连接
        Connection connection = JDBCUtilsByDruid.getConnection();
        //编写sql语句进行查询
        String sql = "select name, phone from actor where id = ?";
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //进行预处理
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 8);
            //执行查询
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                String string = resultSet.getString("name");
                String string1 = resultSet.getString("phone");
                System.out.println(string + " " + string1);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //关闭资源
            JDBCUtilsByDruid.close(resultSet, preparedStatement, connection);
        }

    }

}

6.Apache——DBUtils

1.引出

image-20240119133851789

2.基本介绍

image-20240119134845277

3.Apache——DBUtils查询

image-20240119135310282

1.添加依赖

image-20240119135911819

2.编写java代码
1.Actor.java(封装每一行的bean)
package datasource;

import java.sql.Timestamp;


/**
 * @author 孙显圣
 * @version 1.0
 * 这是一个bean,用来封装actor表的每一行数据
 */
public class Actor {
        private Integer id; //注意要使用包装类
        private String name;
        private String sex;
        private Timestamp borndate; //mysql8只能用这个类型来接受datetime
        private String phone;

        public Actor() { //一定要给一个无参构造器[反射需要]
        }

        public Actor(Integer id, String name, String sex, Timestamp borndate, String phone) {
            this.id = id;
            this.name = name;
            this.sex = sex;
            this.borndate = borndate;
            this.phone = phone;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSex() {
            return sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        public Timestamp getBorndate() {
            return borndate;
        }

        public void setBorndate(Timestamp borndate) {
            this.borndate = borndate;
        }

        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        @Override
        public String toString() {
            return "\nActor{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", sex='" + sex + '\'' +
                    ", borndate=" + borndate +
                    ", phone='" + phone + '\'' +
                    '}';
        }
    }


2.查询多条记录

new BeanListHandler<>(Actor.class)

package datasource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.jupiter.api.Test;
import utils.JDBCUtilsByDruid;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class DBUtils_USE {
    @Test
    public void testQueryMan() throws SQLException {
        //1.得到连接
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.创建QueryRunner
        QueryRunner queryRunner = new QueryRunner();

        //3.编写sql
        String sql = "select borndate from actor where id >= ?";

        //4.调用方法,返回ArrayList结果集,其中每一个元素都是表的一行,封装到了bean中
        List<Actor> query = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1); //1就是给里面的问号赋值

        //5.获取每一行的bean
        for (Actor actor : query) {
            System.out.println(actor);
        }
        //6.关闭连接,他会自动关闭resultset和preparedStatement
        JDBCUtilsByDruid.close(null, null, connection);
    }

}

3.查询单条记录

new BeanHandler<>(Actor.class)

    @Test
    public void testQuerySingle() {
        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.创建queryRunner
        QueryRunner queryRunner = new QueryRunner();
        //3.编写sql
        String sql = "select * from actor where id = ?";
        //4.调用查询方法
        Actor query = null;
        try {
            query = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 8);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        System.out.println(query);
        //5.关闭资源
        try {
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
4.查询单行单列记录

new ScalarHandler()

    @Test
    public  void testScalar() {
        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.创建queryRunner
        QueryRunner queryRunner = new QueryRunner();
        //3.编写sql
        String sql = "select name from actor where id = ?"; //单行单列
        //4.查询
        try {
            Object query = queryRunner.query(connection, sql, new ScalarHandler(), 8);
            System.out.println(query);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        //5.关闭资源
        try {
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

4.DML操作
    @Test
    public void testDML() throws SQLException {
        //1.获取连接
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.创建queryRunner
        QueryRunner queryRunner = new QueryRunner();
        //3.编写sql
        //增加
        String sql1 = "insert into actor values(?, ?, ?, ?, ?)";
        //删除
        String sql2 = "delete from actor where id = ?";
        //修改
        String sql3 = "update actor set phone = ?";
        //4.执行sql
        int update = queryRunner.update(connection, sql1, null, "张三丰", "男", "2005-11-02", "51552");
        int update1 = queryRunner.update(connection, sql2, 11);
        int update2 = queryRunner.update(connection, sql3, 123456);
        //5.关闭资源
        try {
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

7.BasicDao

1.引出

image-20240119162157480

image-20240119162211983

2.BasicDao分析

image-20240119162441113

3.代码实现
1.文件目录

image-20240119173803106

2.BasicDao
package BasicDao_;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import utils.JDBCUtilsByDruid;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 * 开发BasicDAO , 是其他DAO的父类
 */
public class BasicDao<T> { //泛型指定具体类型

    private QueryRunner qr =  new QueryRunner();

    //开发通用的dml方法, 针对任意的表
    public int update(String sql, Object... parameters) {

        Connection connection = null;

        try {
            connection = JDBCUtilsByDruid.getConnection();
            int update = qr.update(connection, sql, parameters);
            return  update;
        } catch (SQLException e) {
           throw  new RuntimeException(e); //将编译异常->运行异常 ,抛出
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }

    }

    //返回多个对象(即查询的结果是多行), 针对任意表

    /**
     *
     * @param sql sql 语句,可以有 ?
     * @param clazz 传入一个类的Class对象 比如 Actor.class
     * @param parameters 传入 ? 的具体的值,可以是多个
     * @return 根据Actor.class 返回对应的 ArrayList 集合
     */
    public List<T> queryMulti(String sql, Class<T> clazz, Object... parameters) {

        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanListHandler<T>(clazz), parameters);

        } catch (SQLException e) {
            throw  new RuntimeException(e); //将编译异常->运行异常 ,抛出
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }

    }

    //查询单行结果 的通用方法
    public T querySingle(String sql, Class<T> clazz, Object... parameters) {

        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return  qr.query(connection, sql, new BeanHandler<T>(clazz), parameters);

        } catch (SQLException e) {
            throw  new RuntimeException(e); //将编译异常->运行异常 ,抛出
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

    //查询单行单列的方法,即返回单值的方法

    public Object queryScalar(String sql, Object... parameters) {

        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return  qr.query(connection, sql, new ScalarHandler(), parameters);

        } catch (SQLException e) {
            throw  new RuntimeException(e); //将编译异常->运行异常 ,抛出
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

}

3.ActorDao
package BasicDao_.dao;

import BasicDao_.domain.Actor;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class ActorDao extends BasicDao<Actor>{
    //拥有BasicDao所有的方法
    //根据业务需求可以写上特有的方法
}

4.Actor
package BasicDao_.domain;

import java.sql.Timestamp;


/**
 * @author 孙显圣
 * @version 1.0
 * 这是一个bean,用来封装actor表的每一行数据
 */
public class Actor {
        private Integer id;
        private String name;
        private String sex;
        private Timestamp borndate; //mysql8只能用这个类型来接受datetime
        private String phone;

        public Actor() { //一定要给一个无参构造器[反射需要]
        }

        public Actor(Integer id, String name, String sex, Timestamp borndate, String phone) {
            this.id = id;
            this.name = name;
            this.sex = sex;
            this.borndate = borndate;
            this.phone = phone;
        }

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSex() {
            return sex;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        public Timestamp getBorndate() {
            return borndate;
        }

        public void setBorndate(Timestamp borndate) {
            this.borndate = borndate;
        }

        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        @Override
        public String toString() {
            return "\nActor{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", sex='" + sex + '\'' +
                    ", borndate=" + borndate +
                    ", phone='" + phone + '\'' +
                    '}';
        }
    }


5.TestDao
package BasicDao_.test;

import BasicDao_.dao.ActorDao;
import BasicDao_.domain.Actor;

import java.util.List;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class TestDao {
    public static void main(String[] args) {
        //测试一下ActorDao对actor表的操作
        ActorDao actorDao = new ActorDao();
        //1.查询
        List<Actor> actors = actorDao.queryMulti("select * from actor where id >?", Actor.class, 2);
        for (Actor actor : actors) {
            System.out.println(actor);
        }
        //2.查询单行记录
        Actor actor = actorDao.querySingle("select * from actor where id = ?", Actor.class, 4);
        System.out.println(actor);
        //3.查询单行单列记录
        Object o = actorDao.queryScalar("select name from actor where id = ?", 9);
        System.out.println(o);
        //4.增加一条记录
        int update = actorDao.update("insert into actor values(?,?,?,?,?)", null, "王五", "女", "2002-1-9", "5455555");
        System.out.println(update > 0 ? "成功" : "失败");
        //5.删除一条记录
        int update1 = actorDao.update("delete from actor where id > ?", 10);
        System.out.println(update1 > 0 ? "成功" : "失败");
        //6.修改一条记录
        int update2 = actorDao.update("update actor set name = ?", "女");
        System.out.println(update2 > 0 ? "成功" : "失败");

    }
}

6.JDBCUtilsByDruid
package BasicDao_.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class JDBCUtilsByDruid {
    //静态数据源引用(jdbc的接口)
    private static DataSource dataSource;

    //静态代码块,在类加载时为数据源引用赋值
    static {
        //1.读取配置文件
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\druid.properties"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //2.使用配置文件,创建德鲁伊数据源对象
        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //编写getConnection方法
    public static Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    //把Connection对象放回连接池
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }


}

7.druid.properties
#key=value
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/hsp_db02?rewriteBatchedStatements=true
#url=jdbc:mysql://localhost:3306/girls
username=root
password=root
#initial connection Size
initialSize=10
#min idle connecton size
minIdle=5
#max active connection size
maxActive=50
#max wait time (5000 mil seconds)
maxWait=5000

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

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

相关文章

云存储属性级用户撤销可追溯的密文策略属性加密方案论文阅读

参考文献为2018年发表的Traceable ciphertext-policy attribute-based encryption scheme with attribute level user revocation for cloud storage 贡献 本篇路提出了一个可追踪、实现属性级用户撤销&#xff08;删除用户的某一属性&#xff09;、支持密钥更新和密文更新、外…

图片二维码如何制作生成?常规图片格式的二维码制作技巧

图片是展示信息很常用的一种方式&#xff0c;而现在查看图片很多人会通过二维码的形式来展现&#xff0c;这种方式优势在于更加的灵活&#xff0c;能够通过一个二维码展示大量的图片内容。那么图片二维码是如何制作生成的呢&#xff1f; 想要快速的将图片转二维码使用&#xf…

mysql-FIND_IN_SET包含查询

如图所示&#xff0c;需要查询字段ancestorid中包含14的所有数据&#xff0c;使用FIND_IN_SET即可实现&#xff0c;不需要使用模糊查找like 示例sql&#xff1a; SELECT * FROM mt_fire_template WHERE FIND_IN_SET(14,ancestorid) 结果

【pysurvival Python 安装失败】

这个错误与 sklearn 包的名称更改有关&#xff0c;导致 pysurvival 在构建元数据时失败。现在&#xff0c;你需要修改 pysurvival 的安装文件以使用正确的 scikit-learn 包名 编辑安装文件&#xff1a;找到 pysurvival 的安装文件&#xff0c;可能是 setup.py 或 pyproject.to…

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…

华为OD面试手撕算法-合并排序数组

题目描述 本题是leetcode一道简单题&#xff1a;合并两个有序数组&#xff0c;但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 // 初始化…

【nc工具信息传输】

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 nc [-46DdhklnrStUuvzC] [-i interval] [-p source_po…

“多组数组”题的注意事项,天杀的“鲁棒性”

【题目描述】 输入一些整数&#xff0c;求出它们的最小值、最大值和平均值&#xff08;保留3位小数&#xff09;。输入保证这些数都是不超过1000的整数。 输入包含多组数据&#xff0c;每组数据第一行是整数个数n&#xff0c;第二行是n个整数。n&#xff1d;0为输入结束标记&…

高分顶刊,仅2个月录用,13天见刊!另有CCF仅36天录用!

1区人工智能类SCIE &#xff08;高质量&#xff0c;进展顺&#xff09; 【期刊简介】IF&#xff1a;6.0-7.0&#xff0c;JCR1区&#xff0c;中科院2区 【检索情况】SCIE在检 【征稿领域】机器学习、云计算、边缘计算相关均可 【案例分享】2023.10.31 提交——2024.01.31 录…

ES6学习(四)-- Reflect / Promise / Generator 函数 / Class

文章目录 1. Reflect1.1 代替Object 的某些方法1.2 修改某些Object 方法返回结果1.3 命令式变为函数行为1.4 ! 配合Proxy 2. ! Promise2.1 回调地狱2.2 Promise 使用2.3 Promise 对象的状态2.4 解决回调地狱的方法2.5 Promise.all2.6 Promise.race 3. Generator 函数3.1 基本语…

计算机网络|谢希仁版|数据链路层

数据链路层 数据链路层研究的是什么&#xff1f;数据链路层的几个共同问题数据链路与链路帧通信规程 三个基本问题封装成帧透明传输差错检测可靠传输 点对点协议PPPPPP协议应满足的需求PPP协议的组成PPP协议帧的格式各字段的意义字节填充零比特填充PPP协议的工作状态 使用广播信…

How to install JDK on mac

文章目录 1. Install JDK on mac2. zshenv, zshrc, zprofile3. 查看java环境变量配置 1. Install JDK on mac Installation of the JDK on macOS 2. zshenv, zshrc, zprofile How Do Zsh Configuration Files Work? 3. 查看java环境变量配置 open Terminal&#xff0c;cd…

C++ AVL树(旋转)

我们之前学习了搜索二叉树&#xff0c;我们知道普通的搜索二叉树会有特殊情况出现使得二叉树的两枝极其不平衡形成我们通俗说的歪脖子树&#xff1a; 这样的树一定会使得我们的增删查的效率变低&#xff1b;为了避免这种极端的情况出现&#xff0c;在1962年有两位伟大的俄罗斯数…

集成电路企业tapeout,如何保证机台数据准确、完整、高效地采集?

Tapeout即流片&#xff0c;集成电路行业中将CDS最终版电路图提交给半导体制造厂商进行物理生产的过程。在芯片设计与制造的流程中&#xff0c;Tapeout是非常重要的阶段&#xff0c;包括了布局&#xff08;Layout&#xff09;、连线&#xff08;Routing&#xff09;、分析&#…

阿里云服务器租用费用价格表_一年和1个月收费标准(2024版)

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

【论文速读】| MASTERKEY:大语言模型聊天机器人的自动化越狱

本次分享论文为&#xff1a;MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots 基本信息 原文作者&#xff1a;Gelei Deng, Yi Liu, Yuekang Li, Kailong Wang, Ying Zhang, Zefeng Li, Haoyu Wang, Tianwei Zhang, Yang Liu 作者单位&#xff1a;南洋理工…

记录一次官网访问很慢的情况

客户查看云监控,带宽未超限,客户取的是1分钟的原生值,也就是1分钟也是个平均值。 但是客户的原始值&#xff0c;其实就是1分钟内的平均值。所以客户的瞬时超限&#xff0c;其实是看不出来的。但是后端同事从实时监控里面可以看到超限的情况。 客户升带宽后&#xff0c; 发现还…

超详细工具Navicat安装教程

Navicat是一款功能强大的数据库管理工具&#xff0c;可用于管理多种类型的数据库&#xff0c;包括MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL等。以下是Navicat工具的一些主要特点和功能&#xff1a; 一.功能介绍 跨平台支持 多种数据库支持 直观的用户界面 数据…

【Qt 学习笔记】输入框实现helloworld | QLineEdit的使用

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 输入框实现helloworld | QLineEdit的使用 文章编号&#xff1a;Qt 学习…

【原创教程】EPLAN中伺服的制图方法

首先在EPLAN里制作伺服之前,需要有伺服的手册,根据手册里的各个引脚号的说明来制图,这里我们讲解西门子和三菱这两种品牌型号的。 1、下图是西门子的伺服,型号为:6SL3040-1LA01-0AA0 2、第一步我们需要绘制出黑盒来表示伺服的整体外框 选择插入—盒子—黑盒 3、在图纸…