六種流行的語言---C、C++、python、Java、php、C#比較[轉]

轉載:https://www.cnblogs.com/bluedy1229/p/3750168.html

六種流行的語言---C、C++、python、Java、php、C#比較[轉]

 

語言大餐

 

  迴歸正題,本文是六種語言連接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的心。

  入門難度:★★★

  代碼優雅度:★★★★★

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章