I am making SQL queries, using tryCatch() to prevent R from silently using up all the slots for database connections. It looks like this:
sql <- "SELECT * FROM addresses WHERE zipcode=10202"
con <- dbConnect(PostgreSQL(), user='user', password='pswd',
dbname='contacts',host='dbserv')
tryCatch( {
rs <- dbSendQuery(con, statement=sql)
fp <- fetch(rs,n=-1) # Fetch all
dbClearResult(rs)
fp},
finally=dbDisconnect(con))
fp
Does R provide anything cleaner for the purpose? I'm thinking of how readLines() works with a string argument to make sure no file connection is left open.
You might try on.exit, something like the following:
foo <- function() {
con <- dbConnect(
PostgreSQL(),
user=config$db.user,
password=config$db.password,
dbname=config$db.name,
host=config$db.host
)
on.exit({
dbDisconnect(con)
})
## ... do something w/ connection
}
When the function foo is about to return (or exit due to an exception), the expression passed to on.exit will be evaluated.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With