business.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package dao
  2. import (
  3. "DataShare/global"
  4. "database/sql"
  5. "fmt"
  6. "github.com/sirupsen/logrus"
  7. )
  8. func GetMaxInt(fieldName string,tableName string,db *sql.DB)(int64,error){
  9. sqlstr := "select MAX(?) from ?"
  10. var maxId int64
  11. err := db.QueryRow(sqlstr,fieldName, tableName).Scan(&maxId)
  12. if err == sql.ErrNoRows {
  13. return 0,nil
  14. }
  15. return maxId,err
  16. }
  17. func GetMaxString(fieldName string,tableName string,db *sql.DB)(string,error){
  18. sqlstr := "select MAX(?) from ?"
  19. var maxStr string
  20. err := db.QueryRow(sqlstr,fieldName,tableName).Scan(&maxStr)
  21. if err == sql.ErrNoRows {
  22. return "",nil
  23. }
  24. return maxStr,err
  25. }
  26. func GetMaxValue(fieldName string,tableName string,db *sql.DB)(string,error){
  27. args := make([]interface{},0)
  28. //sqlstr := "select MAX(?) as maxVal from ?"
  29. //args = append(args,fieldName)
  30. //args = append(args,tableName)
  31. sqlstr := fmt.Sprintf("SELECT MAX(%s) as maxVal FROM %s",fieldName,tableName)
  32. stmt, err := db.Prepare(sqlstr)
  33. if err != nil {
  34. global.SystemLogger.Log(logrus.ErrorLevel,"Prepare(%s) failed, err:%s ",sqlstr,err.Error())
  35. return "", err
  36. }
  37. defer stmt.Close()
  38. var rows *sql.Rows
  39. rows, err = stmt.Query(args...)
  40. if err != nil {
  41. global.SystemLogger.Log(logrus.ErrorLevel,"query sql(%s) ,param(%v) failed, err:%s ",sqlstr,args,err.Error())
  42. return "", err
  43. }
  44. defer rows.Close()
  45. columns, err := rows.Columns()
  46. if err != nil {
  47. global.SystemLogger.Log(logrus.ErrorLevel,"rows.Columns sql(%s) ,param(%v) failed, err:%s ",sqlstr,args,err.Error())
  48. return "", err
  49. }
  50. tableData := make([]map[string]string, 0)
  51. count := len(columns)
  52. values := make([]interface{}, count)
  53. scanArgs := make([]interface{}, count)
  54. for i := range values {
  55. scanArgs[i] = &values[i]
  56. }
  57. for rows.Next() {
  58. err := rows.Scan(scanArgs...)
  59. if err != nil {
  60. global.SystemLogger.Log(logrus.ErrorLevel,"rows.Scan sql(%s) ,param(%v) failed, err:%s ",sqlstr,args,err.Error())
  61. return "", err
  62. }
  63. entry := make(map[string]string)
  64. for i, col := range columns {
  65. v := values[i]
  66. b, ok := v.([]byte)
  67. if (ok) {
  68. entry[col] = string(b)
  69. } else {
  70. //所有都转换成字符串输出
  71. strVal := fmt.Sprintf("%v",v)
  72. entry[col] = strVal
  73. //原类型输出
  74. //entry[col] = v
  75. }
  76. }
  77. tableData = append(tableData, entry)
  78. }
  79. if len(tableData)>0{
  80. return tableData[0]["maxVal"],nil
  81. }
  82. return "", nil
  83. }