قم باستيراد الحزم المطلوبة، ثم قم بإعداد بنية بنفس المخطط كما في مثال جدول tb_student في قاعدة البيانات، سيتم استخدام هذه البنية لاحقًا كحاوية لنتيجة الاستعلام نوع البيانات.
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, }
يجب استيراد برنامج تشغيل قاعدة البيانات المستخدم باستخدام العلامة _، لأنه على الرغم من احتياج حزمة قاعدة البيانات/SQL إليه، إلا أننا لا نتفاعل مباشرة مع برنامج التشغيل.
بعد ذلك، قم بإنشاء دالة للاتصال بقاعدة البيانات.
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 }
نظام سلسلة الاتصال لبرنامج تشغيل mysql الذي نستخدمه فريد تمامًا، root@tcp(127.0.0.1:3306)/db_learn_go أدناه هو نظام سلسلة اتصال يمكن استخدامه أثناء التنقل لبرنامج تشغيل MYSQL، إذا كنت تستخدمه MySQL آخر، قد يكون نظام الاتصال مختلفًا اعتمادًا على برنامج التشغيل المستخدم.
user:password@tcp(host:port)/dbname user@tcp(host:port)/dbname
فيما يلي شرح لسلسلة الاتصال المستخدمة في وظيفة الاتصال ().
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
بعد إنشاء وظيفة الاتصال بقاعدة البيانات، حان الوقت لممارسة عملية قراءة البيانات من خادم قاعدة البيانات. تحضير الدالة
sqlQuery() بالكود التالي.
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) } }
في كل مرة يتم فيها إنشاء اتصال جديد، لا تنس إغلاق مثيل الاتصال دائمًا. يمكنك استخدام الكلمة الأساسية defer كما في الكود أعلاه، defer
db.Close() .
يتم استخدام الدالة db.Query() لتنفيذ استعلامات SQL. المعلمة الثانية للدالة متغيرة، لذا يمكن تركها فارغة. في الكود أعلاه، يمكنك أن ترى أن قيمة إحدى عبارات حيث هي علامة استفهام (؟).
سيتم بعد ذلك استبدال العلامة بالقيمة الموجودة في المعلمة التي تليها (قيمة متغير العمر). يوصى بشدة بهذا النوع من تقنيات كتابة الاستعلام، لمنع حقن SQL. تنتج الدالة مثيلًا من النوع sql.*Rows، والذي يجب أيضًا إغلاقه عند عدم استخدامه (deferrows.Close()). بعد ذلك، يتم إعداد مصفوفة تحتوي على نوع العنصر Student واسمها result . في وقت لاحق سيتم تخزين نتائج الاستعلام في المتغير. ثم يتم تنفيذ حلقة مع مرجع الشرط وهوrows.Next() . يتم تنفيذ هذه الحلقة عدة مرات مثل العدد الإجمالي للسجلات، بالتسلسل من السجل الأول إلى النهاية، واحدًا تلو الآخر. تعمل طريقة Scan() الخاصة بـ sql.Rows على استرداد قيمة السجل الذي يتم تكراره، ليتم تخزينه في متغير مؤشر. تتم كتابة المتغيرات المستخدمة لتخزين حقول السجل بشكل تسلسلي كمعلمات متغيرة، وفقًا للحقول المحددة في الاستعلام. يرجى الاطلاع على المقارنة أدناه لمزيد من التفاصيل. // استفسار
اختر الهوية والاسم والصف ...
// المسح
صفوف.مسح ضوئي (&each.id، &each.name، &each.grade ...
يتم بعد ذلك إلحاق بيانات السجل التي تم الحصول عليها بالشريحة الناتجة عبر العبارة
النتيجة = إلحاق (نتيجة، كل) .
حسنًا، الآن فقط قم باستدعاء الدالة sqlQuery() في main، ثم قم بتشغيل البرنامج.
الوظيفة الرئيسية () {
SQLQuery()
أنا مجرد كاتب مدونة عادي. إذا كان لا يزال هناك الكثير من أوجه القصور، يرجى أن يغفر لي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3