Как сохранить тип ввода даты и времени из HTML-формы в базу данных sqlite3 - PullRequest
0 голосов
/ 07 апреля 2019

Я настраиваю функцию reminder в приложении личного помощника. Приложение принимает детали напоминания в виде HTML-формы, которая также включает поля ввода date и time.

Я использую golang для создания своего сервера и создал базу данных sqlite, используя его. Но значение даты и времени из формы не сохраняется в БД, а другие поля, такие как заголовок, описание и т. Д., Сохраняются. Какой тип данных я должен использовать для своих полей времени и даты в БД sqlite?

Я пытался использовать TEXT в качестве типа данных для даты и времени, но он не работает.

Форма ввода:

   ...
<div class="form-group">
   <label for="date">Date</label>
   <input type="date" class="form-control" id="date" data-ng-model="formData.remDate" required>
</div>

<div class="form-group">
   <label for="time">Time</label>
   <input type="time" class="form-control" id="time" data-ng-model="formData.remTime" required>
</div>
   ...

Это reminder object, который генерируется из формы:

{title: "learn golang", description: "How do I save date and time in database?", date: Mon Apr 08 2019 00:00:00 GMT+0530 (India Standard Time), time: Thu Jan 01 1970 20:00:00 GMT+0530 (India Standard Time)}

Файл Golang для создания и хранения в БД:

package controllers

import (
    "net/http"
    "database/sql"
    "fmt"
    "strconv"

    _ "github.com/mattn/go-sqlite3"
)

type reminder struct {
    id int
    title string
    description string
    date string
    time string
}

func ReminderController(w http.ResponseWriter, r *http.Request) {

    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    r.ParseForm()

    request := reminder{
        title: r.FormValue("title"),
        description: r.FormValue("description"),
        date: r.FormValue("date"),
        time: r.FormValue("time"),
    }
    fmt.Println(request)

    AddReminder(request, w)

}

func prepareDB() {
    database, err := sql.Open("sqlite3", "./jarvis.db")
    checkErr(err)

    statement, err := database.Prepare("CREATE TABLE IF NOT EXISTS reminder (id INTEGER PRIMARY KEY, title TEXT, description TEXT, date TEXT, time TEXT")
    checkErr(err)

    statement.Exec()
}

func AddReminder(reminderObject reminder,  res http.ResponseWriter) {
    prepareDB()

    database, err := sql.Open("sqlite3", "./jarvis.db")
    checkErr(err)

    statement, err := database.Prepare("INSERT INTO reminder (title, description, date, time) VALUES (?,?,?,?) ")
    checkErr(err)
    fmt.Println(reminderObject.title)
    statement.Exec(reminderObject.title, reminderObject.description, reminderObject.date, reminderObject.time)

    ShowReminder()

    res.Write([]byte(`{"status": "success", "message": "Reminder has been set !"}`))
}

func ShowReminder() {
    prepareDB()

    database, err := sql.Open("sqlite3", "./jarvis.db")
    checkErr(err)

    rows, err := database.Query("SELECT id, title, description, date, time FROM reminder")
    checkErr(err)

    var id int
    var title string
    var description string
    var date string
    var time string

    for rows.Next() {
        rows.Scan(&id, &title, &description, &date, &time)
        fmt.Println(strconv.Itoa(id) + ": " + title + " " + description + "\nEnd Time : " + date + ":" + time)
    }
}

func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

Выходные данные, генерируемые в консоли Go:

3: learn golang How do I save date and time in database?
End Time : :

1 Ответ

0 голосов
/ 07 апреля 2019

Используйте тип Integer в таблице sqlite, и ваше свойство времени в структуре напоминания должно измениться на time.Time

type reminder struct {
    id int
    title string
    description string
    date string
    time time.Time
}

Для того, чтобы преобразовать строки даты и времени формы во время. В формате времени вы должны разобрать строки следующим образом:

layout := "2006-01-02T15:04:05.000Z"
str := fmt.Sprintf("%sT%sZ", r.FormValue("date") , r.FormValue("time"))
t, err := time.Parse(layout, str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...