2017-10-29 10 views
0

sqlite3 삽입 값으로 자바 스크립트 개체를 사용하는 가장 쉬운 솔루션은 무엇입니까? 다음 코드는 작동하지 않습니다.sqlite3 - 값으로 자바 스크립트 개체 삽입

const values = { 
    name: 'John', 
    age: 34, 
    language: 'english' 
}; 

db.run('INSERT INTO tablename VALUES (?)', values, (err) => { 
    if (err) { 
    console.log(err); 
    } else { 
    console.log('success'); 
    } 
}); 

답변

1

우선 SQL을 올바르게 작성해야합니다.

INSERT INTO tablename (name, age, language) VALUES (?, ?, ?) 

을 그리고 매개 변수로 3 열의 값을 전달 : 는이 같은 SQL을 작성해야 열 name, age, language으로 삽입합니다.

db.run('INSERT INTO tablename (name, age, language) VALUES (?, ?, ?)', [values['name'], values['age'], values['language']]), (err) => { ... }); 

또는 자바 스크립트 객체의 속성 이름은 열 이름에 직접 대응하는 경우, 당신은 더 많은 유연성이 동적으로 올바른 SQL 문자열을 생성 할 수 있습니다

const cols = Object.keys(values).join(", "); 
const placeholders = Object.keys(values).fill('?').join(", "); 
db.run('INSERT INTO tablename (' + cols + ') VALUES (' + placeholders + ')', Object.values(values)), (err) => { ... }); 
+0

const values = { name: 'John', age: 34, language: 'english' }; paramString = "?"; for (var i = 0; i < Object.keys(values).length -1 ; i ++) paramString += ",?"; // db.run('INSERT INTO tablename VALUES ('+paramString + ')', Object.values(values)); console.log('INSERT INTO tablename VALUES ('+paramString + ')',Object.values(values));
는 나는이 방법을 시도했지만'오류 : SQLITE_ERROR : 테이블 TABLENAME이 – tomole

+0

@tomole을 supplied' 된 4 열하지만 한 값이 다음이의 열 이름을 지정해야합니다 SQL. 예를 들어, json이라는 컬럼에 삽입하려면 :'INSERT INTO tablename (json) VALUES (?)' – janos

+0

''json'의 의미를 구체적으로 적어주십시오. – tomole

1

?,?,?Obj.values()
시도를 암호.

+0

질의 문자열은'INSERT INTO tablename (이름 나이 언어) VALUES (John 34 영어)'에서 끝납니다. 이 일은 실 거예요. – tomole

+0

고맙지 만 :'오류 : SQLITE_ERROR : 테이블 tablename에는 3 개의 열이 있지만 1 개의 값이 제공되었습니다 .' – tomole

+0

''연산자'... Object.values ​​(values)' –