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
}
相关推荐
名字还没想好☜34 分钟前
Go 表驱动测试实战:用 t.Run 子测试组织可维护的单元测试
golang·单元测试·log4j·go·testing
golang学习记1 小时前
Claude Code写哪种变成语言最快?
golang·claude code
ShuiShenHuoLe2 小时前
Go html/template 使用入门
开发语言·golang·html
xqqxqxxq2 小时前
SQL 字段约束笔记
android·笔记·sql
花青泽6 小时前
5-数据库-SQL注入-联合查询-关键字绕过-day13
数据库·sql
笨鸟先飞,勤能补拙12 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
Achou.Wang13 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
龙仔72513 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
名字还没想好☜17 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
ttwuai18 小时前
GoFrame 后台日志清空失败:无 WHERE 删除为什么被拦住
前端·golang