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