[Gambas-user] why, Import CSV file into Sqlite3 database is too slow, very very slow en Gambas2 :(
Benoît Minisini
gambas at ...1...
Thu Sep 8 21:36:40 CEST 2011
> Hello:
>
> I want to import CSV file into Sqlite3 db in gambas2, but it's Working
> too slow, the process takes 2 - 3 hours or more. I used ".import
> csv_file.csv prov" sqlite3 command and works very fast, one minute or
> less.
>
> The CSV file has 35,657 records and 4 data per record. The database has
> five tables. Some fields name are repeated in other tables.
>
> This is the structure of "prov" table in sqlite3 db
> Sqlite3> .schema prov
> CREATE TABLE prov("idkey" INTEGER PRIMARY KEY AUTOINCREMENT, "idsuc"
> NUMERIC, "idrta" NUMERIC, "idprod" NUMERIC, "idcases" NUMERIC);
>
> *** I don't used INTEGER type because has problems in gambas2, not update
> data, I don't know why :(
>
> I used two ways to import CSV file:
>
> First:
> PUBLIC SUB Button1_Click()
> DIM hFile as File
> DIM wsales as Result
> DIM wline as String
> DIM wdata as String[]
>
> hFile = OPEN "CSV_Filename.csv" FOR READ
> WHILE NOT Eof(hFile)
> LINE INPUT #hFile, wline
> wdata = Split(wline, ",")
> wsales = Fmain.Conexion.Exec("Insert into prov (idsuc, idrta, idprod,
> idcases) values (" & wdata[0] & "," & wdata[1] & "," & wdata[2] & "," &
> wdata[3] & ")" ) WEND
> hFile.Close
> END
>
> Second:
> PUBLIC SUB Button1_Click()
> DIM hFile as File
> DIM wsales as Result
> DIM wline as String
> DIM wdata as String[]
>
> hFile = OPEN "CSV_Filename.csv" FOR READ
> WHILE NOT Eof(hFile)
> LINE INPUT #hFile, wline
> wdata = Split(wline, ",")
> wsales = Fmain.Conexion.Create("prov")
> wsales["idsuc"] = wdata[0]
> wsales["idrta"] = wdata[1]
> wsales["idprod"] = wdata[2]
> wsales["idcases"] = wdata[3]
> wsales.Update
> WEND
> hFile.Close
> END
>
> Both codes work fine, but very slow 2 hours or more, why?, I used ".import
> csv_file.csv prov" sqlite3 command and works very fast, one minute or
> less
>
> Somebody help me.................
>
>
It's slow because you don't use transaction. Do the entire import inside a
transaction.
Regards,
--
Benoît Minisini
More information about the User
mailing list