आवश्यक पैकेज आयात करें, फिर डेटाबेस में 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, }
उपयोग किए गए डेटाबेस ड्राइवर को _ चिह्न का उपयोग करके आयात करने की आवश्यकता है, क्योंकि डेटाबेस/एसक्यूएल पैकेज के लिए इसकी आवश्यकता होने के बावजूद, हम सीधे ड्राइवर के साथ बातचीत नहीं करते हैं।
इसके बाद, डेटाबेस से कनेक्ट करने के लिए एक फ़ंक्शन बनाएं।
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.बंद करें() .
db.Query() फ़ंक्शन का उपयोग sql क्वेरीज़ को निष्पादित करने के लिए किया जाता है। फ़ंक्शन का दूसरा पैरामीटर विविध है, इसलिए इसे खाली छोड़ा जा सकता है। उपरोक्त कोड में, आप देख सकते हैं कि जहाँ उपवाक्य में से एक का मान एक प्रश्न चिह्न (?) है।
इसके बाद चिह्न को पैरामीटर में मान (आयु चर का मान) से बदल दिया जाएगा। एसक्यूएल इंजेक्शन को रोकने के लिए इस प्रकार की क्वेरी लेखन तकनीक की अत्यधिक अनुशंसा की जाती है। फ़ंक्शन sql.*Rows प्रकार का एक उदाहरण उत्पन्न करता है, जिसे तब बंद करने की भी आवश्यकता होती है जब इसका उपयोग नहीं किया जाता है (defer rows.Close() )। इसके बाद, परिणाम नाम के साथ तत्व प्रकार struct छात्र के साथ एक सरणी तैयार की जाती है। बाद में क्वेरी परिणाम वेरिएबल में संग्रहीत किए जाएंगे। फिर शर्त संदर्भ rows.Next() के साथ एक लूप निष्पादित किया जाता है। यह लूप पहले रिकॉर्ड से अंत तक क्रमिक रूप से, एक-एक करके, रिकॉर्ड की कुल संख्या जितनी बार निष्पादित किया जाता है। sql.Rows की स्कैन() विधि उस रिकॉर्ड के मान को पुनः प्राप्त करने के लिए कार्य करती है जिसे पॉइंटर वेरिएबल में संग्रहीत किया जा रहा है। रिकॉर्ड फ़ील्ड को संग्रहीत करने के लिए उपयोग किए जाने वाले वेरिएबल को क्वेरी में चयनित फ़ील्ड के अनुसार क्रमिक रूप से विविध पैरामीटर के रूप में लिखा जाता है। कृपया अधिक विवरण के लिए नीचे तुलना देखें। // सवाल
आईडी, नाम, ग्रेड चुनें...
// स्कैन करें
rows.Scan(&each.id, &each.name, &each.grade ...
प्राप्त रिकॉर्ड डेटा को कथन के माध्यम से परिणाम स्लाइस में जोड़ा जाता है
परिणाम = संलग्न करें (परिणाम, प्रत्येक) .
ठीक है, अब बस sqlQuery() फ़ंक्शन को main में कॉल करें, फिर प्रोग्राम चलाएँ।
func मुख्य() {
sqlQuery()
}
मैं सिर्फ एक साधारण ब्लॉग लेखक हूं। यदि अभी भी बहुत सी कमियाँ हैं तो कृपया मुझे क्षमा करें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3