importe los paquetes requeridos, luego prepare una estructura con el mismo esquema que en el ejemplo de la tabla tb_student en la base de datos, luego esta estructura se usará como contenedor para el resultado de la consulta tipo de datos.
package main import "fmt" import "database/sql" import _ "github.com/go-sql-driver/mysql" type student struct { id string, name string, age int, grade int, }
El controlador de base de datos utilizado debe importarse usando el signo _, porque aunque es necesario para el paquete de base de datos/sql, no interactuamos directamente con el controlador.
A continuación, cree una función para conectarse a la base de datos.
func connect() (*sql.DB, error) { db, err := sql.Open("mysql","root:@tcp(127.0.0.1:3306)/db_learn_go") if err != nil { return nil, err } return db, nil }
El esquema de cadena de conexión para el controlador mysql que usamos es bastante exclusivo, root@tcp(127.0.0.1:3306)/db_learn_go a continuación es un esquema de cadena de conexión que se puede usar sobre la marcha. Controlador del controlador MYSQL, si usa otro mysql, el esquema de conexión puede ser diferente según el controlador utilizado.
user:password@tcp(host:port)/dbname user@tcp(host:port)/dbname
A continuación se muestra una explicación de la cadena de conexión utilizada en la función connect().
root@tcp(127.0.0.1:3306)/db_learn_go // user => root // password => // host => 127.0.0.1 atau localhost // port => 3306 // dbname => db_learn_go
Una vez creada la función de conectividad con la base de datos, es hora de practicar el proceso de lectura de datos del servidor de la base de datos. Preparar la función
sqlQuery() con el siguiente código.
func sqlQuery() { db, err := connect() if err != nil { fmt.Println(err.Error()) return } defer db.Close() var age = 27 rows, err := db.Query("select id, name, grade from tb_student where age = ? if err != nil { fmt.Println(err.Error()) return } defer rows.Close() var result []student for rows.Next() { var each = student{} var err = rows.Scan(&each.id, &each.name, &each.grade) if err != nil { fmt.Println(err.Error()) return } result = append(result, each) } if err = rows.Err(); err != nil { fmt.Println(err.Error()) return } for _, each := range result { fmt.Println(each.name) } }
Cada vez que se crea una nueva conexión, no olvide cerrar siempre la instancia de conexión. Puede utilizar la palabra clave aplazar como en el código anterior, aplazar
db.Cerrar() .
La función db.Query() se utiliza para ejecutar consultas SQL. El segundo parámetro de la función es variado, por lo que se puede dejar en blanco. En el código anterior, puedes ver que el valor de una de las cláusulas donde es un signo de interrogación (?).
El signo será reemplazado por el valor en el parámetro posterior (el valor de la variable edad). Este tipo de técnica de redacción de consultas es muy recomendable para evitar la inyección de SQL. La función produce una instancia de tipo sql.*Rows , que también debe cerrarse cuando ya no se utiliza (defer rows.Close() ). A continuación se prepara una matriz con el elemento tipo struct Student con el nombre resultado. Posteriormente, los resultados de la consulta se almacenarán en la variable. Luego se realiza un bucle con la referencia de condición rows.Next() . Este bucle se realiza tantas veces como el número total de registros, de forma secuencial desde el primer registro hasta el final, uno por uno. El método Scan() de sql.Rows funciona para recuperar el valor del registro que se está iterando, para almacenarlo en una variable de puntero. Las variables utilizadas para almacenar los campos del registro se escriben secuencialmente como parámetros variables, según los campos seleccionados en la consulta. Consulte la comparación a continuación para obtener más detalles. // consulta
seleccione id, nombre, grado...
// escanear
filas.Escanear(&cada.id, &cada.nombre, &cada.calificación...
Los datos del registro obtenidos luego se agregan al segmento de resultados, mediante la declaración
resultado = agregar(resultado, cada uno) .
Bien, ahora simplemente llame a la función sqlQuery() en main y luego ejecute el programa.
función principal() {
consultasql()
}
Soy simplemente un escritor de blogs común y corriente. Si todavía hay demasiadas deficiencias, perdóneme.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3