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
}
相关推荐
Decay__2 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
北冥you鱼7 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
xn71337 小时前
本地 AI 知识库跨设备同步:SQLite FTS5、Embedding、Tombstone 和引用校验
人工智能·sqlite·ai编程
吃一碗粉只付一碗钱7 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
sun03228 小时前
【JDK 动态代理】 和 【CGLIB 代理】对比
java·数据库·sql
l1t10 小时前
DeepSeek总结的AI 智能体应该用哪种语言搜索其记忆:SQL 还是 SPARQL?
数据库·人工智能·sql
利威尔xu10 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
microrain10 小时前
SagooIoT 把协议解析和消息通知都放进了独立进程
物联网·golang·插件·sagooiot
北冥you鱼11 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
geovindu11 小时前
SQL Data Sampling and Approximation Techniques using postgreSQL 18
大数据·数据库·数据仓库·sql·postgresql·数据库开发·数据库架构