以连接mysql为例:六种流行的语言比较——C、C++、python、Java、php、C#

2023-05-16

本文是六种语言连接mysql数据库的代码展示,在LZ尝试的过程中,无论是语言环境搭建、mysql依赖库的导入还是代码的风格,各种语言都各有千秋。接下来,我们就让这些语言一一登场吧。

Java(最具噱头的语言)

Java给新人的印象应该是入门简单、代码优雅、活跃度高、跨平台、开源大家庭等等,实在是当之无愧的明星语言,而且是偶像派的。不过可惜的是,偶像派明星很容易被干掉。Java语言是LZ赖以生存的语言,因此LZ不希望做个偶像派,只能奋起直追,争取做实力派的Javaer。

说起这次Java连接mysql的编写,实在没什么好说的,毕竟本身就是做这个的,所以这一路非常顺利,算是最无感的一个。下面是LZ写的代码。

package cn.zxl.jmysql;

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

public class JMysql {
    
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost/test";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";
    private static final String SQL = "select * from test";
    
    public static void main( String[] args ) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            Class.forName(DRIVER);
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            statement = connection.createStatement();
            resultSet = statement.executeQuery(SQL);
            while (resultSet.next()) {
                System.out.println("|" + resultSet.getString("id") + "|" + resultSet.getString("name") + "|");
            }
        } catch (Exception e) {
            System.out.println("query failed!");
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
}

输出结果如下:
在这里插入图片描述
总的来说,Java的mysql连接编写是最无感的一个,因为这是LZ比较熟悉的。就Java本身而言,LZ对它的打分如下。这里要特别说明的是,由于其它几种语言LZ都只是略知皮毛,因此本次只从最直观的两个感受去评分。

入门难度:★★★

代码优雅度:★★★★

C(最令人崇拜的语言)

这个语言在大学里LZ就学过一点皮毛,不过当时很厌烦这个无用的家伙,LZ想要写的是大型网游,而不是输出一个矩阵,或者打印个“心形”去泡妞。不过说来也怪,到得现在,LZ已经做了两年的程序猿,近半年的PM,却忽然之间对C这个老家伙情有独钟,敬意油然而生,实在是怪哉怪哉。

废话不多说,下面是LZ写的代码。

《c_mysql.h》
#ifndef C_MYSQL_H_
#define C_MYSQL_H_

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <windows.h>
#include <mysql.h>

void execute_sql(char* sql);

#endif
《c_mysql.c》
#include "c_mysql.h"

#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "test"

int main()
{
    char *sql = "select * from test";
    execute_sql(sql);
    return 0;
}

void execute_sql(char* sql)
{
    MYSQL connection;
    MYSQL_RES *result_pointer;
    MYSQL_ROW result_row;
    int result, row, column, i, j;
    mysql_init(&connection);
    if (NULL == mysql_real_connect(&connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS))
    {
        printf("Error:connection failed!\n");
        return;
    }
    mysql_query(&connection, "set names gbk");
    result = mysql_query(&connection, sql);
    if (result)
    {
        printf("Error:query failed!\n");
        mysql_close(&connection);
        return;
    }
    result_pointer = mysql_store_result(&connection);
    if (result_pointer)
    {
        row = mysql_num_rows(result_pointer);
        for (i = 1; i < row + 1; i++)
        {
            result_row = mysql_fetch_row(result_pointer);
            printf("|%s|%s|\n", result_row[0] ,result_row[1]);
        }
    }
    mysql_close(&connection);
    system("pause");
}

在这里插入图片描述
或许是因为Java无法操纵指针,所以在写C语言的时候,使用&、*、->这些符号感觉特别爽,不知道真正的Cer是否有这样的感觉呢。下面是LZ对C语言的打分。

入门难度:★★

代码优雅度:★★★

C++(最神秘莫测的语言)

C++作为难度最高的语言,称之为神秘莫测一点都不过分,能游刃有余使用C++的,实在是少之又少。对C++有此印象,主要是因为当时LZ看Java虚拟机源码的悲惨经历,那满屏幕的宏定义,实在令LZ为自己的智商捉急,同时也被编写Java虚拟机的大神们深深折服。

以下是最高深的语言连接mysql的代码,请过目。

《c++_mysql.h》
#ifndef C___MYSQL_H_
#define C___MYSQL_H_

#include <iostream>
#include <mysql_connection.h>   
#include <mysql_driver.h>   
#include <statement.h>
using namespace sql;   
using namespace std;

void execute_sql(const SQLString sql);

#endif
《c++_mysql.cpp》
#include "c++_mysql.h"

#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASE "test"

int main()
{
    const SQLString sql = "select * from test";
    execute_sql(sql);
    return 0;
}

void execute_sql(const SQLString sql)
{
    mysql::MySQL_Driver *driver;   
    Connection *connection;   
    Statement *statement;   
    ResultSet *result_set;   
    driver = mysql::get_mysql_driver_instance();   
    connection = driver->connect("tcp://localhost:3306", "root", "123456");   
    statement = connection->createStatement();   
    statement->execute("use test");  
    statement->execute("set names gbk");
    result_set = statement->executeQuery(sql);   
    while(result_set->next())   
    {   
        cout << "|" << result_set->getInt("id") << "|" << result_set->getString("name") << "|" << endl;   
    }   
    delete statement;   
    delete connection;  
    system("pause");
}

在这里插入图片描述
C++这个mysql连接的方式,其API与Java的相似度极高,粗略估计大约有90%左右。因此C++的程序除了异常捕捉和内存清理与Java有些区别之外,其它的代码非常相似,但LZ始终觉得使用“.”没有使用“->”显得高端,0.0。以下是LZ的评分。

入门难度:★★★★

代码优雅度:★★★

php(最低调奢华的语言)

PHP虽然近期也很火,但是总觉得它有点低调,但又不失内涵。作为网站制作最适合的语言之一,它总是默默的在发挥自己的力量。

以下是PHP连接mysql低调的代码。

<?php
    $mysql_server_name="localhost";
    $mysql_username="root";
    $mysql_password="123456";
    $mysql_database="test";
    
    $connection = mysql_connect($mysql_server_name, $mysql_username,$mysql_password);
    if(!$connection) {
        echo "connection failed!";
        return;
    }
    mysql_set_charset("gbk",$connection);
    mysql_select_db($mysql_database, $connection);
    $sql="select * from test";
    $result=mysql_query($sql, $connection);
    while($row = mysql_fetch_array($result)) {
        echo "|".$row["id"]."|".$row["name"]."|\n";
    }
    mysql_close($connection);
?>

在这里插入图片描述
如果仔细观察会发现,PHP的API与C语言非常相似,这是因为PHP是使用DLL来扩展的mysql操作导致的。此外,PHP与前面三个不同的是,它不是编译型语言,是一种服务端的脚本语言,因此LZ选择使用命令来执行它。以下是LZ对它的评分。

入门难度:★★★

代码优雅度:★★★★

C#(最具潜力的语言)

C#最近虽然也算火爆,但却似乎一直有些力不从心的感觉,尽管LZ非C#成员,但也认识不少C#程序猿。不过LZ个人觉得,高级形态是语言的趋势,因此像C#、Java、Object-c这种被高度封装的语言总会发光发热,毕竟再退回几十年前去,使用汇编甚至二进制去写代码的日子肯定是不会再到来了。

以下是C#连接mysql数据库的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace CSMysql
{
    class Program
    {
        static void Main(string[] args)
        {
            MySqlConnection connection = new MySqlConnection("Database='test';Data Source='localhost';User Id='root';Password='123456';charset='utf8';pooling=true");
            MySqlCommand command = new MySqlCommand();
            command.Connection = connection;
            command.CommandText = "select * from test";
            try
            {
                command.Connection.Open();
                MySqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("|" + reader.GetInt32("id") + "|" + reader.GetString("name") + "|");
                }
                Console.ReadLine();
            }
            catch (Exception)
            {
                Console.WriteLine("query failed!");
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}

在这里插入图片描述
C#的API有些特别,而且看到有command就难免让人联想到command模式,不知这API里面的实现是否是command设计模式。总的来说,C#和Java的mysql操作API还是差别比较大的,这让LZ有点出乎意料。以下是LZ对它的评分。

入门难度:★★★

代码优雅度:★★★★

python(最高端大气上档次的语言)

对于python来说,LZ之前就已经写过一篇小博文,无论从哪个角度来讲,这个语言都给LZ一种高大上的感觉。无论是它霸气的脚本语言特有的语法,还是特别的编码格式要求,都让LZ心生向往。

以下是python高端大气上档次的代码。

# coding=utf-8
import MySQLdb
import sys
 
host = 'localhost'
user = 'root'
password  = '123456'   
db   = 'test'
 
 
if __name__ == '__main__':
    connection = MySQLdb.connect(host,user,password,db);
    try:
        connection.ping()
    except:
        print ('failed to connect MySQL.')
    sql = 'select * from test'
    cursor = connection.cursor()
    cursor.execute(sql)
    for row in cursor:
        print ("|" + str(row[0]) + "|" + row[1] + "|")
    cursor.close()
    connection.close()
    sys.exit()

在这里插入图片描述
尽管python在安装mysql库的时候曾一度让LZ一筹莫展,但这依然无法阻止LZ对python的追逐之心。见到python的API可以说让LZ惊了个呆,实在是简洁至极,别具匠心。好了,多的就不说了,分数代表LZ的心。

入门难度:★★★

代码优雅度:★★★★★

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

以连接mysql为例:六种流行的语言比较——C、C++、python、Java、php、C# 的相关文章

  • ROS学习笔记之——ROS与gazebo之间的控制关系

    之前博客 学习笔记之 gazebo仿真 有采用用ricz来监控gazebo中的机器人 本博文对其进行深入的介绍 本文以 ROS学习笔记之 gazebo模型 xff08 URDF xff09 中的RRBot为例 目录 ros control
  • ROS学习笔记之——移动机器人的导航

    之前博客 ROS学习笔记之 激光雷达SLAM建图 已经介绍过如何通过激光雷达SLAM建图了 xff0c 本博文讲一下ROS机器人的导航相关 目录 导航相关理论介绍 导航的概述 costmap AMCL Dynamic Window Appr
  • ROS学习笔记之——EKF (Extended Kalman Filter) node 扩展卡尔曼滤波

    最近正好准备想试试利用EKF实现多传感器的融合 但没想到本身ROS里面就已经有EKF的功能包了 这个包用于评估机器人的3D位姿 xff0c 使用了来自不同源的位姿测量信息 xff0c 它使用带有6D xff08 3D position an
  • ROS学习笔记之——路径规划及avoid obstacles

    之前博客 ROS学习笔记之 Navigation Stack及路径规划 介绍了navigation stack xff0c 其中涉及到的amcl 路径规划以及避障还没有详细的展开 目录 AMCL 路径规划 全局路径规划中的地图 栅格地图 x
  • 【LeetCode】LCS最长公共子序列

    最长公共子序列 题目描述思路分析递归结构算法实现输出最长子序列算法实现 题目描述 思路分析 设A 61 a0 xff0c a1 xff0c xff0c am xff0c B 61 b0 xff0c b1 xff0c xff0c bn xff
  • ROS实验笔记之——基于ArUco Marker来估算camera的位姿

    最近在做课程的project的时候 xff0c 实现了基于Marker的3D 2D的相机位姿估计算法 写下本博文作为学习记录用 xff5e 先看看整体的实现效果 基于ArUco Marker来估算camera的位姿 目录 安装ArUco A
  • ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真

    最近在公众号上看到Prometheus无人机的资料 xff0c 发现里面开源了很好的无人机的仿真环境 xff0c 并且有很好的教程 而本人正好在上 Introduction to Aerial Robotics 的课程 xff0c 正好搭建
  • ROS实验笔记之——基于Prometheus的控制模块

    之前博客 ROS实验笔记之 基于Prometheus自主无人机开源项目的学习与仿真 已经介绍过Prometheus项目 本博文继续学习其中的控制模块 xff5e ROS无人机仿真之轨迹跟踪 ROS无人机仿真之航点跟踪 目录 仿真功能启动脚本
  • 学习笔记之——VIO与VINS-Mono

    本博文为本人学习VIO与VINS的学习笔记 xff0c 部分内容来源于网上的资料 xff0c 文末给出参考 本博文仅仅为本人学习记录用 xff0c 不作任何商业用途 先给出复现的demo 视觉惯导紧融合VINS Mono的复现 目录 VIO
  • ROS学习笔记之——PX4开发初入门

    PX4 是一款专业级飞控 它由来自业界和学术界的世界级开发商开发 xff0c 并得到活跃的全球社区的支持 xff0c 为从竞速和物流无人机到地面车辆和潜水艇的各种载具提供动力 目录 基本概念 QGroundControl xff08 QGC
  • ROS实验笔记之——PX4仿真

    之前博文 ROS学习笔记之 PX4开发初入门 ROS学习笔记之 PX4生态系统 已经对PX4做了一些基本的学习 xff0c 并且在mac上搭建了px4开发环境 本博文在ubuntu下对PX4进行一些基本的仿真学习 xff5e 之前在做无人机
  • ROS学习笔记之——基于QGC的PX4在线仿真调PID

    之前博客 ROS实验笔记之 PX4仿真 已经介绍了PX4编译及QGC的安装 xff0c 本博文进一步的基于QGC进行仿真控制 基于QGC的PX4在线仿真 首先运行基于px4的gazebo仿真 make px4 sitl default ga
  • ROS学习笔记之——PX4位置环PID控制

    之前博客 ROS学习笔记之 基于QGC的PX4在线仿真调PID 已经学习了如何在仿真环境下 xff0c 调节PID位置环与姿态环 本博文细细的看一下PX4位置环PID调节 如下图所示 输入的是期望的位置 xff0c 然后外环是P控制 而内环
  • ROS实验笔记之——JCV-450无人机初入门

    最近测试了阿木实验室的JCV 450无人机 本博文记录本人使用及实验的过程 目录 基本设置 注意点 飞行前调试 一 加载固件 二 加载参数 三 校准传感器 四 遥控器校准 五 飞行模式 六 电调校准 七 检查参数 QGC的使用 首先看一下飞
  • ROS学习笔记之——MSCKF

    原理 精度方面 xff0c MSCKF应该与graph optimazation差不多 xff0c 但是其对算力要求没有那么高 xff5e http www xinliang zhong vip msckf notes header n13
  • FreeRTOS调试神器分享

    在B站看到的大神的分享 xff0c 记录一下 xff1a FreeRTOS调试神器 xff01
  • ROS实验笔记之——Intel Realsense l515激光相机的使用

    最近实验室购买了Intel Realsense l515相机 本博文记录使用过程 驱动安装 先到官网安装驱动 xff1a https github com IntelRealSense realsense ros https github
  • ROS实验笔记之——VINS-Mono在l515上的实现

    之前博客 ROS实验笔记之 Intel Realsense l515激光相机的使用 实现了用l515运行RTABmap xff0c 本博文试试在l515上实现vins mono 首先需要将vins mono配置成功 xff0c 如果出现像之
  • ROS学习笔记之——EVO工具的使用

    之前博客 ROS学习笔记之 VICON的使用 用vincon获得了机器人的真实轨迹 xff0c 并且通过amcl可以获得了机器人的定位结果 xff0c 下面通过EVO包来表征performance xff08 本文不像网上大部分博客复制粘贴
  • ROS实验笔记之——无人机在VICION下试飞

    之前博 ROS实验笔记之 自主搭建四旋翼无人机 ROS实验笔记之 JCV 450无人机初入门 ROS实验笔记之 基于Prometheus自主无人机开源项目的学习与仿真 已经介绍过一些无人机的仿真 xff0c 试飞 本博文基于vicion实现

随机推荐

  • ROS学习笔记之——无人机PID调参过程记录

    问题描述 最近搭建了一架无人机如下 飞行demo self design Quadrotor flighting test2 但是在手飞过程 xff0c 发现陀机很烫 应该是由于pid没调 xff0c 然后机臂抖动导致的发热 接下来 xff
  • 基于可见光通信的室内定位与导航及物联网应用

    本人从2014年起从事可见光通信 xff08 Visible Light Communication VLC xff09 相关研究 xff0c 主要包括 xff1a 基于光电二极管 xff08 PD xff09 图像传感器 xff08 ca
  • ROS实验笔记之——FAST-LIVO

    最近IROS22的FAST LVIO源码开源了 xff0c 笔者赶紧测试一下 源码链接 xff1a GitHub hku mars FAST LIVO A Fast and Tightly coupled Sparse Direct LiD
  • 算法学习笔记

    最近无意中看到一个算法的网站 xff0c 看着感觉介绍得挺系统的 xff0c 虽然做算法以及指导学生开发各种算法这么些年了 xff0c 却没有真正系统的学习过 xff08 几年前啃过算法导论 xff0c 但是苦于那蹩脚的中文翻译 xff0c
  • 2023年可见光通信(LiFi)研究新进展

    可见光无线通信Light Fidelity xff08 LiFi xff09 又称 光保真技术 xff0c 是一种利用可见光进行数据传输的全新无线传输技术 LiFi是一种以半导体光源作为信号发射源 xff0c 利用无需授权的自由光谱实现无线
  • 论文阅读笔记之——《Toward Convolutional Blind Denoising of Real Photographs》及基于pytorch的CBDNet的复现

    本文是CBDNet xff08 convolutional blind denoising network xff09 的阅读笔记 本博文分为两块 xff0c 一块是阅读笔记 xff0c 一块是本人对CBDNet的实验记录 论文链接 xff
  • C++和Windows平台的一些书籍

    从2010年学习编程以来 xff0c 到现在有差不多3年时间了 xff0c 过的真快啊 目前在深圳工作 xff0c 主要使用的是C 43 43 语言 xff0c 那么我就说说C 43 43 和Windows平台的书籍吧 1 C primer
  • 程序员提升之排查bug的能力

    不知不觉工作已经快一年了 xff0c 从开始工作以后 xff0c 跟着大神们学习了很多 xff0c 从一个小白慢慢的成长起来 xff0c 从我目前的经验来看 xff0c 我要感谢bug xff0c 这里的bug并不单单是指bug xff0c
  • CMakeList编译报错ninja: error: missing and no known rule to make it解决方法

    Android NDK开发引用第三方库CMakeList txt编译报错 xff1a ninja error 39 XXX NDKApplication app src main cpp src main cpp armeabi v7a l
  • 关于Java学习的心得体会

    大一的第二学期 xff0c 满心欢喜的期待着自己的专业课 xff0c 上个学期C语言老师和我们说C语言只是入门 xff0c 我们还学得如此吃力 心中已经能够想到本学期的心酸了 xff0c 果不其然 xff0c 老师说本学期不学C 43 43
  • 项目管理第十三章项目相关方管理

    项目管理第十三章项目相关方管理 项目相关方管理 xff1a 包括识别能够影响项目或会受项目影响的人员 团体或组织 xff0c 分析相关方对项目的期望和影响 xff0c 制定合适的管理策略来有效调动相关方参与项目决策和执行 其过程包括 xff
  • Git3.创建版本库(Git仓库)&提交更新到仓库

    创建版本库 Git仓库 什么是版本库呢 xff1f 版本库又名仓库 xff0c 英文名repository xff0c 你可以简单理解成一个目录 xff0c 这个目录里面的所有文件都可以被Git管理起来 xff0c 每个文件的修改 删除 x
  • ssh 登录时常出现的几种错误以及解决方法(Linux)

    前言 ssh是Linux系统中常用的远程登陆的命令 xff0c 有的时候我们通过xshell等远程连接软件使用ssh去登陆远程的服务器的时候 xff0c 会遇到一些问题 下面是关于ssh 远程登陆的问题解决方法的总结 xff08 更新中 x
  • vins-mono(4)重定位以及全局优化

    vins的重定位模块主要包含回环检测 回环候选帧之间的特征匹配 紧耦合重定位三个部分 a 回环检测 采用BRIEF描述子的DBOW2词袋进行闭环检测 对新来的关键帧重新检测500个角点进行闭环检测同时对所有角点进行BRIEF描述 然后计算当
  • STM32CubeMX的下载以及安装

    第一步 xff1a 安装应用软件 下载STM32CubeMX软件并安装 xff1b 第二步 xff1a 安装MCU固件包 在线安装用户所选的STM32微控制器对应的MCU固件包 具体操作步骤如下 xff1a 软件的下载地址 xff1a ht
  • MDK-ARM软件的下载以及资源分享

    1 软件的基本特点 xff1a 支持源代码的编辑 编译 程序的下载和调试等多种功能 编译器和器件支持包分离 xff0c 可根据需求安装 xff0c 减少软件的大小 提供多种中间件 xff0c 如RTOS和GUI等 xff0c 提高开发效率
  • 关于Win10家庭版修改用户名的问题

    之前电脑注册的时候命名为中文 xff0c 但在装很多软件时就会出现很多奇奇怪怪的问题 xff0c 查了之后发现可能是因为系统的中文名造成的 xff0c 因此在之后可能就需要修改 之前在网上找到比较常见的两种方法都不适用于Win10家庭版 方
  • ROS 开源智能小车 TurtleBot3 Waffle pi 深度视觉版简介 (可实现地图搭建、自主导航、自主避障、深度视觉算法研究)

    ROS机器人操作系统为什么现在火爆全球 xff1f ROS xff08 Robot Operating System xff0c 机器人操作系统 xff09 是目前世界上更主流更多人使用的机器人开源操作系统 它可以提供操作系统应有的服务 x
  • c/c++输出保留指定位小数(输出精度控制)

    c 43 43 C 43 43 的精度控制需要头文件 span class token macro property span class token directive keyword include span span class to
  • 以连接mysql为例:六种流行的语言比较——C、C++、python、Java、php、C#

    本文是六种语言连接mysql数据库的代码展示 xff0c 在LZ尝试的过程中 xff0c 无论是语言环境搭建 mysql依赖库的导入还是代码的风格 xff0c 各种语言都各有千秋 接下来 xff0c 我们就让这些语言一一登场吧 Java x