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
}
相关推荐
PawSQL2 小时前
同一条SQL,单机秒回,分布式集群卡成PPT——问题究竟出在哪?
数据库·分布式·sql
万事大吉CC2 小时前
【6】深入剖析 Django 之 MTV:数据渲染、请求处理与类视图
python·django·sqlite
尚雷55803 小时前
oracle知识整理_锁及等待事件SQL_第二部分
数据库·sql·oracle·锁及等待事件
百锦再15 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
冬天vs不冷19 小时前
面试必知必会(14):MySQL执行计划与SQL优化
sql·mysql·面试
sweetheart7-721 小时前
go/golang 入门学习笔记(Java/Python/C++转Go快速上手)
笔记·学习·golang·go语言
万事大吉CC1 天前
【4】深入剖析 Django 之 MTV:ORM 系统核心原理
数据库·python·oracle·django·sqlite
bucenggaibian1 天前
C语言超级全面的学习平台
c语言·sqlite·easylogger·pat练习·tencentos-tiny
lifewange1 天前
afinfo 表设计
数据库·sql·mysql