2015-01-20 3 views
1

일부 데이터를 데이터베이스에 삽입하기 위해 사용자 입력으로부터 SQL 쿼리를 생성하고 싶습니다.SQL 쿼리에서 사용하기 위해 QString을 변환하십시오.

사용자가 입력 할 수 있습니다. Qt에서 문자열 입력 값 필드에서 이러한 사용자 입력을 변환 할 수있는 방법이 있습니까?

+0

QString에서 쿼리를 생성하는'QSqlQuery query (QString)'는 어떤 라인 편집기에서 문자열을 가져 왔을 때 가질 것입니다. 이게 도움이 되니? – AngryDuck

+0

@AngryDuck : 문자열에 따옴표와 같은 예약 된 문자가 있으면 아니오, 작동하지 않습니다. bindValue를 사용하는 것이 해결책이었습니다. 이 잘 작동합니다 : 'query.bindValue (": TextData", QString ("Test'단일 마크 및 더블 마크 \" ")) ', –

답변

4

"사용자가 아무거나 입력 할 수 있습니다."

그렇다고해서 우리에게 많은 것을주지는 않지만 기본 삽입 쿼리를 설정하는 방법을 보여줄 수 있습니다.

// I assume you already have a QSqlDatabase object called 'db' 
QSqlQuery query(db); 
QString s = "INSERT INTO table (colA, colB) VALUES (:valA, :valB);" 
query.prepare(s); 
// You only need to prepare the query once 
// To actually insert values into colA & colB, do this: 
query.bindValue(":valA", QString("stuff to put in colA")); 
query.bindValue(":valB", QString("other stuff for colB")); 
query.exec(); 
query.finish(); // you probably don't even need this 

bindValue 방법은 두 번째 인수로 QVariant 소요 (내 예제에서 문자열을 사용하지만 변형 유형에서 지원 아무것도 사용할 수 있습니다). 데이터베이스의 관련 열에 값 형식이 맞는지 확인해야합니다.

또한 필자는 PostgreSQL의 구문을 사용하고 있습니다. 표준이라고 생각하지만 db 엔진이 예상하는 것과 일치하도록 매개 변수 바인딩 (:valA:valB)을 변경해야 할 수도 있습니다.

+0

괜찮습니까 bindValue 예약 (SQL 구문에 의해) 문자 그때? 시도해 볼게. –

+0

입력 문자열에 작은 따옴표가 있으면 SQL 문자열 구분 기호이므로 문제가있을 수 있습니다. 나는 그것을 시도하지 않았다. –

+1

+1 : 예, 그게 전부입니다! 나는 종종 .arg()를 사용하여 쿼리 문자열을 구성하는 것 이상의 bindValue의 이점에 대해 질문을 자주 제기했습니다. 이제 나는 그것을 얻었습니다. bindValue는 예약 된 문자를 올바로 대체하고 SQL에 적절한 유형의 값을 보장합니다 (예 : 문자열에 ""추가). BTW. bindValue와 함께 작은 따옴표를 사용하면 큰 효과가 있습니다. –

관련 문제