Version 22 of tcl sqlite examples

Updated 2013-05-13 02:42:22 by booksandlibros

nscerqueira Some examples of tcl and sqlite usage:

NOTE: the name of the database is opendb

  • Retrieve the names of the tables stored in a sqlite database:
   package require sqlite3

   sqlite3 opendb "database.db" ; # Open up an existing database or create a new empty one.
   set tableNames [opendb eval {SELECT tbl_name FROM sqlite_master}]
   puts $tableNames
  • Retrieve the names of the columns stored in a sqlite database(variable columnName):
   opendb eval "SELECT * FROM $tableName LIMIT 1" x {set columnName $x(*)} 
   puts $columnName

jnc You can also use the PRAGMA statement table_info(table_name) to retrieve column information. See http://sqlite.org/pragma.html for a list of all PRAGMA statements.

   set columns [opendb eval "PRAGMA table_info($tableName)"]
   puts $columns
  • Retrieve the row data from a table
   opendb eval "Select * FROM $i" values {
      set columnNames $values(*)
      set rowList {}
      foreach column $columnNames {
         lappend rowList $values($column)
      }
      puts $rowList
   }

KWizzz Above example executes set columnNames $values(*) for each row. You might want to use this instead:

   proc columnNames {db query} {
       # execute query with no actions in order to get column names
       $db eval $query columns break
       set h $columns(*)
       return $h
   }

   proc columnValues {columnNames {sep ";"}} {
       set r {}
       foreach name $columnNames {
           upvar $name value
           set value [string map {{""} {""}} $value]
           lappend r \"$value\"
       }
       set values [join $r $sep]
       return $values
   }

   set sql "Select * FROM $i"
   set h [columnNames opendb $sql]
   puts $h
   opendb eval $sql {
      puts [columnValues $h
   }

JOB Anyone interested in some date arithmetics - the sqlite database can do it all! The classical days between date function the SQL way goes like this:

  -- note: sqlite doesn't need select ... from dual
  SELECT julianday ( current_date ) - julianday( DATE('....-09-25'));

'escargo 2012-01-31' - Anybody have a clue on how to decipher the SQLite tables used by Firefox 3 bookmarks? I thought it might be easier to read the database directly rather than export HTML and then parse the result, but the structure is not documented anywhere I can find, and there seems to be no "how to" on how to navigate through all the tables.