数据库操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

904 lines
20 KiB

3 years ago
3 years ago
3 years ago
  1. package dbquery
  2. import (
  3. "database/sql"
  4. "log"
  5. "strconv"
  6. "errors"
  7. "strings"
  8. "time"
  9. "git.tetele.net/tgo/helper"
  10. _ "github.com/go-sql-driver/mysql"
  11. )
  12. /**
  13. * 创建数据
  14. */
  15. func Insert(dbName, table string, data map[string]string) (int64, error) {
  16. var insertId int64
  17. var err error
  18. if dbName == "" && table == "" {
  19. return insertId, errors.New("没有数据表")
  20. }
  21. dbName = getTableName(dbName, table)
  22. if len(data) < 1 {
  23. return insertId, errors.New("没有要写入的数据")
  24. }
  25. keyList := make([]string, len(data))
  26. keyStr := make([]string, len(data))
  27. valueList := make([]interface{}, len(data))
  28. var i int = 0
  29. for key, value := range data {
  30. keyList[i] = key
  31. keyStr[i] = "?"
  32. valueList[i] = value
  33. i++
  34. }
  35. result, err := DB.Exec("insert into "+dbName+" ("+strings.Join(keyList, ",")+") value("+strings.Join(keyStr, ",")+")", valueList...)
  36. if err != nil {
  37. log.Println("ERROR|插入", dbName, "数据失败,", err)
  38. return insertId, err
  39. } else {
  40. insertId, _ = result.LastInsertId()
  41. time.Sleep(time.Second * 2)
  42. return insertId, nil
  43. }
  44. }
  45. /**
  46. * 修改数据
  47. */
  48. func Update(dbName, table string, data map[string]string, where map[string]string) (int64, error) {
  49. var rowsAffected int64
  50. var err error
  51. if dbName == "" && table == "" {
  52. return rowsAffected, errors.New("没有数据表")
  53. }
  54. dbName = getTableName(dbName, table)
  55. if len(data) < 1 {
  56. return rowsAffected, errors.New("同有更新的数据")
  57. }
  58. if len(where) < 1 {
  59. return rowsAffected, errors.New("没有更新条件")
  60. }
  61. keyList := make([]string, len(data))
  62. valueList := make([]interface{}, len(data), len(data)+len(where))
  63. whereStr := make([]string, len(where))
  64. var i int = 0
  65. empty := false
  66. for key, value := range data {
  67. keyList[i] = key + "=?"
  68. valueList[i] = value
  69. i++
  70. }
  71. i = 0
  72. for key, value := range where {
  73. if value == "" {
  74. empty = true
  75. break
  76. }
  77. whereStr[i] = key + "=?"
  78. valueList = append(valueList, value)
  79. i++
  80. }
  81. if empty {
  82. log.Println("ERROR|修改数据表", dbName, "时条件中有空数据,条件:", where, "数据:", data)
  83. return rowsAffected, errors.New("条件中有空数据")
  84. }
  85. result, err := DB.Exec("update "+dbName+" set "+strings.Join(keyList, " , ")+" where "+strings.Join(whereStr, " and "), valueList...)
  86. if err != nil {
  87. log.Println("ERROR|修改", dbName, "数据失败,", err)
  88. return rowsAffected, err
  89. } else {
  90. rowsAffected, _ = result.RowsAffected()
  91. return rowsAffected, nil
  92. }
  93. }
  94. /**
  95. * 删除数据
  96. * @param count 删除数量
  97. */
  98. func Delete(dbName, table string, data map[string]string, del_count ...string) (int64, error) {
  99. var count int64
  100. var err error
  101. if dbName == "" && table == "" {
  102. return count, errors.New("没有数据表")
  103. }
  104. dbName = getTableName(dbName, table)
  105. if len(data) < 1 {
  106. return count, errors.New("没有要删除的数据")
  107. }
  108. keyList := make([]string, len(data))
  109. valueList := make([]interface{}, len(data))
  110. var i int = 0
  111. empty := false
  112. for key, value := range data {
  113. if value == "" {
  114. empty = true
  115. break
  116. }
  117. keyList[i] = key + "=?"
  118. valueList[i] = value
  119. i++
  120. }
  121. if empty {
  122. log.Println("ERROR|删除数据表", dbName, "时条件中有空数据,条件:", data)
  123. return count, errors.New("条件中有空数据")
  124. }
  125. var limitStr string = ""
  126. if len(del_count) > 0 {
  127. limitStr = " limit " + del_count[0]
  128. }
  129. result, err := DB.Exec("delete from "+dbName+" where "+strings.Join(keyList, " and ")+limitStr, valueList...)
  130. if err != nil {
  131. log.Println("ERROR|删除", dbName, "数据失败,", err)
  132. return count, err
  133. } else {
  134. count, _ = result.RowsAffected()
  135. return count, nil
  136. }
  137. }
  138. /**
  139. * 查找一条记录
  140. * @param dbName 数据表名
  141. * @param title 查询字段名
  142. */
  143. func GetData(dbName, table string, title string, where map[string]string, limit map[string]string) (int, map[string]string, error) {
  144. var count int = 0
  145. info := make(map[string]string)
  146. if dbName == "" && table == "" {
  147. return count, info, errors.New("没有数据表")
  148. }
  149. dbName = getTableName(dbName, table)
  150. if len(title) < 1 {
  151. return count, info, errors.New("没有指定查询内容")
  152. }
  153. var limitStr string = ""
  154. if limit != nil && len(limit) > 0 {
  155. var from string = "0" //开始
  156. if _, ok := limit["order"]; ok {
  157. limitStr += " order by " + limit["order"]
  158. }
  159. if _, ok := limit["from"]; ok {
  160. from = limit["from"]
  161. }
  162. limitStr += " limit " + from + ",1"
  163. } else {
  164. limitStr = " limit 1"
  165. }
  166. if len(where) < 1 {
  167. return count, info, errors.New("Query condition is empty")
  168. }
  169. keyList := make([]string, len(where))
  170. valueList := make([]interface{}, len(where))
  171. var i int = 0
  172. empty := false
  173. for key, value := range where {
  174. if value == "" {
  175. empty = true
  176. break
  177. }
  178. keyList[i] = key + " = ? "
  179. valueList[i] = value
  180. i++
  181. }
  182. if empty {
  183. return count, info, errors.New("Query condition is empty")
  184. }
  185. var rows *sql.Rows
  186. var err error
  187. var queryNum int = 0
  188. for queryNum < 3 { //如发生错误,继续查询3次,防止数据库连接断开问题
  189. rows, err = DB.Query("SELECT "+title+" FROM "+dbName+" where "+strings.Join(keyList, " and ")+" "+limitStr, valueList...)
  190. if err == nil {
  191. break
  192. } else {
  193. log.Println("ERROR", "Query from", dbName, "failed,", err, "| SELECT "+title+" FROM "+dbName+" where "+strings.Join(keyList, " and ")+" "+limitStr)
  194. time.Sleep(time.Millisecond * 500)
  195. }
  196. queryNum++
  197. }
  198. defer rows.Close()
  199. if err != nil {
  200. return count, info, err
  201. }
  202. columns, _ := rows.Columns()
  203. scanArgs := make([]interface{}, len(columns))
  204. values := make([]interface{}, len(columns))
  205. for i := range values {
  206. scanArgs[i] = &values[i]
  207. }
  208. var index string
  209. var rowerr error
  210. for rows.Next() {
  211. rowerr = rows.Scan(scanArgs...)
  212. if rowerr == nil {
  213. for i, col := range values {
  214. if col != nil {
  215. index = helper.StrFirstToUpper(columns[i])
  216. info[index] = helper.ToString(col)
  217. }
  218. }
  219. count++
  220. } else {
  221. log.Println("ERROR", "rows scan error", rowerr, dbName, keyList, valueList)
  222. }
  223. }
  224. if rowerr != nil {
  225. return count, info, rowerr
  226. }
  227. return count, info, nil
  228. }
  229. /**
  230. * 查找一条记录
  231. * @param dbName 数据表名
  232. * @param title 查询字段名
  233. */
  234. func GetRow(dbName, table_name, alias string, titles string, join [][]string, where, where_or []string, valueList []interface{}, orderby string, debug bool) (int, map[string]string, error) {
  235. var count int = 0
  236. info := make(map[string]string)
  237. if dbName == "" && table_name == "" {
  238. return count, info, errors.New("没有数据表")
  239. }
  240. table := getTableName(dbName, table_name)
  241. var sql_str, title string
  242. if titles != "" {
  243. title = titles
  244. } else {
  245. title = "*"
  246. }
  247. sql_str = helper.StringJoin("/*slave*/ select ", title)
  248. if alias != "" {
  249. table = helper.StringJoin(table, " as ", alias)
  250. }
  251. sql_str = helper.StringJoin(sql_str, " from ", table)
  252. if len(join) > 0 {
  253. for _, joinitem := range join {
  254. if len(joinitem) < 2 {
  255. continue
  256. }
  257. if len(joinitem) == 3 {
  258. sql_str = helper.StringJoin(sql_str, " ", joinitem[2], " join ", getTableName(dbName, joinitem[0]), " on ", joinitem[1])
  259. } else { //默认左连接
  260. sql_str = helper.StringJoin(sql_str, " left join ", getTableName(dbName, joinitem[0]), " on ", joinitem[1])
  261. }
  262. }
  263. }
  264. if len(where) > 0 || len(where_or) > 0 {
  265. sql_str = helper.StringJoin(sql_str, " where ")
  266. }
  267. if len(where) > 0 {
  268. sql_str = helper.StringJoin(sql_str, " (", strings.Join(where, " and "), " ) ")
  269. }
  270. if len(where_or) > 0 {
  271. if len(where) > 0 {
  272. sql_str = helper.StringJoin(sql_str, " or ", strings.Join(where_or, " or "))
  273. } else {
  274. sql_str = helper.StringJoin(sql_str, strings.Join(where_or, " or "))
  275. }
  276. }
  277. if orderby != "" {
  278. sql_str = helper.StringJoin(sql_str, " order by ", orderby)
  279. }
  280. if debug {
  281. log.Println("query sql:", sql_str, valueList)
  282. }
  283. condition_len := 0 //所有条件数
  284. for _, ch2 := range sql_str {
  285. if string(ch2) == "?" {
  286. condition_len++
  287. }
  288. }
  289. if condition_len != len(valueList) {
  290. return 0, nil, errors.New("参数错误,条件值错误")
  291. }
  292. var rows *sql.Rows
  293. var err error
  294. var queryNum int = 0
  295. for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题
  296. rows, err = DB.Query(sql_str, valueList...)
  297. if err == nil {
  298. break
  299. } else {
  300. log.Println(err)
  301. time.Sleep(time.Millisecond * 500)
  302. }
  303. queryNum++
  304. }
  305. if err != nil {
  306. rows.Close()
  307. return count, info, err
  308. }
  309. columns, _ := rows.Columns()
  310. scanArgs := make([]interface{}, len(columns))
  311. values := make([]interface{}, len(columns))
  312. for i := range values {
  313. scanArgs[i] = &values[i]
  314. }
  315. var index string
  316. var rowerr error
  317. for rows.Next() {
  318. rowerr = rows.Scan(scanArgs...)
  319. if rowerr == nil {
  320. for i, col := range values {
  321. if col != nil {
  322. index = helper.StrFirstToUpper(columns[i])
  323. info[index] = helper.ToString(col)
  324. }
  325. }
  326. count++
  327. } else {
  328. log.Println("ERROR", rowerr)
  329. }
  330. }
  331. rows.Close()
  332. if rowerr != nil {
  333. return count, info, rowerr
  334. }
  335. return count, info, nil
  336. }
  337. /**
  338. * 查找多条记录
  339. * @param dbName 数据表名
  340. * @param title 查询字段名
  341. */
  342. func FetchRows(dbName, table_name, alias string, titles string, join [][]string, where, where_or []string, valueList []interface{}, orderby string, page int, page_size int, debug bool) (int, []map[string]string, error) {
  343. var count int = 0
  344. list := make([]map[string]string, 0)
  345. if dbName == "" && table_name == "" {
  346. return count, list, errors.New("没有数据表")
  347. }
  348. table := getTableName(dbName, table_name)
  349. var sql_str, title string
  350. if titles != "" {
  351. title = titles
  352. } else {
  353. title = "*"
  354. }
  355. sql_str = helper.StringJoin("/*slave*/ select ", title)
  356. if alias != "" {
  357. table = helper.StringJoin(table, " as ", alias)
  358. }
  359. sql_str = helper.StringJoin(sql_str, " from ", table)
  360. if len(join) > 0 {
  361. for _, joinitem := range join {
  362. if len(joinitem) < 2 {
  363. continue
  364. }
  365. if len(joinitem) == 3 {
  366. sql_str = helper.StringJoin(sql_str, " ", joinitem[2], " join ", getTableName(dbName, joinitem[0]), " on ", joinitem[1])
  367. } else { //默认左连接
  368. sql_str = helper.StringJoin(sql_str, " left join ", getTableName(dbName, joinitem[0]), " on ", joinitem[1])
  369. }
  370. }
  371. }
  372. if len(where) > 0 || len(where_or) > 0 {
  373. sql_str = helper.StringJoin(sql_str, " where ")
  374. }
  375. if len(where) > 0 {
  376. sql_str = helper.StringJoin(sql_str, " (", strings.Join(where, " and "), " ) ")
  377. }
  378. if len(where_or) > 0 {
  379. if len(where) > 0 {
  380. sql_str = helper.StringJoin(sql_str, " or ", strings.Join(where_or, " or "))
  381. } else {
  382. sql_str = helper.StringJoin(sql_str, strings.Join(where_or, " or "))
  383. }
  384. }
  385. if orderby != "" {
  386. sql_str = helper.StringJoin(sql_str, " order by ", orderby)
  387. }
  388. if page > 0 || page_size > 0 {
  389. if page < 1 {
  390. page = 1
  391. }
  392. if page_size < 1 {
  393. page_size = 10
  394. }
  395. from := strconv.Itoa((page - 1) * page_size)
  396. offset := strconv.Itoa(page_size)
  397. if from != "" && offset != "" {
  398. sql_str = helper.StringJoin(sql_str, " limit ", from, " , ", offset)
  399. }
  400. }
  401. if debug {
  402. log.Println("query sql:", sql_str, valueList)
  403. }
  404. condition_len := 0 //所有条件数
  405. for _, ch2 := range sql_str {
  406. if string(ch2) == "?" {
  407. condition_len++
  408. }
  409. }
  410. if condition_len != len(valueList) {
  411. return 0, list, errors.New("参数错误,条件值错误")
  412. }
  413. var rows *sql.Rows
  414. var err error
  415. var queryNum int = 0
  416. for queryNum < 2 { //如发生错误,继续查询2次,防止数据库连接断开问题
  417. rows, err = DB.Query(sql_str, valueList...)
  418. if err == nil {
  419. break
  420. } else {
  421. log.Println(err)
  422. time.Sleep(time.Millisecond * 500)
  423. }
  424. queryNum++
  425. }
  426. if err != nil {
  427. rows.Close()
  428. return 0, list, err
  429. }
  430. columns, _ := rows.Columns()
  431. scanArgs := make([]interface{}, len(columns))
  432. values := make([]interface{}, len(columns))
  433. for i := range values {
  434. scanArgs[i] = &values[i]
  435. }
  436. var index string
  437. var rowerr error
  438. var info map[string]string
  439. for rows.Next() {
  440. rowerr = rows.Scan(scanArgs...)
  441. info = make(map[string]string)
  442. if rowerr == nil {
  443. for i, col := range values {
  444. if col != nil {
  445. index = helper.StrFirstToUpper(columns[i])
  446. info[index] = helper.ToString(col)
  447. }
  448. }
  449. count++
  450. } else {
  451. log.Println("ERROR", rowerr)
  452. }
  453. if len(info) > 0 {
  454. list = append(list, info)
  455. }
  456. }
  457. rows.Close()
  458. return count, list, nil
  459. }
  460. func GetInfo(dbName, table string, title string, where map[string]string) (map[string]string, error) {
  461. count, info, gzErr := GetData(dbName, table, title, where, nil)
  462. if gzErr != nil {
  463. return info, gzErr
  464. } else {
  465. if count < 1 {
  466. return info, errors.New("No data")
  467. }
  468. return info, nil
  469. }
  470. }
  471. /**
  472. * 查询列表
  473. * 2018/04/19
  474. */
  475. func GetList(dbName, table string, title string, where map[string]string, limit map[string]string) ([]map[string]string, error) {
  476. var list []map[string]string
  477. if dbName == "" && table == "" {
  478. return list, errors.New("没有数据表")
  479. }
  480. dbName = getTableName(dbName, table)
  481. var rows *sql.Rows
  482. var err error
  483. var queryNum int = 0
  484. var limitStr string = ""
  485. if len(limit) > 0 {
  486. var offset string = "0" //偏移量,个数
  487. var from string = "" //开始
  488. if _, ok := limit["order"]; ok {
  489. limitStr += " order by " + limit["order"]
  490. }
  491. if _, ok := limit["offset"]; ok {
  492. offset = limit["offset"]
  493. }
  494. if _, ok := limit["from"]; ok {
  495. from = limit["from"]
  496. }
  497. if offset != "0" && from != "" {
  498. limitStr += " limit " + from + "," + offset
  499. }
  500. }
  501. if len(where) > 0 {
  502. valueList := make([]interface{}, len(where))
  503. whereStr := make([]string, len(where))
  504. i := 0
  505. var keys []string
  506. for key, value := range where {
  507. key = strings.Trim(key, " ")
  508. value = strings.Trim(value, " ")
  509. if value == "" || key == "" {
  510. continue
  511. // return list, errors.New("Query condition is empty")
  512. }
  513. if strings.Contains(key, " ") {
  514. //key中包含空格,判断是否不等于条件
  515. keys = strings.Split(key, " ")
  516. if helper.IsInStringArray(judg(), strings.Trim(keys[1], " ")) {
  517. whereStr[i] = strings.Trim(keys[0], " ") + " " + strings.Trim(keys[1], " ") + " ?"
  518. }
  519. } else {
  520. whereStr[i] = key + " = ?"
  521. valueList[i] = value
  522. }
  523. i++
  524. }
  525. if len(whereStr) == 0 || len(valueList) == 0 {
  526. return list, errors.New("Query condition is empty")
  527. }
  528. for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
  529. rows, err = DB.Query("select "+title+" from "+dbName+" where "+strings.Join(whereStr, " and ")+" "+limitStr, valueList...)
  530. if err == nil {
  531. break
  532. } else {
  533. time.Sleep(time.Millisecond * 500)
  534. }
  535. queryNum++
  536. }
  537. } else {
  538. for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
  539. rows, err = DB.Query("select " + title + " from " + dbName + " " + limitStr)
  540. if err == nil {
  541. break
  542. } else {
  543. time.Sleep(time.Millisecond * 500)
  544. }
  545. queryNum++
  546. }
  547. }
  548. if err != nil {
  549. return list, err
  550. }
  551. defer rows.Close()
  552. columns, _ := rows.Columns()
  553. scanArgs := make([]interface{}, len(columns))
  554. values := make([]interface{}, len(columns))
  555. for i := range values {
  556. scanArgs[i] = &values[i]
  557. }
  558. var record map[string]string
  559. var index string
  560. for rows.Next() {
  561. //将行数据保存到record字典
  562. err = rows.Scan(scanArgs...)
  563. record = make(map[string]string)
  564. for i, col := range values {
  565. if col != nil {
  566. index = helper.StrFirstToUpper(columns[i])
  567. record[index] = helper.ToString(col)
  568. }
  569. }
  570. list = append(list, record)
  571. }
  572. return list, nil
  573. }
  574. /**
  575. * 查询总数
  576. * 2018/04/19
  577. */
  578. func GetTotal(dbName, table string, args ...string) (total int) {
  579. if dbName == "" && table == "" {
  580. return
  581. }
  582. dbName = getTableName(dbName, table)
  583. var title string = "*"
  584. if len(args) > 0 {
  585. title = args[0]
  586. }
  587. var rows *sql.Rows
  588. var err error
  589. var queryNum int = 0
  590. for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
  591. rows, err = DB.Query("select count(" + title + ") as count from " + dbName + " limit 1")
  592. if err == nil {
  593. break
  594. } else {
  595. time.Sleep(time.Millisecond * 500)
  596. }
  597. queryNum++
  598. }
  599. if err != nil {
  600. log.Println("ERROR|get", dbName, "total error", err)
  601. return
  602. }
  603. defer rows.Close()
  604. var count int
  605. for rows.Next() {
  606. //将行数据保存到record字典
  607. err = rows.Scan(&count)
  608. if err != nil {
  609. log.Println("ERROR|get", dbName, "total error", err)
  610. } else {
  611. total = count
  612. }
  613. }
  614. return
  615. }
  616. /**
  617. * 查询总数
  618. * 2020/06/04
  619. */
  620. func GetCount(dbName, table string, where map[string]string, args ...string) (total int) {
  621. if dbName == "" && table == "" {
  622. return
  623. }
  624. dbName = getTableName(dbName, table)
  625. var title string = "*"
  626. if len(title) > 0 {
  627. title = args[0]
  628. }
  629. var rows *sql.Rows
  630. var err error
  631. var queryNum int = 0
  632. if len(where) > 0 {
  633. valueList := make([]interface{}, len(where))
  634. whereStr := make([]string, len(where))
  635. i := 0
  636. var keys []string
  637. for key, value := range where {
  638. key = strings.Trim(key, " ")
  639. value = strings.Trim(value, " ")
  640. if value == "" || key == "" {
  641. continue
  642. // return list, errors.New("Query condition is empty")
  643. }
  644. if strings.Contains(key, " ") {
  645. //key中包含空格,判断是否不等于条件
  646. keys = strings.Split(key, " ")
  647. if helper.IsInStringArray(judg(), strings.Trim(keys[1], " ")) {
  648. whereStr[i] = strings.Trim(keys[0], " ") + " " + strings.Trim(keys[1], " ") + " ?"
  649. }
  650. } else {
  651. whereStr[i] = key + " = ?"
  652. valueList[i] = value
  653. }
  654. i++
  655. }
  656. for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
  657. rows, err = DB.Query("select count("+title+") as count from "+dbName+" where "+strings.Join(whereStr, " and ")+" limit 1", valueList...)
  658. if err == nil {
  659. break
  660. } else {
  661. time.Sleep(time.Millisecond * 500)
  662. }
  663. queryNum++
  664. }
  665. } else {
  666. for queryNum < 5 { //如发生错误,继续查询5次,防止数据库连接断开问题
  667. rows, err = DB.Query("select count(" + title + ") as count from " + dbName + " limit 1")
  668. if err == nil {
  669. break
  670. } else {
  671. time.Sleep(time.Millisecond * 500)
  672. }
  673. queryNum++
  674. }
  675. }
  676. if err != nil {
  677. log.Println("ERROR|get", dbName, "count error", err)
  678. return
  679. }
  680. defer rows.Close()
  681. var count int
  682. for rows.Next() {
  683. //将行数据保存到record字典
  684. err = rows.Scan(&count)
  685. if err != nil {
  686. log.Println("ERROR|get", dbName, "count error", err)
  687. } else {
  688. total = count
  689. }
  690. }
  691. return
  692. }
  693. func DoQuery(args ...interface{}) ([]map[string]string, error) {
  694. var list []map[string]string
  695. if len(args) < 1 {
  696. return list, errors.New("Query condition is empty")
  697. }
  698. queryStr := helper.ToString(args[0])
  699. if queryStr == "" {
  700. return list, errors.New("Query condition is empty")
  701. }
  702. var rows *sql.Rows
  703. var err error
  704. var queryNum int = 0
  705. for queryNum < 3 { //如发生错误,继续查询5次,防止数据库连接断开问题
  706. if len(args) > 1 {
  707. rows, err = DB.Query(queryStr, args[1:]...) //strings.Join(args[1:], ",")
  708. if err != nil {
  709. log.Println("ERROR|DoQuery error:", err)
  710. }
  711. } else {
  712. rows, err = DB.Query(queryStr)
  713. if err != nil {
  714. log.Println("ERROR|DoQuery error:", err)
  715. }
  716. }
  717. if err == nil {
  718. break
  719. } else {
  720. time.Sleep(time.Millisecond * 500)
  721. }
  722. queryNum++
  723. }
  724. if err != nil {
  725. return list, err
  726. }
  727. defer rows.Close()
  728. columns, _ := rows.Columns()
  729. scanArgs := make([]interface{}, len(columns))
  730. values := make([]interface{}, len(columns))
  731. for i := range values {
  732. scanArgs[i] = &values[i]
  733. }
  734. var record map[string]string
  735. var index string
  736. for rows.Next() {
  737. //将行数据保存到record字典
  738. err = rows.Scan(scanArgs...)
  739. record = make(map[string]string)
  740. for i, col := range values {
  741. if col != nil {
  742. index = helper.StrFirstToUpper(columns[i])
  743. record[index] = helper.ToString(col)
  744. }
  745. }
  746. list = append(list, record)
  747. }
  748. return list, nil
  749. }