mllamazares
mllamazares

Reputation: 8206

How to use sqlite3 in C without the dev library installed?

I'm trying to load a local DB with SQLite under a RedHat Linux server. I have a C code to load the database from a very large file spliting the columns. The bad new is that sqlite3 is not installed in the machine (fatal error: sqlite3.h: No such file or directory) and I won't be able to have permissions to install libsqlite3-dev (acording to this) , so I could only use it throuth bash or python:

[dhernandez@zl1:~]$ locate sqlite3
/opt/xiv/host_attach/xpyv/lib/libsqlite3.so
/opt/xiv/host_attach/xpyv/lib/libsqlite3.so.0
/opt/xiv/host_attach/xpyv/lib/libsqlite3.so.0.8.6
/opt/xiv/host_attach/xpyv/lib/python2.7/sqlite3
/opt/xiv/host_attach/xpyv/lib/python2.7/lib-dynload/_sqlite3.so
/opt/xiv/host_attach/xpyv/lib/python2.7/sqlite3/__init__.py
/opt/xiv/host_attach/xpyv/lib/python2.7/sqlite3/dbapi2.py
/opt/xiv/host_attach/xpyv/lib/python2.7/sqlite3/dump.py
/usr/bin/sqlite3
/usr/lib64/libsqlite3.so.0
/usr/lib64/libsqlite3.so.0.8.6
/usr/lib64/python2.6/sqlite3
/usr/lib64/python2.6/lib-dynload/_sqlite3.so
/usr/lib64/python2.6/sqlite3/__init__.py
/usr/lib64/python2.6/sqlite3/__init__.pyc
/usr/lib64/python2.6/sqlite3/__init__.pyo
/usr/lib64/python2.6/sqlite3/dbapi2.py
/usr/lib64/python2.6/sqlite3/dbapi2.pyc
/usr/lib64/python2.6/sqlite3/dbapi2.pyo
/usr/lib64/python2.6/sqlite3/dump.py
/usr/lib64/python2.6/sqlite3/dump.pyc
/usr/lib64/python2.6/sqlite3/dump.pyo
/usr/lib64/xulrunner/libmozsqlite3.so
/usr/share/man/man1/sqlite3.1.gz
/usr/share/mime/application/x-kexiproject-sqlite3.xml
/usr/share/mime/application/x-sqlite3.xml

What would be faster of the following options?

  1. Split the columns in my C program, and then execute the insert like this:

    system("echo 'insert into t values(1,2);'" | sqlite3 mydb.db);
    
  2. Split the columns in my C program, save it to a temp file and when I've got 500.000 rows I execute the script like this (and then empty the temp file to continue loading rows):

    system("sqlite3 mydb.db < temp.sql);
    
  3. Split the columns in my C program adding a delimiter between them, save it to a temp file and import it like this:

    .delimiter '@'
    .import temp.txt t
    

Upvotes: 1

Views: 1383

Answers (3)

Bart Friederichs
Bart Friederichs

Reputation: 33573

You can use the amalgation version. It is a single .c file you can include in your project, and all of SQLite is available. No need for dynamic linking.

Upvotes: 3

Koshinae
Koshinae

Reputation: 2330

Download the devel package and use it from your project directory. You only need it for the compilation.

Upvotes: 0

Swann
Swann

Reputation: 2473

You could probably try to dynamically load the sqlite3 library at runtime. There are quite few stuff to learn about it, but that's a powerful functionality and I am quite sure this would solve your problem.

Here is a link describing how you can do it : http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html

Upvotes: 0

Related Questions