分别用java和go写了个连接mysql数据库,读取2000多条大乐透彩票数据,并打印出来的程序。
代码如下:
1、java代码
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author wangkai
* @date 2020-08-11 11:12
*/
public class StaticTicket {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/test";
static final String USER = "root";
static final String PASS = "root";
public static void main(String[] args) throws Exception {
long time1 = System.currentTimeMillis();
Connection conn = null;
try{
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL,USER,PASS);
readHistoryRecord(conn);
System.out.println("执行完毕 耗时:"+(System.currentTimeMillis()-time1)+"ms");
}finally {
if(conn != null) conn.close();
}
}
/**
* 读取历史数据
* @param conn
* @throws Exception
*/
public static void readHistoryRecord(Connection conn) throws Exception {
PreparedStatement pst = null;
try{
pst = conn.prepareStatement("select id,red1,red2,red3,red4,red5,blue1,blue2 from history_record");
ResultSet resultSet = pst.executeQuery();
int count=0;
while(resultSet.next()){
int id = resultSet.getInt("id");
String red1 = resultSet.getString("red1");
String red2 = resultSet.getString("red2");
String red3 = resultSet.getString("red3");
String red4 = resultSet.getString("red4");
String red5 = resultSet.getString("red5");
String blue1 = resultSet.getString("blue1");
String blue2 = resultSet.getString("blue2");
System.out.println(id+" "+red1+" "+red2+" "+red3+" "+red4+" "+red5+" "+blue1+" "+blue2);
count++;
}
System.out.println("记录数:"+count);
}catch (Exception e){
conn.rollback();
throw e;
}finally {
if(pst != null) pst.close();
}
}
}
2、go语言
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"strings"
"time"
)
func IsErr(err error){
if err != nil{
fmt.Printf("程序错误:%s", err)
}
}
const (
userName = "root"
password = "root"
ip = "127.0.0.1"
port = "3306"
dbName = "test"
)
type Users struct {
id int
red1 string
red2 string
red3 string
red4 string
red5 string
blue1 string
blue2 string
}
func main(){
time1 := time.Now()
//初始化数据库
path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
db, err := sql.Open("mysql",path)
rows, err := db.Query("select * from history_record")
IsErr(err)
//循环读取结果
var users []Users
for rows.Next(){
var user Users
//将每一行的结果都赋值到一个user对象中
err := rows.Scan(&user.id,&user.red1, &user.red2, &user.red3, &user.red4, &user.red5, &user.blue1, &user.blue2)
if err != nil {
fmt.Println(err)
}
//将user追加到users的这个数组中
users = append(users, user)
fmt.Println(user.id, user.red1, user.red2, user.red3, user.red4, user.red5, user.blue1, user.blue2)
}
fmt.Println("===========================")
fmt.Println("数组长度:",len(users))
fmt.Print("耗时:", time.Now().Sub(time1).Seconds())
}
个人感觉go语言的语法比较灵活,有些地方是比java要简洁许多。重点来看下执行结果。
用java的代码执行三次的结果:1360ms,1427ms,1376ms; 平均1388ms
用go的代码执行三次的结果:52ms,77ms,45ms; 平均58ms
从这个实验结果可以看出,go的执行效率的确比java快了24倍。这样看来,java还是有些鸭梨山大呀