sqlite工具类(不完善只有基本功能)

2023-11-13

提示:sqlite最好单线程操作(多线程写会冲突),单这个工具我一般用于小的程序用。所以是一个连接在重复使用没有进行保活之类操作。--新增了单例的读写连接持有,通过队列解决多线程sql执行问题。新增了读线程池(保存每个线程)--

maven:

 <properties>
        <itextpdf.version>5.5.6</itextpdf.version>
        <sqlite.jdbc.version>3.27.2.1</sqlite.jdbc.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>${sqlite.jdbc.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/org.springframework.jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.jdbc</artifactId>
            <version>3.1.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.14</version>
        </dependency>
        <!--pdf操作-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>${itextpdf.version}</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>${itextpdf.version}</version>
        </dependency>
        <!--中文支持-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.16</version>
        </dependency>
<!--druid log支持-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- slf4j核心包,由于上面的桥接包里自动依赖进来了,因此不用加了
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.0-alpha5</version>
            <scope>compile</scope>
        </dependency>
        <!-- apache log 4j start -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.17.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.17.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.0</version>
        </dependency>
        <!-- end -->
        <!-- durid  -->
        <dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>druid</artifactId>
		    <version> 1.1.23</version>
		</dependency>

代码:

sql替换参数还有一种方法:

                String sqlTemplate = "INSERT INTO traPdfInfo (isComplete,id, oldPath,                 dataType,businessDate,noOrno,suffCode,boxNo,caseNo,pieceNo,fileSize,fileMD5,pagesNum,businessDeptCode,businessDept,fileName) VALUES ('${isComplete}','${id}','${oldPath}','${dataType}','${businessDate}','${noOrno}','${suffCode}','${boxNo}','${caseNo}','${pieceNo}','${fileSize}','${fileMD5}','${pagesNum}','${businessDeptCode}','${businessDept}','${fileName}')";
                HashMap<String,String> hashMapF = new HashMap((int) (14/0.76));
                hashMapF.put("dataType",split[0]);
                hashMapF.put("businessDate",split[1]);
                .......
                StringSubstitutor sub = new StringSubstitutor(hashMapF);
                String resolvedString = sub.replace(sqlTemplate);
package net.kong.yumo.utils;

import cn.hutool.core.text.StrBuilder;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.sqlite.SQLiteConfig;
import org.sqlite.SQLiteOpenMode;

import java.sql.*;
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * 不建议多线程修改。
 * sqlite同一时间只能进行一个写操作,当同时有两个写操作的时候,后执行的只能先等待,如果等待时间超过5秒,
 * 就会产生database is locked这种错误.同样一个文件正在写入,重复打开数据库操作更容易导致这种问题的发生。
 * 所以单例持有连接,
 */
public class SqlliteSimConnection   {
    /**
     * 读写连接
     */
    static Connection c=null;
    Statement stmt=null;
    static String url="";
    /**
     *模拟线程池,存放读链接
     */
    static Map<String, Connection> threads=new HashMap<>();
    /**
     * 初始大小 0x7fffffff 2147483647
     */
    static LinkedBlockingDeque<String> sqls = new LinkedBlockingDeque<>();

    public  Connection getThreads() throws SQLException{
        if(threads.get(Thread.currentThread().getName())==null ){
            Connection readCon = getReadCon(this.url);
            setThreads(readCon);
            return readCon;
        } else{
            return threads.get(Thread.currentThread().getName());
        }
    }

    public  void setThreads( Connection thread) {
        SqlliteSimConnection.threads.put(Thread.currentThread().getName(),thread);
    }


    public SqlliteSimConnection(String url) {
        this.url = url;
    }

    /**
     它在对象被垃圾收集器析构(回收)之前调用
      */
    protected void finalize()
    {
        // 在这里终结代码
        close();
    }

    /**
     *
     * @param url java不识别大写的E:盘
     * @return
     */
    private  Connection getReadCon(String url) throws SQLException{
        try {
            Class.forName("org.sqlite.JDBC");
        }catch (Exception e) {
            e.printStackTrace();
        }
        SQLiteConfig config = new SQLiteConfig();
        config.setOpenMode(SQLiteOpenMode.READONLY);//指定数据库连接 读 。

        config.setOpenMode(SQLiteOpenMode.CREATE);//如果数据库不存在,则创建。
        /**
         * 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)
         * 禁用数据库连接和prepared statement(准备好的语句)上的锁
         * 因此不能在多个线程中并发使用同一个数据库连接
         */
        config.setOpenMode(SQLiteOpenMode.NOMUTEX);//
//        config.setDefaultCacheSize(100000);//页大小默认是 1024Byte,缓存大小默认是 1000 页
        /**
         * 串行模式支持多线程操作,但是必须*统一使用一个全局的数据库连接*.这一点非常重要。串行模式会打开sqlite3所有的锁,在同一时刻保证只有一个线程能访问。这里可以理解为只有一条指向数据库的连接,多个线程的请求将会在该连接上串行传输。
         */
//       config.setOpenMode(SQLiteOpenMode.FULLMUTEX);
//       c = DriverManager.getConnection(url);
        Connection connection = DriverManager.getConnection(url, config.toProperties());

        System.out.println("Opened database successfully");

        return connection;
    }

    public Connection getC() {
        if(c==null) {
            getC1(this.url);
        }
        return c;
    }

    /**
     *
     * @param url java不识别大写的E:盘
     * @return
     */
    private synchronized Connection getC1(String url) {
        if(c==null)   {
            try {
                Class.forName("org.sqlite.JDBC");
                SQLiteConfig config = new SQLiteConfig();
                config.setOpenMode(SQLiteOpenMode.READWRITE);//指定数据库连接可以读写。

                config.setOpenMode(SQLiteOpenMode.CREATE);//如果数据库不存在,则创建。
                /**
                 * 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)
                 * 禁用数据库连接和prepared statement(准备好的语句)上的锁
                 * 因此不能在多个线程中并发使用同一个数据库连接
                 */
                config.setOpenMode(SQLiteOpenMode.NOMUTEX);
                /**
                 *页大小默认是 1024Byte(1K),缓存大小默认是 1000 页
                 */
                config.setDefaultCacheSize(5000);

                /**
                 * 在max ios支持,
                 * 可以严格保证写入顺序跟提交顺序一致
                 * 设备开发商为了测评数据好看,往往会对提交的数据进行重排,再统一写入,
                 * 亦即写入顺序跟App提交的顺序不一致。在某些情况下,例如断电,就可能导致写入文件不一致的情况,导致文件损坏。
                 */
                config.enableFullSync(true);
                /**
                 * 串行模式支持多线程操作,但是必须*统一使用一个全局的数据库连接*.
                 * 这一点非常重要。串行模式会打开sqlite3所有的锁,在同一时刻保证只有一个线程能访问。
                 * 这里可以理解为只有一条指向数据库的连接,多个线程的请求将会在该连接上串行传输。
                 */
//                config.setOpenMode(SQLiteOpenMode.FULLMUTEX);
                /**
                 * 当synchronous设置为FULL (2), SQLite 数据库引擎在紧急时刻会暂停以确定数据已经写入磁盘。这使 系统崩溃或电源出问题时能确保数据库在重起后不会损坏。FULL synchronous很安全但很慢。
                 *
                 * 当synchronous设置为NORMAL, SQLite数据库引擎在大部分紧急时刻会暂停,但不像FULL模式下那么频繁。 NORMAL模式下有很小的几率(但不是不存在)发生电源故障导致数据库损坏的情况。但实际上,在这种情况 下很可能你的硬盘已经不能使用,或者发生了其他的不可恢复的硬件错误。
                 *
                 * 设置为synchronous OFF (0)时,SQLite在传递数据给系统以后直接继续而不暂停。若运行SQLite的应用程序崩溃, 数据不会损伤,但在系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。另一方面,在synchronous OFF时 一些操作可能会快50倍甚至更多。在SQLite 2中,缺省值为NORMAL.而在3中修改为FULL。
                 */
                String property = System.getProperty("db.sqlite.UnSynchronous");
                if ("true".equals(property)) {
                    System.out.println("Synchronous=OFF");
                    System.out.println("SQLite在传递数据给系统以后直接继续而不暂停。若运行SQLite的应用程序崩溃, 数据不会损伤,但在系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。另一方面,在synchronous OFF时 一些操作可能会快50倍甚至更多。");
                    config.setSynchronous(SQLiteConfig.SynchronousMode.OFF);
                } else {
                    config.setSynchronous(SQLiteConfig.SynchronousMode.FULL);
                }
                DriverManager.getConnection(url,config.toProperties());
                stmt = c.createStatement();

                System.out.println("Opened database successfully");
            } catch (Exception e) {
                System.out.println("Opened database faile");
                e.printStackTrace();
            }
        }

        return c;
    }
    /**
     * 连接到一个现有的数据库。如果数据库不存在, 那么它就会被创建,最后将返回一个数据库对象。
     */
    public void Connection() {
        c =  getC();
    }

    public void close() {
        try {
            if (!sqls.isEmpty()) {
                exe();
            }
            stmt.close();
            c.close();
            threads.clear();
            sqls.clear();
//            System.out.println("close database successfully");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void addSql(String sql) throws SQLException {
        if (sql.endsWith(";")) {
            sqls.addLast(sql);
        }else {
            sqls.addLast(sql+";");
        }
    }
    public void addSqls(List<String> _sqls) throws SQLException {
        for (String sql : _sqls) {
            if (sql.endsWith(";")) {
                sqls.addLast(sql);
            }else {
                sqls.addLast(sql+";");
            }
        }
    }
    /**
     * 使用时注意 多线程写
     * @return
     * @throws SQLException
     */
    public void insert(String sql) throws SQLException {
            stmt.executeUpdate(sql);
    }

    /**
     * sql替换参数用 :: 包裹
     * 字符串类型自动加单引号  使用时注意 多线程写
     * @param sql selcet id from t1 where id=:id: and cd=:cd:
     * @param par {"id": "dsgds" ,"cd": 1567454}
     * @throws SQLException
     */
    public void insert(String sql,Map<String,Object> par) throws SQLException {
        String[] split = sql.split(":");
        StringBuilder newString= new StringBuilder();
        for (int i = 0; i < split.length; i++) {
            if (i%2==0) {
                newString.append(split[i]);
            }else {
                if (par.get(split[i]) instanceof String) {
                    newString.append("'");
                    newString.append(String.valueOf(par.get(split[i])));
                    newString.append("'");
                }else {
                    if (par.get(split[i]) != null) {
                        newString.append(String.valueOf(par.get(split[i])));
                    }else {
                        throw new IllegalArgumentException("参数缺失:"+split[i]);
                    }
                }
            }
        }
        c.setAutoCommit(false);
        stmt.executeUpdate(newString.toString());
        c.commit();
    }
    /**
     * 使用时注意 多线程写
     * @return
     * @throws SQLException
     */
    public void insertBatch(String sql,List<Map<String,Object>> par) throws SQLException {
        String[] split = sql.split(":");
        PreparedStatement preparedStatement = c.prepareStatement(sql);
        StrBuilder builder = StrBuilder.create();
        for (Map<String, Object> stringObjectMap : par) {

            for (int i = 0; i < split.length; i++) {
                if (i%2==0) {
                    builder.append(split[i]);
                }else {
                    if (stringObjectMap.get(split[i]) instanceof String) {
                        builder.append("'");
                        builder.append(String.valueOf(stringObjectMap.get(split[i])));
                        builder.append("'");
                    }else {
                        if (stringObjectMap.get(split[i]) != null) {
                            builder.append(String.valueOf(stringObjectMap.get(split[i])));
                        }else {
                            throw new IllegalArgumentException("参数缺失:"+split[i]);
                        }
                    }
                }
            }
            preparedStatement.addBatch(builder.toString());
            builder.reset();
        }

        c.setAutoCommit(false);

        int [] counts = preparedStatement.executeBatch();

        c.commit();
    }


    public int[] exe() throws SQLException {
        int[] ints=null;
        try {
            Statement statement = c.createStatement();
            c.setAutoCommit(false);
            int size = this.sqls.size();
            for (int i = size; i > 0; i--) {
                statement.addBatch(this.sqls.poll());
            }
            ints = statement.executeBatch();
            c.commit();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            c.rollback();
        }
        return ints;
    }
    /**
     * 使用时注意 多线程写
     * @return
     * @throws SQLException
     */
    public int[] insert(List<String> sqls) throws SQLException {
        int[] ints=null;
        try {
                c.setAutoCommit(false);
                for (String sql:sqls) {
                    stmt.addBatch(sql);
                }
               ints = stmt.executeBatch();
                c.commit();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            c.rollback();
        }
        return ints;
    }

    /**
     * 使用时注意 多线程写
     * @return
     * @throws SQLException
     *
     * @param sqls sql数组
     * @param batchNum 每多少条提交一次事务 建议大于1万
     * @throws SQLException
     */
    public void batchInsert(List<String> sqls,int batchNum) throws SQLException {
        for (int i = 0; i < sqls.size();) {
            c.setAutoCommit(false);
            for (; (i % batchNum) == 0 &&  i < sqls.size() ; i++) {
                stmt.addBatch(sqls.get(i));
            }
            stmt.executeBatch();
            c.commit();
        }
    }


    public ResultSet select(String sql) throws SQLException {
        return stmt.executeQuery(sql);
    }
    public List<Map<String, Object>> selectList(String sql) throws SQLException {
        return convertList(stmt.executeQuery(sql));
    }
    public Map<String, Object> selectMap(String sql) throws SQLException {
        return convertMap(stmt.executeQuery(sql));
    }
    public int update( String sql) throws SQLException {
        return stmt.executeUpdate(sql);
    }
    /**
     * 执行sql脚本文件 使用Spring工具类
     */
    public void runSqlBySpringUtils(String sqlPath) throws Exception {
        try {
//            FileSystemResource rc = new FileSystemResource(sqlPath);
            ClassPathResource rc = new ClassPathResource(sqlPath );

             EncodedResource er = new EncodedResource(  rc, "utf-8");
             ScriptUtils.executeSqlScript(c,  rc);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
    public static List<Map<String, Object>> convertList(ResultSet rs) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        try {
            ResultSetMetaData md = rs.getMetaData();
            int columnCount = md.getColumnCount();
            while (rs.next()) {
                Map<String, Object> rowData = new HashMap<String, Object>();
                for (int i = 1; i <= columnCount; i++) {
                    rowData.put(md.getColumnName(i), rs.getObject(i));
                }
                list.add(rowData);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (rs != null)
                    rs.close();
                rs = null;
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }


    public static Map<String, Object> convertMap(ResultSet rs){
        Map<String, Object> map = new TreeMap<String, Object>();
        try{
            ResultSetMetaData md = rs.getMetaData();
            int columnCount = md.getColumnCount();
            while (rs.next()) {
                for (int i = 1; i <= columnCount; i++) {
                    map.put(md.getColumnName(i), rs.getObject(i));
                }
            }
        } catch (SQLException e){
            e.printStackTrace();
        } finally {
            try {
                if (rs != null)
                    rs.close();
                rs = null;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return map;
        }
    }

}

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

sqlite工具类(不完善只有基本功能) 的相关文章

  • 如何按关系的数量或成员对 Doctrine DQL 查询进行排序?

    我正在尝试创建一个查询 用于从 Doctrine 数据库中检索对象 并按特定一对多关系的成员数量排序 更具体地说 我有两个实体 Person 和 Federation 一个人可以是一个联盟的成员 人具有 联盟 关系 并且一个联盟可以有n人
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 从 Presto 中的 JSON 列获取特定值

    我有一个带有 JSON 列的表points其中一行为 0 0 2 1 1 2 2 0 5 15 1 2 20 0 7 我想获取键的值 1 and 20 并将它们存储为别名 例如first and second在查询中 到目前为止我所做的是
  • 如何使用 SQLite R-Trees 将简单空间索引移植到 Postgres?

    我通过遵循 SQLite R Tree 实现了一个基于边界框的简单空间索引模式tutorial https www sqlite org rtree html 这给了我以下架构 CREATE VIRTUAL TABLE events reg
  • 是否可以访问可执行 JAR 之外的 SQLite 数据库文件?

    我有一个作为可执行 JAR 文件部署的应用程序 最初 这个 JAR 文件将与 MySQL 数据库通信 但最近我决定改用 SQLite 然而 在测试时我发现从 JAR 文件运行应用程序时无法访问 SQLite 数据库文件 我使用来自以下网站的
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • where 子句中的双 %% ?

    我有一个 where 子句 如下例所示 WHERE subject LIKE chef AND dep LIKE psy 使用 1 或 2 符号有什么区别 我知道其中一个的含义 通配符 但不知道第二个添加的功能是什么 该查询可能是一个拼写错
  • 我们可以使用sql列出MS Access数据库中的所有表吗?

    我们可以使用 sql 找到 ms access 中的所有表吗 就像我们在 sql server 中所做的那样 select from sys tables 在sqlite中 SELECT FROM sqlite master where t
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 考虑到我的图像链接存储在MySQL数据库中,如何通过php显示存储在文件夹中的图像

    作为良好的做法 我只将图像链接存储在数据库中 问题是 我应该如何存储图像的链接 假设它在 c 上 c image jpg 我应该使用哪段 PHP 代码来显示该图像 我只显示路径 我该怎么做才能显示图像 我可以用这个吗 query SELEC
  • 导轨中的多个 DB 连接

    我正在尝试在 ROR 应用程序中连接多个数据库 我的 database yml 如下所示 在你的database yml文件中 发展 adapter mysql username root password database example
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • 不使用 Django 的 Python 数据库(适用于 Heroku)

    令我惊讶的是 我没有发现其他地方提出过这个问题 简而言之 我正在编写一个应用程序 计划部署到云 可能使用 Heroku 它将执行各种网络抓取和数据收集 它将位于云中的原因是 我可以将其设置为每天自行运行 并将数据提取到数据库 而无需我的计算
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • 如何获取sql server 2005中数据库连接的详细列表?

    如何获取sql server 2005中数据库连接的详细列表 使用系统存储过程sp who2
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • 猫鼬查找并删除

    我正在尝试删除满足查询的多个文档 但是 我需要这些文档的数据将它们存储在单独的集合中以实现撤消功能 我让它工作的唯一方法是使用多个查询 Data find query exec function err data Data remove q
  • 节点 PostgreSQL 客户端查询超时

    我正在使用节点包pg对于 postgres here https github com brianc node postgres npm i pg var pg require pg 我正在查询一个不属于我的大型集群 在某些条件下可能会失败
  • 在 Objective C 中使用 NSMutableArray 对象的指针

    当在 cocoa touch 中从 NSMutableArray 检索对象时 下面的代码可以吗 我应该每次分配 alloc 新的 Page 对象还是只是指向它 我是否需要对 Page pageObj 之后执行任何操作 例如将其设置为 nil

随机推荐

  • UART串口协议

    通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UATR 是一种异步收发传输器 将数据由串行通信与并行通信间做传输转换 作为并行输入称为串行输出的芯片 UART是一种通用串
  • Python3.8的下载与安装

    一 介绍 Python由荷兰数学和计算机科学研究学会的吉多 范罗苏姆 于1990 年代初设计 作为一门叫做ABC语言的替代品 Python提供了高效的高级数据结构 还能简单有效地面向对象编程 Python语法和动态类型 以及解释型语言的本质
  • SQL中的and、or

    在sql查询语句中长用到and和or 它们在用的时候有些需要注意的地方 不管在一项表达式中有多少个and或or 它是将前一个表达式看作一项 and与or后的所有表达式看做一项 and的前后都为真的时候才为真 取交集 or有一个为真 即为真
  • 嵌入式设备和固件中的自动漏洞检测(三):静态分析技术

    原文链接 Automatic Vulnerability Detection in Embedded Devices and Firmware Survey and Layered Taxonomies ACM Computing Surv
  • 高等数值计算方法学习笔记第4章第一部分【数值积分(数值微分)】

    高等数值计算方法学习笔记第4章第一部分 数值积分 数值微分 一 数值积分概论 1 数值求积的基本思想 牛 莱公式找不到原函数 用矩形近似 2 代数精度的概念 1 上述四个公式的代数精度 梯形 左中右矩形公式 2 利用代数精度的概念构造求积公
  • Chatgpt登陆后一直在转圈请求429错误的解决办法

    Chatgpt登陆后一直在转圈请求429错误的解决办法 如果您使用ChatGPT登陆后遇到了持续转圈或请求429错误 可能是由于请求次数过多导致的限制 为了解决这个问题 可以尝试以下几个方法 等待一段时间后再次尝试登陆 由于请求次数过多 C
  • MongoDB图形化工具的使用与java操作

    MongoDB图形化工具的使用与java操作 MongoDB Compass Community 下载 安装 使用 介绍 MongoDB概念 新建数据库 删除数据库 新建集合 删除集合 新增文档 删除文档 修改文档 查询文档 Java操作m
  • HTML5 蔡徐坤打篮球游戏 NMSL❤️❤️❤️

    此文章来自实验楼用户dancebyte在实验楼的技术分享 希望大家喜欢 使用 es6 语法及原生 javascript 实现的蔡徐坤打篮球游戏 游戏有多种难度可选择 简单 普通 困难 极限以及非人类 非人类模式请勿轻易尝试 否则可能会疯掉
  • 查询性别的时候格式化

    SELECT CYD DEPT NAME T ID T CODE T NAME T JOB CASE WHEN T SEX 0 THEN 男 WHEN T SEX 1 THEN 女 ELSE X END AS SEX T BIRTH T P
  • 卷积神经网络(二)- 深度卷积网络:实例研究

    本次学习笔记主要记录学习深度学习时的各种记录 包括吴恩达老师视频学习 花书 作者能力有限 如有错误等 望联系修改 非常感谢 卷积神经网络 二 深度卷积网络 实例研究 一 为什么要进行实例研究 Why look at case studies
  • 在 VMware Workstation 虚拟机中创建共享文件夹的步骤〔图解〕

    本文以 VMware Workstation 7 1 4 385536 汉化版为例 讲解在虚拟机中创建 VMware 共享文件夹 vmware shared folders 的具体步骤与方法 一 安装 VMware Tools 启动好 Wi
  • yolov5识别cf火线敌人(FPS类的AI瞄准)详细教程一

    一 前言 因为自己的研究方向也是深度学习方向 而且平时闲的时候还喜欢玩会cf火线等枪战游戏 就想着找一个大模型做一个对游戏敌人的识别的功能 一切实现之后就想把自己的心得写出来 我打算分俩个教程分别细述整个学习以及操作的过程 教程一主要包括了
  • 【Python 逻辑题】甲、乙、丙、丁四人的血型各不相同

    问题 甲 乙 丙 丁四人的血型各不相同 甲说 我是A型 乙说 我是O型 丙说 我是AB型 丁说 我不是AB型 四个人中只有一个人的话是假的 解决方法 思路 四个人的血型肯定都在 A B O AB 范围内 所以用for循环让四个人轮流等于这四
  • Python的 numpy中 meshgrid 和 mgrid 的区别和使用

    一 meshgrid函数 meshgrid函数通常使用在数据的矢量化上 它适用于生成网格型数据 可以接受两个一维数组生成两个二维矩阵 对应两个数组中所有的 x y 对 示例展示 由上面的示例展示可以看出 meshgrid的作用是 根据传入的
  • 空时自适应处理用于机载雷达——机载阵列雷达信号环境(Matla代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 机载阵列雷达信号环境 2 2 空时处理基础知识 2 3 元素空间空时自适应处理 2
  • [TensorFlow2基础]对数据的训练和预测

    TensorFlow深度学习 前言 一 检测是否安装了tensorflow 二 导入csv文件 1 读入数据 2 数据绘图 三 模型的建立和训练 1 建立模型 2 进行训练 3 预测 总结 前言 本文介绍Tenserflow架构学习的基础内
  • unity3d-WebCamTexture类API详解

    WebCamTexture类 命名空间 UnityEngine 继承于 Texture Description 说明 WebCam Textures are textures onto which the live video input
  • js startsWith方法

    startsWith方法 用来判断字符串是否以固定数据开头 abc startsWith a true abc startsWith d false 该方法还有第二个参数 可以从字符串指定位置开始判断 默认为0 abcdefg starts
  • 【后端开发】将springboot项目部署到阿里云服务器

    步骤一 拿到一台阿里云的服务器 1 到达阿里云官网 2 有账号的可以直接登录 没有账号的自己注册一个 3 找到搜索框 搜索 云服务器 4 可以购买一台 新用户可以试用 也可以进行学生认证进行免费试用 我这里选择的是 新用户试用 5 选择自己
  • sqlite工具类(不完善只有基本功能)

    提示 sqlite最好单线程操作 多线程写会冲突 单这个工具我一般用于小的程序用 所以是一个连接在重复使用没有进行保活之类操作 新增了单例的读写连接持有 通过队列解决多线程sql执行问题 新增了读线程池 保存每个线程 maven