Python工程师Java之路(o)JDBC

使用Python通过JDBC操作数据库(达梦数据库) 使用Python通过JDBC操作达梦数据库 阅读详情

1、JDBC概述

  • 全称:Java Database Connectivity
  • 一组独立于任何 DBMS 的 API

JDBC是一组规范接口,其实现类由各数据库厂商提供

2、JDBC使用步骤(以MySQL为例)

  1. 注册驱动
  2. 使用驱动来创建数据库连接
  3. 执行SQL
  4. 释放资源

2.1、注册驱动相关源码

com.mysql.jdbc.Driver(其实现了java.sql.Driver接口)源码如下
可以看到:类加载时,有个静态代码块,自动注册驱动

package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

2.2、把驱动jar添加到项目中

2.3、代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TestJDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1、注册驱动(下面两行任选一行都可)
        Class.forName("com.mysql.jdbc.Driver");
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());

        // 2、连接数据库(TCP/IP协议)
        // jdbc:mysql是应用层协议;localhost是地址;3306是端口号;b1是数据库名
        String url = "jdbc:mysql://localhost:3306/b1";
        String user = "root";
        String password = "密码";
        Connection conn = DriverManager.getConnection(url, user, password);

        // 3、执行SQL
        /*
         * 回忆TCP/IP
         * Socket代表连接
         * socket.getOutputStream()来发送数据,
         * socket.getInputStream()来接收数据
         *
         * 可以把Connection比喻成Socket,把Statement比喻成OutputStream
         */
        // 3.1、获取Statement对象
        Statement st = conn.createStatement();
        // 3.2、执行SQL,返回成功操作的记录数
        String sql = "insert into tb1 values(null,'value1','value2')";
        int len = st.executeUpdate(sql);
        System.out.println(len > 0 ? "成功" : "失败");

        // 4、释放资源
        st.close();
        conn.close();
    }
}

3、SQL注入 和 blob类数据 的解决

sql注入

String sql = "SELECT * FROM t_employee where ename='" + ename + "'";
// 如果我此时从键盘输入ename值的时候,输入:【张三' OR '1'= '1】
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
// 结果会把所有数据都查询出来

处理blob等类型的数据

String sql = "insert into user(username,photo) values('chailinyan', 图片字节流)";
// 此时photo是blob类型的数据时,无法在sql中直接拼接

解决方法:使用PreparedStatement

String sql = "insert into t_employee(ename,tel,gender,salary) values(?,?,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);
// 这里要传带?的sql,然后mysql端就会对这个sql进行预编译

//设置?的具体值
pst.setObject(1, ename);
pst.setObject(2, tel);
pst.setObject(3, gender);
pst.setObject(4, salary);

int len = pst.executeUpdate(); //此处不用传sql
System.out.println(len);
String sql = "insert into user(username,photo) values(?,?)";
PreparedStatement pst = conn.prepareStatement(sql);

//设置?的值
pst.setObject(1, "chailinyan");
FileInputStream fis = new FileInputStream("D:/QMDownload/img/美女/15.jpg");
pst.setBlob(2, fis);

int len = pst.executeUpdate();
System.out.println(len > 0 ? "成功" : "失败");

4、批处理

在url中要加一个参数rewriteBatchedStatements=true
方法:addBatch()和executeBatch()
注意:如果批量添加时,insert要用values而不要用value

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class TestBatch {
    public static void main(String[] args) throws Exception {
        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true";
        // 获取连接
        Connection conn = DriverManager.getConnection(url, "root", "123456");

        // SQL
        String sql = "insert into t_department values(null,?,?)";
        PreparedStatement pst = conn.prepareStatement(sql);

        // 批量插入
        for (int i = 1; i <= 90000; i++) {
            pst.setObject(1, "模拟部门" + i);
            pst.setObject(2, "模拟部门的简介" + i);

            // 添加到批处理一组操作中,攒一块处理
            pst.addBatch();

            // 分批后可以再分批(可选)
            if (i % 1000 == 0) {
                // 执行
                pst.executeBatch();
                // 清空
                pst.clearBatch();
            }

        }
        pst.executeBatch();

        // 关闭
        pst.close();
        conn.close();
    }
}

5、事务

  1. 在执行之前,设置手动提交事务:setAutoCommit(false)
  2. 成功:commit();失败:rollback()
  3. 还原为自动提交:setAutoCommit(true)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class TestTransaction {
    public static void main(String[] args) throws Exception {
        /*
         * update t_department set description = 'xx' where did = 2;
         * update t_department set description = 'yy' where did = 3;
         *
         * 我希望上面两个语句要么一起成功,要么一起回滚
         * 为了制造失败,我故意把第二条语句写错
         * update t_department set description = 'yy' (少了where) did = 3;
         */

        //1、注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2、获取连接
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/b1", "root", "密码");

        //设置手动提交事务
        c.setAutoCommit(false);

        //3、执行sql
        String sql1 = "update t_department set description = 'xx' where did = 2";
        String sql2 = "update t_department set description = 'yy' did = 3"; // 这句错的,造成回滚
        //使用prepareStatement的sql也可以不带?
        PreparedStatement pst = null;
        try {
            pst = c.prepareStatement(sql1);
            int len = pst.executeUpdate();
            System.out.println("第一条:" + (len > 0 ? "成功" : "失败"));

            pst = c.prepareStatement(sql2);
            len = pst.executeUpdate();
            System.out.println("第二条:" + (len > 0 ? "成功" : "失败"));

            System.out.println("提交");
            c.commit();
        } catch (Exception e) {
            System.out.println("回滚");
            c.rollback();
        }

        //4、关闭
        if (pst != null) {
            pst.close();
        }
        c.setAutoCommit(true); // 还原为自动提交
        c.close();
    }
}

6、数据库连接池

  • 数据库连接池
    负责分配、管理和释放数据库连接
    允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

  • 最小连接数是连接池一直保持的数据库连接

  • 若数据库连接请求超过最大连接数,后面的数据库连接请求将被加入到等待队列中

  • 大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放

import com.alibaba.druid.pool.DruidDataSource; // 数据库连接池 类

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

public class Hello {
    public static void main(String[] args) throws SQLException {
        // 1、创建数据源(数据库连接池)对象
        DruidDataSource ds = new DruidDataSource();

        // 2、设置参数
        // 2.1、连接参数
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/b0");
        ds.setUsername("root");
        ds.setPassword("");

        // 2.2、连接数
        ds.setInitialSize(5);//一开始提前申请好5个连接,不够了,重写申请
        ds.setMaxActive(10);//最多不超过10个,如果10都用完了,还没还回来,就会出现等待
        ds.setMaxWait(1000);//用户最多等1000毫秒,如果1000毫秒还没有人还回来,就异常了

        // 3、获取连接
        for (int i = 1; i <= 15; i++) {
            Connection conn = ds.getConnection();
            System.out.println("第" + i + "个:" + conn);

            // 如果这里没有关闭,就相当于没有还(超过最大连接数后会报错)
            conn.close(); // 这里关闭,是还回池中
        }
    }
}

7、MyBatis

  • MyBatis是一款优秀的 持久层 框架,用于简化JDBC开发
  • 支持自定义 SQL、存储过程以及高级映射
  • 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO 为数据库中的记录

JDBC缺点

MyBatis简化JDBC开发

7.1、使用 Maven 来构建项目

pom.xml添加依赖

<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>
<!-- MySQL的JDBC -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

7.2、创建表和类

创建teacher表

CREATE TABLE teacher (
 id      INT     PRIMARY KEY  AUTO_INCREMENT,
 gender  char(1),
 pwd     char(20));
INSERT INTO teacher VALUES
(1,'男','abc'),
(2,'女','abc'),
(3,'女','bcd');

创建Teacher类

package a.b.pojo;

public class Teacher {
    private Integer id;
    private String gender;
    private String pwd;

    public Integer getId() {
        return id;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", gender='" + gender + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

7.3、从 XML 中构建 SqlSessionFactory

  1. 在resources目录下创建mybatis-config.xml
  2. 修改数据库连接参数【driver、url、username、password】
  3. 修改SQL映射文件路径mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 数据库环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/b0"/>
                <property name="username" value="root"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!-- SQL映射文件 -->
    <mappers>
        <mapper resource="a/b/mapper/TeacherMapper.xml"/>
    </mappers>
</configuration>

7.4、SQL映射

  1. SQL映射文件要与Mapper接口同名(都是TeacherMapper)
  2. Mapper接口和SQL映射文件 的目录要相同(都是a/b/mapper/)
  3. SQL映射文件的namespace属性为Mapper接口全限定名
  4. 在Mapper接口中定义方法,方法名是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

映射接口a/b/mapper/TeacherMapper.java(在java目录下)

package a.b.mapper;

import a.b.pojo.Teacher;

import java.util.List;

public interface TeacherMapper {
    List<Teacher> selectAll();
}

SQL映射文件a/b/mapper/TeacherMapper.xml(在resources目录下)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="a.b.mapper.TeacherMapper">
    <select id="selectAll" resultType="a.b.pojo.Teacher">
        select * from teacher
    </select>
</mapper>

7.5、主类

  1. 加载MyBatis核心配置文件(路径要跟上面mybatis-config.xml一致),获取SqlSessionFactory对象
  2. 使用 SqlSession工厂对象 创建 SqlSession对象
  3. 使用 SqlSession对象 获取Mapper对象
  4. 使用Mapper对象执行SQL
  5. 释放资源
package a.b;

import a.b.mapper.TeacherMapper;
import a.b.pojo.Teacher;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws IOException {
        // 1、加载MyBatis核心配置文件,获取SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2、使用 SqlSession工厂对象 创建 SqlSession对象
        SqlSession session = sqlSessionFactory.openSession();

        // 3、使用 SqlSession对象 获取Mapper对象
        TeacherMapper mapper = session.getMapper(TeacherMapper.class);

        // 4、使用Mapper对象执行SQL
        List<Teacher> teachers = mapper.selectAll();
        System.out.println(teachers);

        // 5、释放资源
        session.close();
    }
}

7.6、最终目录结构

C4专项工程师能力认证 考纲 与C5全栈工程师认证不同,C4专项工程师能力认证(以下简称C4)针对的是某一个具体开发语言或开发方向的能力认证,以求在最短的时间内培养出能直接上手干活的软件开发人才。C4涵盖了目前最主流的开发语言,包括前端、Python和Java三大方向。为了降低学习曲线和认证难度,每个方向又分为两个认证层级,分别是基础能力认证与项目能力认证。对于每种开发方向,C4基础能力认证的目标是检验考生对于编程语言的数据类型、基础语法和语言特性,以及相关技术技能是否能熟练运用,而C4项目能力认证的目标是侧重于了解考生对业务需求的理. 阅读详情

相关推荐

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1439

python使用JDBC连接数据库

连接数据库python

weixin_57610760的博客 1877

px3 有感分析

px3 后续分析

qq_39707917的博客 3117

Python连接数据库:JDBC不是唯一选择!

🧚🏻‍♀: 这篇文章详细介绍了在Python中连接数据库的正确方法,解释了为何Python不使用JDBC,而是采用如SQLAlchemy、DB-API等灵活的数据库接口。通过实例展示了如何使用`mysql-connector-python`连接MySQL数据库,从建立连接到处理结果,一步步清晰易懂。掌握这些技巧将提升开发者在Web应用、数据分析和机器学习中的生产力。关注本文,深入了解更多Python数据库操作技巧,助你更快、更好地完成项目!

一个8年大数据开发工程师的碎碎念 2483

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码)

本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。

weixin_33725722的博客 487

11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别

使用 SAP ABAP SEGW 事物码实现 OData 服务的修改操作时,对于消费端通过 PATCH/MERGE 和 PUT 这三种不同类型的 HTTP 请求触发的场景,我们应该在 UPDATE_ENTITY 方法里用 IF 分支分别进行处理,原因就在于 GET_ENTITY 方法是否在修改处理逻辑的过程中被触发。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2467

Python通过jdbc连接数据库-以国产达梦为例

环境说明: python 3.7.4 java 1.8.0.40 前提条件: 安装python第三方库jaydebeapi、jpype1。安装时先安装jpype1再安装jaydebeapi. 安装jpype : pip install Jpype 安装JayDeBeApi : pip install JayDeBeApi 参考:https://pypi.org/project/JayDeBeApi/ Python通过j...

housonglin1213的博客 1万+

Xilinx_JESD204B

Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号

Crazzy_M的博客 1万+

Python通过jdbc连接数据库 通过各种途径摸爬滚打后终于完成连接(我调研的多是国产库,但是国外的数据库肯定支持更好,所以大体都是一样的)

前提条件: Windows server 2008 R2 standard(操不系统,不固定); 安装jdk1.8(jdk具体版本根据major.minor版本确定,)https://blog.youkuaiyun.com/hanchao5272/article/details/79379803; 安装gcc(gcc版本与操作平台版本相匹配); 安装python第三方库jaydebeapi、jpype...

weixin_42255200的博客 1597

【肌电处理】肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率【含Matlab源码 3386期】

肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 826

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

【数据集总结】不透水面积ISA:GAIA、CLUD-Urban、GISA

WW、forever的博客 2162

python jdbc array_JDBC简介

在介绍JDBC之前,我们先简单介绍一下关系数据库。程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题。如果我们自己来定义存储格式,比如保存一个班级所有学生的成绩单:名字成绩Michael99Bob85Bart59Lisa87你可以用一个文本文件保存,...

weixin_39869197的博客 233

snmp MIB详解

每个 MIB 对象都由一个对象标识符(OID)和对象类型组成。OID 是一个由多个数字组成的路径(类似于 IP 地址),它标识了 MIB 中对象的层次结构。

dlz0836的博客 3724

python大数据工程师需要掌握哪些_做大数据工程师需要掌握哪些技能呢?

大数据是眼下非常时髦的技术名词,与此同时自然也催生出了一些与大数据处理相关的职业,通过对数据的挖掘分析来影响企业的商业决策。Hadoop工程师用人企业普遍要求掌握以下技术:1、熟悉Linux开发环境,熟悉Shell命令2、熟悉Java、python、scala语言(至少一种)3、具备较丰富的基于Hadoop、Map Reduce、Yarn、Storm、Spark、Hive、Hbase、kafka、...

weixin_39888807的博客 415

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java与python-如何对比Python和Java,只需三分钟告诉你!

原标题:如何对比Python和Java,只需三分钟告诉你!Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手。但是对于初学者来说,非常困惑,因为时间和精力有限,上手必须要先学一门,到底选那个好呢,今天3分钟带你透彻了解。1.运行速度 java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度要上慢一些...

weixin_37988176的博客 9909

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 和 Python 有哪些区别?

1、运行速度 Java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度要上慢一些。 2、对Legacy代码的支持 对于legacy代码的支持,由于Java大量的用于电商,互联网后端,银行等大型系统,所以对于legacy的代码的数量要远大于Python。而Python要更轻量级一些,没有那么多legacy的问题。尤其是Py3即将全面推广,Py2要退出历史舞台。 3、代码开发效率 Python代码开发效率非常高,同样的函数功能,Java需要十几行

IT1124的博客 4332

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

某企业才有MySQL管理内部业务数据,工程师在选择数据库连接器时,可以选择以下哪些语言开发的程序

某企业才有MySQL管理内部业务数据,工程师在选择数据库连接器时,可以选择以下哪些语言开发的程序:PHP、Ruby、JDBC、Python 对于管理 MySQL 数据的程序,企业工程师可以选择以下语言开发的程序,因为它们都支持与 MySQL 数据库的连接:支持情况:PHP 完全支持 MySQL 数据库连接。方式: 扩展(推荐)。PDO (PHP Data Objects) 扩展(推荐)。MySQL Native Driver (mysqlnd)。适用场景:广泛用于 Web 开发,特别是在 LAMP(Lin

HCIE 数通、RHCE、HCIP 欧拉、MySQL OCP 持证工程师。 894

选择java还是python-Python和Java二选一该学啥?

Java和python犹如北乔峰南慕容,竞争不相上下。如果有能力同时学习那再好不过了,但很多刚刚接触IT行业的小伙伴在学习初期学习困难较大,还是要两者择其优。下面是对python和Java两个编程语言的对比分析,大家可以酌情参考一下,依据自己的需求来定夺自己要学习哪一门语言。1、运行速度Java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度...

weixin_37988176的博客 142

python和java哪个值得深入-Python和Java二选一该学啥?

Java和python犹如北乔峰南慕容,竞争不相上下。如果有能力同时学习那再好不过了,但很多刚刚接触IT行业的小伙伴在学习初期学习困难较大,还是要两者择其优。下面是对python和Java两个编程语言的对比分析,大家可以酌情参考一下,依据自己的需求来定夺自己要学习哪一门语言。1、运行速度Java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度...

weixin_37988176的博客 299

Java开发工程师

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34309435的博客 131

python和java该选择哪个好_如果要在Java和Python做选择该选择哪个?

匿名用户1级2018-09-11 回答Java和python犹如北乔峰南慕容,竞争不相上下。如果有能力同时学习那再好不过了,但很多刚刚接触IT行业的小伙伴在学习初期学习困难较大,还是要两者择其优。下面是python和Java两个编程语言的对比分析,大家可以酌情参考一下,依据自己的需求来定夺自己要学习哪一门语言。1、运行速度Java是静态语言静态编译的,速度上要比Python快的很多,而Python...

weixin_39676633的博客 361

java和python哪个好学一点,java和python哪个更有前景

Java和python犹如北乔峰南慕容,竞争不相上下。如果有能力同时学习那再好不过了,但很多刚刚接触IT行业的小伙伴在学习初期学习困难较大,还是要两者择其优。下面是对python和Java两个编程语言的对比分析,大家可以酌情参考一下,依据自己的需求来定夺自己要学习哪一门语言。1、运行速度Java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度要上慢一些。2、对Legacy代码的支持。

w12130826的博客 956

python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用

这个 Sampler 可以向数据库发送一个 jdbc 请求(sql 语句),并获取返回的数据库数据进行操作。它 经常需要和 JDBC Connection Configuration 配置原件(配置数据库连接的相关属性,如连接名、密码 等)一起使用。

软件测试技术交流分享 1043

工程师大致分类

前端工程师 1. 重构技能:html/css/js 2. 交互技能:ajax 3. 企业级框架技能:vue/vuerouter/vuex/elementui | react | angular 4. 移动端技能:webapp、hybirdapp、小程序 5. 通用技能:linux/svn/git/vscode Java工程师 1. 基础技能:coreJava/xml/mysql/jdbc/servlet/jsp 2. 企业级框架技能:springmvc spring mybatis 3. 第三方:.

杰克男的博客 307

小白学习python好还是java好_小白应该学Python还是Java?

Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手。但是对于初学者来说,非常困惑,因为时间和精力有限,上手必须要先学一门,到底选那个好呢,今天3分钟带你透彻了解。1.运行速度Java学习交流扣群:【47】974【9726】Java是静态语言静态编译的,速度上要比Python快的很多,而Python动态类型语言,一边执行一边编译,速度要上慢一些。2.对L...

weixin_42363510的博客 660

python和java的本质区别,python和java有什么关系

Python虽然没有他俩关系那么铁,但是目前支持Python的数据库也非常多,而且很多主流数据库SQL,Mongodb,Redis都有API支持Python, 可以说Python不缺的就是库。,Python是一门上手非常快,容易学的语言,如果选择人工智能,机器学习,Python可以成为你的选择。Python代码开发效率非常高,同样的函数功能,Java需要十几行,Python只要几行,代码数量要远小于Java,这样开发的时间和效率比Java高很多。而Python要更轻量级一些,没有那么多legacy的问题。

2401_82891043的博客 337
上一篇: 引进【文章长度】作为特征 来提高 文本分类准确率
下一篇: Python工程师Java之路(p)jar包管理工具Maven
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值