2016-12-27 4 views
1

Genie + SQLite로 연습하고 있는데 쿼리를 만들려고하면 차단됩니다.Genie + SQLite의 쿼리

uses Sqlite 

init  
    db : Sqlite.Database 
    Sqlite.Database.open ("agenda.db3", out db) 

    db.exec ("CREATE TABLE Contactos (pkiD INTEGER PRIMARY KEY, nombre TEXT UNIQUE, phone INTEGER)") 

    stdout.printf("Nuevo contacto: ") 
    contacto_nombre:string = stdin.read_line() 

    stdout.printf("Teléfono: ") 
    contacto_phone:string = stdin.read_line() 

    enter:string = @"INSERT INTO Contactos (nombre, phone) VALUES ('$contacto_nombre', $contacto_phone)" 

    // if contacto_nombre exists ???????????? 
     //"SELECT nombre FROM Contactos WHERE nombre = 'contacto_nombre'" ???? 
     //stdout.printf("%s ya está en la Agenda.\n", contacto_nombre) 
    //else 
     db.exec (enter) 

값이 이미 있는지 확인할 수 있습니까? 고맙습니다.

답변

1

글쎄, 이것이 최선의 방법인지는 잘 모르겠지만이 해결책을 찾았습니다.

uses 
    Sqlite 
    Gee 

init  
    db : Sqlite.Database 
    Sqlite.Database.open ("agenda.db3", out db) 

    db.exec ("CREATE TABLE Contactos (pkiD INTEGER PRIMARY KEY, nombre TEXT UNIQUE, phone INTEGER)") 

    stdout.printf("Nuevo contacto: ") 
    contacto_nombre:string = stdin.read_line() 

    statement:Statement 
    db.prepare_v2("SELECT nombre FROM Contactos", -1, out statement) 

    cols:int = statement.column_count() 

    var row = new dict of string, string 
    item:int = 1 

    var lista = new list of string 

    while statement.step() == ROW 
     for i:int = 0 to (cols - 1) 
      row[ statement.column_name(i) ] = statement.column_text(i) 
      lista.add(row[ "nombre" ]) 
     item++ 
    if lista.contains(contacto_nombre) == true 
     stdout.printf("%s ya está en la Agenda.\n", contacto_nombre)  
    else 
     stdout.printf("Teléfono: ") 
     contacto_phone:string = stdin.read_line() 
     enter:string = @"INSERT INTO Contactos (nombre, phone) VALUES ('$contacto_nombre', $contacto_phone)" 
     db.exec (enter)