六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?
发布时间:2014-05-07 01:38:00作者:左潇龙阅读(9849 )评论(82)
引言
鉴于五一期间超大的人流量,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!");
return;
}
mysql_query(&connection, "set names gbk");
result = mysql_query(&connection, sql);
if (result)
{
printf("Error:query failed!");
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|", 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"]."|";
}
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的心。
入门难度:★★★
代码优雅度:★★★★★
小结
到此,六种语言的简单展示就结束了。就本次语言小旅游来说,LZ更喜欢python这块地,简洁的语法和API直接征服了LZ。不知道各位猿友有没有对哪个怦然心动呢?
/\/\\ / \/
版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
|
|
|
|
|
|
|
|
分类: 编程语言
https://code.google.com/p/grass-mud-horse/
var db = new MySqlDbUtility( "Database='test';Data Source='localhost';User Id='root';Password='123456';charset='utf8';pooling=true" ); foreach ( var item in db.T( "SELECT * FROM test" ).ExecuteDynamics() ) Console.WriteLine( "|{0}|{1}|", item.ID, item.Name );
你一直都是这么偏激吗? 为嘛不好好理解下我说的话,只是代表个人意见, 要知道我可没用“C#是最丑陋的语言”,我只是说“是我见过最丑陋的语言”,也就是说,我不代表任何人。
如果哪天你对我最喜欢的python说:Python是最丑陋的语言,我肯定鸟都不鸟你,因为,那只是的看法, 不代表所有人。
另外, 这个含蓄又恶毒的评论, 我是故意发出的, 我只是测试下C#用户有几个人是真的不在乎别人的月经话”, 没想到还是有人中招。
1,我承认我只是看了别人写的C#代码就简单下了这么粗暴的结论,原因如2
2,我确实是在测试C#程序员是不是不在乎月经贴
顺便贴出个在Python不借用任何“魔术式”方法来实现你那个类似的代码, 仅为回报你的代码,无比较心理:
peoples.sort(lambda a,b:cmp(a.age, b.age))
直接对peoples进行了内部排序,不需返回新的list。
JS:
peoples.sort(function (a, b) { return a.age > b.age })
C#不是动态语言也缺乏弱类型也不是函数式,拿C#最弱的地方去比其它语言的强项是知识面不够广,这是很多.net程序员的通病。当然结果被别人搞的体无完肤。
要弄,就弄C#的泛型,面向对象,接口,属性,特性,这些犀利的东西,可惜好象多数C#程序员对这些真正闪光的东西不是很懂。
比如:
public interface IEntity...
public class BaseEntity<T> Where T : IEntity
public class PeopleEntity : BaseEntity<IEntity>
{
[require]
public string Name {get; set;}
...
这种才叫C#的有优雅的代码,Java比不了,JS写出来的也很垃圾,免强能抗衡的只有Python,Scala这些新型的混合了面向对象及函数式的语言才能搞。
我还真不太记得了,我读过的太多了。不过我有八成的把握是《盘龙》,这是一本相当出名的玄幻小说。
站内搜索
用户中心
用户名: | 登录 | 注册 | |
密 码: | ||
用户名支持字母,数字,下划线和中文 |
最新评论
随机推荐
深入理解计算机系统(3...
左潇龙2013-11-13
JNI探秘-----你不知道...
左潇龙2013-08-17
JVM内存管理------GC...
左潇龙2013-08-18
深入理解计算机系统(1...
左潇龙2013-09-21
程序员是不是青春饭
左潇龙2015-07-05