का उपयोग कर मैं वर्तमान में Play 2.0 (स्कैला) के साथ खेल रहा हूं। मुझे यह स्वीकार करना होगा कि यह बहुत मजेदार है। मेरे पास एक प्रश्न है हालांकि डेटाबेस ऑपरेशंस अपवाद से संबंधित है।प्ले में डीबी से संबंधित अपवादों का प्रबंधन कैसे करें! 2.0/स्केल एनार्म
चलो कहते हैं कि मैं एक डोमेन वर्ग के रूप में कार है और है कि मैं क्षेत्र में से एक पर एक अखंडता बाधा है, मान लें कि मॉडल ताकि मैं दो (2) पंक्तियों होने नहीं हो सकता DB में जाने दें एक ही मॉडल का नाम: जब मैं इस फोन, अगर मैं पिछले कोड में की तरह अपवाद नहीं पकड़
def create(car: Car): Option[Long] = {
DB.withConnection { implicit connection =>
try {
SQL("insert into cars (name, model) values ({name},{model}").on("name" -> car.name, "model" -> car.model).executeInsert()
} catch {
case e: Exception => {
Logger.debug(e.getMessage())
None
}
}
}
तो:
case class Car(id: Pk[Long], name: String, model: String)
मैं इस तरह डीबी में एक रिकॉर्ड डालने के लिए कोशिश कर रहा हूँ तरीका मॉडल पहले से ही डेटाबेस में मौजूदा एक मूल्य के होने के साथ मेरी नियंत्रक से, मैं निम्नलिखित अपवाद उत्पन्न किया है:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Enzo' for key 'model'
वहाँ के बजाय इतना है कि मैं एक ठीक है MySQLIntegrityConstraintViolationException को पकड़ने के लिए अपवाद एक रास्ता है क्या गलत हो सकता है पर अनाज नियंत्रण और फिर मेरे उपयोगकर्ता को एक संक्षिप्त संक्षिप्त फीड-बैक प्रदान करें उदाहरण के लिए (ब्राउज़र में या मोबाइल डिवाइस पर)?
क्या यह डीबी से संबंधित संचालन और अपवादों को संभालने का सबसे अच्छा तरीका है या क्या कोई भी सर्वोत्तम अभ्यास है जो हर कोई उपयोग करता है? पहले से
धन्यवाद,
मैं इस तरह MySQLIntegrityConstraintViolationException अपवाद को पकड़ने की कोशिश की, लेकिन यह काम नहीं कर रहा: यहाँ Maven pom.xml में mysql dependancy खंड है। शायद क्योंकि MySQLIntegrityConstraintViolationException एक केस क्लास नहीं है और फिर पैटर्न-मिलान के लिए योग्य नहीं है। – kaffein
@ कैफिन गैर-केस कक्षाओं को ठीक से मिलान किया जा सकता है, आप बस उन्हें रद्द नहीं कर सकते हैं, उदा। आप 'केस NonCaseClass (e) => 'केस नहीं कर सकते हैं, क्योंकि उनके पास डिफ़ॉल्ट रूप से एक अनुपयोगी विधि नहीं है। मेरे मामले में समस्या गलत आयात था। मैंने com.mysql.jdbc.exceptions.jdbc4 के बजाय 'com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException' आयात किया। MySQLIntegrityConstraintViolationException' ('jdbc4' पैकेज को नोट करें)। –