Bagaimana untuk mendapatkan butiran ralat sisipan SQL dilakukan dalam Go?

WBOY
Lepaskan: 2024-02-09 13:27:21
ke hadapan
1188 orang telah melayarinya

如何获取在 Go 中完成的 SQL 插入的错误详细信息?

editor php Yuzai kadangkala menghadapi ralat semasa menggunakan bahasa Go untuk sisipan SQL. Dalam kes ini, mengetahui butiran ralat adalah penting untuk mencari dan menyelesaikan masalah. Nasib baik, bahasa Go menyediakan cara mudah untuk mendapatkan butiran ralat sisipan SQL. Dengan menggunakan kaedah Stmt.Exec dalam pakej pangkalan data/sql, kita boleh mendapatkan objek ralat apabila ralat berlaku. Kemudian, kita boleh menggunakan kaedah Ralat antara muka ralat untuk mendapatkan butiran ralat. Kaedah ini boleh mengembalikan rentetan yang mengandungi penerangan khusus tentang ralat, membolehkan kami memahami dan menyelesaikan masalah dengan lebih baik.

Kandungan soalan

Saya cuba memasukkan beberapa data ke dalam pangkalan data menggunakan go. Oleh kerana sifat data (eksport besar dari alat lain) saya kadang-kadang menghadapi beberapa batasan model.

Gunakan kod go berikut

_, err := db.exec(query, params...)
if err != nil {
    log.print(err)
}
Salin selepas log masuk

Saya baru dapat output seperti ini

2023/03/10 09:40:26 pq: insert or update on table "table" violates foreign key constraint "table_constraint"
exit status 1
Salin selepas log masuk

Apabila saya melakukan sisipan yang sama dari pgadmin, saya mendapat ralat yang sama, tetapi juga beberapa maklumat terperinci.

DETAIL:  Key (id)=(abc) is not present in table "table_2".
Salin selepas log masuk

Adakah terdapat cara untuk mendapatkan maklumat detail ini? Saya menyemak dokumentasi tetapi tidak menemui apa-apa, tetapi mungkin ada caranya?

Penyelesaian

Biasanya, pemacu pangkalan data yang anda gunakan akan mempunyai jenis ralat tersuai. Anda boleh menukar medan err 值断言为此错误类型,然后根据驱动程序的实现,您应该能够收集有关该问题的更多详细信息。例如,当使用 github.com/lib/pq 时,可以断言 *pq.error 并阅读其 detail kepada:

_, err := db.Exec(query, params...)
if err != nil {
    if e, ok := err.(*pq.Error); ok {
        log.Print(e.Detail)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan butiran ralat sisipan SQL dilakukan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!