2016-12-27 55 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)