標籤:
引言
鑒於五一期間超大的人流量,LZ思來想去,最終還是選擇蝸居在自己的出租屋。無聊之際,當然不能忘了做點什麼事情,於是LZ就研究了一下幾種語言的皮毛,在這裡獻醜一翻,希望各位猿友莫要見笑。
不過說來也巧,園子裡前段時間剛好上演了一場語言大戰,這讓LZ的這篇博文一出生就可能捲入不必要的紛爭。其實LZ早就想寫這麼一篇文章,只是語言的探究比較麻煩,因為每個語言往往最難搞的就是環境的搭建,而且非常浪費時間,因此LZ就挑了五一這個機會才開始著手進行。
不管怎麼說,LZ還是要澄清一下,本文只是LZ學習成果的展示,堅決不參加語言大戰。如果猿友們非要問LZ對語言的看法,LZ就只能給你們講一個LZ看過的玄幻小說了。
這部小說裡面講述的是一個魔法師與武士的世界,每個人出生的時候,身體都會有“金木水火土雷風”這幾種屬性之一的特性,有些天縱奇才會有多種屬性。大家都是從一層練到九層,十層則成神。在這個修鍊體系當中,有一個特殊卻又十分合乎情理的設定,就是在成神之前,大家都會從空氣當中各自汲取相應的屬性元素進行修鍊,以期能領悟天道。不過在領悟天道成了神之後,成神之人的屬性就會消失,甚至連武士與魔法師都再無任何區別。對於成神之人來說,他們操控的,只剩下那至高無上的神力而已。無屬性,無職業。
好了,故事就講到這裡吧,不知道猿友們看懂了嗎?
語言大餐
迴歸正題,本文是六種語言串連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-8import MySQLdbimport 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的心。
入門難度:★★★
代碼優雅度:★★★★★
小結
到此,六種語言的簡單展示就結束了。就本次語言小旅遊來說,LZ更喜歡python這塊地,簡潔的文法和API直接征服了LZ。不知道各位猿友有沒有對哪個怦然心動呢?
/\/\\ / \/
六種流行的語言大餐---C、C++、python、Java、php、C#你更喜歡哪一個呢?