2012-09-21 3 views
3

tryCatch()을 사용하여 SQL 쿼리를 작성하여 R이 데이터베이스 연결을 위해 모든 슬롯을 자동으로 사용하지 못하도록합니다. 다음과 같이 보입니다 :R은 tryCatch()보다 깨끗한 것을 제공하여 SQL 쿼리를 안전하게 만드나요?

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 

R은 목적을 위해 더 깨끗한 것을 제공합니까? readLines()가 문자열 인수로 어떻게 작동하여 파일 연결이 열려 있는지 확인하고 있습니다.

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 

    } 

기능 foo가 (예외로 인해 또는 종료) 반환하는 것입니다, on.exit에 전달 된 표현식이 평가됩니다

답변

3

당신은 다음과 같은 on.exit, 뭔가를 시도 할 수 있습니다.

+0

나는 그것을 많이 좋아한다. 나는'on.exit'에 대해 몰랐다. 하나의 정말 좋은 점은 파일이나 데이터베이스 연결 객체가 열릴 때마다'add = TRUE' 인수를 사용할 수 있다는 것입니다. –

관련 문제