---
title: "unclosed-sql-resource"
description: "Detect locally acquired sql.Rows and sql.Stmt values that are not closed."
image: "https://strider.gempir.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://strider.gempir.com/llms.txt
> Use this file to discover all available pages before exploring further.

# unclosed-sql-resource

**Default severity:** `error`

Reports local `*sql.Rows` and `*sql.Stmt` acquisitions without a later close or
obvious ownership transfer. Check acquisition errors before deferring `Close`.

## Bad

```go
rows, err := db.Query(query)
if err != nil {
	return err
}
return scan(rows)
```

## Good

```go
rows, err := db.Query(query)
if err != nil {
	return err
}
defer rows.Close()
return scan(rows)
```

Source: https://strider.gempir.com/analyzers/unclosed-sql-resource/index.mdx
