go 查询 sql go-sqlite3 版本

  1. 用sqlite3
  2. go build -o 参保查询系统.exe main.go
  3. 用web显示
go 复制代码
package main

import (
	"database/sql"
	"fmt"
	"log"
	"net/http"
	"strconv"
	"strings"

	_ "github.com/mattn/go-sqlite3"
)

type Result struct {
	InsuredName string
	Money       string
	IdCard      string
	AgeStatus   string
	Payer       string
	ShowPayer   bool
}

func main() {
	http.HandleFunc("/", indexHandler)

	fmt.Println("========================================")
	fmt.Println(" 参保信息查询系统已启动")
	fmt.Println(" 访问地址:http://localhost:9999")
	fmt.Println(" 关闭本窗口即可退出程序")
	fmt.Println("========================================")

	err := http.ListenAndServe(":9999", nil)
	if err != nil {
		log.Fatal("端口被占用,请关闭程序重试")
	}
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
	idCard := ""
	results := []Result{}
	showMsg := ""
	msgColor := "green"

	if r.Method == http.MethodPost {
		idCard = strings.TrimSpace(r.FormValue("idcard"))
		if idCard != "" {
			results = querySQL(idCard)
			if len(results) == 0 {
				// ========== 你要的红色提示 ==========
				showMsg = fmt.Sprintf("未参保 - 2026年 - 输入的身份证:%s", idCard)
				msgColor = "red"
			}
		}
	}

	showPayerColumn := false
	for _, v := range results {
		if v.ShowPayer {
			showPayerColumn = true
			break
		}
	}

	html := `
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>参保查询</title>
    <style>
        body{max-width:1000px;margin:40px auto;font-family:微软雅黑;font-size:16px}
        .query{background:#f5f5f5;padding:20px;border-radius:8px;margin-bottom:20px}
        input{padding:10px 12px;width:340px;font-size:16px}
        button{padding:10px 25px;background:#0d6efd;color:white;border:none;border-radius:4px;cursor:pointer}
        table{width:100%;border-collapse:collapse;margin-top:20px}
        th,td{border:1px solid #888;padding:10px;text-align:left}
        th{background:#eee}
        .age-yes{color:green;font-weight:bold}
        .age-no{color:red;font-weight:bold}
        .msg{font-size:18px;font-weight:bold;margin:20px 0;}
    </style>
</head>
<body>
    <h2>参保信息查询</h2>
    <div class="query">
        <form method="post">
            被保险人证件号:
            <input type="text" name="idcard" value="` + idCard + `" placeholder="输入身份证号" required>
            <button type="submit">查询</button>
        </form>
    </div>
`

	// ========== 提示语(无数据时显示红色) ==========
	if showMsg != "" {
		html += `<div class="msg" style="color:` + msgColor + `;">` + showMsg + `</div>`
	}

	// ========== 有数据才显示表格 ==========
	if len(results) > 0 {
		html += "<table>"
		html += "<tr><th>被保险人</th><th>金额</th><th>被保险人证件号</th><th>年龄状态</th>"
		if showPayerColumn {
			html += "<th>付款人</th>"
		}
		html += "</tr>"

		for _, v := range results {
			html += "<tr>"
			html += "<td>" + v.InsuredName + "</td>"
			html += "<td>" + v.Money + "</td>"
			html += "<td>" + v.IdCard + "</td>"
			html += "<td>" + v.AgeStatus + "</td>"
			if v.ShowPayer {
				html += "<td>" + v.Payer + "</td>"
			}
			html += "</tr>"
		}
		html += "</table>"
	}

	html += "</body></html>"
	w.Header().Set("Content-Type", "text/html; charset=utf-8")
	w.Write([]byte(html))
}

func querySQL(idCard string) []Result {
	db, err := sql.Open("sqlite3", "bank.db")
	if err != nil {
		log.Println("数据库打开失败:", err)
		return nil
	}
	defer db.Close()

	rows, err := db.Query(`
		SELECT 被保险人,付款人,付款方式,金额,被保险人证件号,年龄 
		FROM cbsix 
		WHERE 被保险人证件号 = ?`, idCard)
	if err != nil {
		log.Println("查询失败:", err)
		return nil
	}
	defer rows.Close()

	var list []Result
	for rows.Next() {
		var insuredName, payer, payType, money, idCardVal, ageStr string
		_ = rows.Scan(&insuredName, &payer, &payType, &money, &idCardVal, &ageStr)

		age, _ := strconv.Atoi(ageStr)
		ageStatus := ""
		if age >= 31 && age <= 75 {
			ageStatus = `<span class="age-yes">31-75周岁</span>`
		} else {
			ageStatus = `<span class="age-no">非31-75周岁</span>`
		}

		showPayer := false
		if payType == "集体出资" || payType == "财政出资" {
			showPayer = true
		}

		list = append(list, Result{
			InsuredName: insuredName,
			Money:       money,
			IdCard:      idCardVal,
			AgeStatus:   ageStatus,
			Payer:       payer,
			ShowPayer:   showPayer,
		})
	}
	return list
}
相关推荐
云技纵横2 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
何以解忧,唯有..3 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
BD_Marathon4 天前
SQL学习指南——视图
数据库·sql
2601_962072554 天前
李梦娇常识4600问|题库|打印版
sql·华为od·华为·c#·华为云·.net·harmonyos
踏着七彩祥云的小丑4 天前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
HackTwoHub4 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
JCGKS4 天前
Go `init` 函数:包初始化顺序到底是怎样的
golang·init·init执行顺序
Volunteer Technology4 天前
Flink Table API与SQL(一)
大数据·sql·flink
何以解忧,唯有..4 天前
Go语言中的const:常量声明与iota枚举详解
java·开发语言·golang
持敬chijing4 天前
Web渗透之SQL注入-常用sql语句
sql·安全·web安全·网络安全