Go directly to the sqlite website to file a source code, and then change the file read/write interface to symbian. You can use it ..
But it should be noted that, do not make it into a dll, but do not support static in static lib. dll. If you want to make it into a dll, you need to put all the static in tls. I have tried, and there are many logics. And the changes are large. So static lib is enough ..
========================================================== ==========================================
Name: sqlite_symbian.cpp
Author:
Version: 1.0
Copyright: Arthur Hu
Description: sqlite_symbian declaration
========================================================== ==========================================
*/
# Include "sqlite3.h"
# Include "sqliteInt. h"
# Include "OS _common.h"
# Include <f32file. h>
# Include <stdio. h>
# Include <string. h>
# Include <bautils. h>
# Include <utf. h>
Void Utf8ToUnicode (const char * src, TDes & aDes)
{
Const TUint8 * ptr = (const TUint8 *) src;
TPtrC8 srcPtr (ptr, User: StringLength (ptr ));
CnvUtfConverter: ConvertToUnicodeFromUtf8 (aDes, srcPtr );
}
Typedef struct SymbianFile;
Struct SymbianFile
{
Const sqlite3_io_methods * pMethod;/*** Must be first ***/
Sqlite3_vfs * pVfs;/* The VFS used to open this file */
RFs iFs;
RFile iFile;
Unsigned char locktype;/* Type of lock currently held on this file */
Short sharedLockByte;/* Randomly chosen byte used as a shared lock */
Char zPath [255];/* Full pathname of this file */
};
Int FileClose (sqlite3_file * f)
{
SymbianFile * file = (SymbianFile *) f;
File-> iFile. Close ();
File-> iFs. Close ();
Return SQLITE_ OK;
}
Int FileRead (sqlite3_file * f, void * data, int len, sqlite3_int64 offset)
{
SymbianFile * file = (SymbianFile *) f;
TInt off = offset;
TInt err = file-> iFile. Seek (ESeekStart, off );
If (err! = KErrNone)
{
Return SQLITE_IOERR_READ;
}
TPtr8 ptr (TUint8 *) data, len );
Err = file-> iFile. Read (ptr );
If (err! = KErrNone)
{
Return SQLITE_IOERR_READ;
}
If (ptr. Length () <len)
{
Return SQLITE_IOERR_SHORT_READ;
}
Return SQLITE_ OK;
}
Int FileWrite (sqlite3_file * f, const void * data, int len, sqlite3_int64 offset)
{
SymbianFile * file = (SymbianFile *) f;
TInt off = offset;
TInt err = file-> iFile. Seek (ESeekStart, off );
If (err! = KErrNone)
{
Return SQLITE_IOERR_WRITE;
}
TPtrC8 ptr (const TUint8 *) data, len );
Err = file-> iFile. Write (ptr );
If (err! = KErrNone)
{
Return SQLITE_IOERR_WRITE;
}
Return SQLITE_ OK;
}
Int FileTruncate (sqlite3_file * f, sqlite3_int64 size)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileSync (sqlite3_file * f, int flags)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileFileSize (sqlite3_file * f, sqlite3_int64 * pSize)
{
SymbianFile * file = (SymbianFile *) f;
TInt size = 0;
TInt err = file-> iFile. Size (size );
If (err! = KErrNone)
{
Return SQLITE_ OK;
}
* PSize = size;
Return SQLITE_ OK;
}
Int FileLock (sqlite3_file * f, int)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileUnlock (sqlite3_file * f, int)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileCheckReservedLock (sqlite3_file * f, int * pResOut)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileFileControl (sqlite3_file * f, int op, void * pArg)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileSectorSize (sqlite3_file * f)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileDeviceCharacteristics (sqlite3_file * f)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
/* Methods above are valid for version 1 */
Int FileShmMap (sqlite3_file * f, int iPg, int pgsz, int, void volatile **)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Int FileShmLock (sqlite3_file * f, int offset, int n, int flags)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Void FileShmBarrier (sqlite3_file * f)
{
SymbianFile * file = (SymbianFile *) f;
}
Int FileShmUnmap (sqlite3_file * f, int deleteFlag)
{
SymbianFile * file = (SymbianFile *) f;
Return SQLITE_ OK;
}
Static const sqlite3_io_methods Methord =
{100,/* iVersion */
FileClose,/* xClose */
FileRead,/* xRead */
FileWrite,/* xWrite */
FileTruncate,/* xTruncate */
FileSync,/* xSync */
FileFileSize,/* xFileSize */
FileLock,/* xLock */
FileUnlock,/* xUnlock */
FileCheckReservedLock,/* xCheckReservedLock */
FileFileControl,/* xFileControl */
FileSectorSize,/* xSectorSize */
FileDeviceCharacteristics,/* xDeviceCharacteristics */
FileShmMap,/* xShmMap */
FileShmLock,/* xShmLock */
FileShmBarrier,/* xShmBarrier */
FileShmUnmap/* xShmUnmap */
};
Int SymbianOpen (sqlite3_vfs * vfs, const char * zName, sqlite3_file * f,
Int flags, int * pOutFlags)
{
SymbianFile * file = (SymbianFile *) f;
Memset (file, 0, sizeof (SymbianFile ));
File-> pMethod = & Methord;
File-> pVfs = vfs;
Strcpy (file-> zPath, zName );
TInt err = file-> iFs. Connect ();
If (err! = KErrNone)
{
Return SQLITE_IOERR;
}
TFileName name;
Utf8ToUnicode (zName, name );
// RFile open
If (flags & SQLITE_OPEN_CREATE)
{
If (BaflUtils: FileExists (file-> iFs, name ))
{
Err = file-> iFile. Open (file-> iFs, name, EFileWrite | EFileRead );
}
Else
{
Err = file-> iFile. Replace (file-> iFs, name, EFileWrite | EFileRead );
}
}
Else
{
Err = file-> iFile. Open (file-> iFs, name, EFileWrite | EFileRead );
}
If (err! = KErrNone)
{
File-> iFs. Close ();
Return SQLITE_IOERR;
}
If (pOutFlags)
{
* POutFlags = flags;
}
Return SQLITE_ OK;
}
Int SymbianDelete (sqlite3_vfs *, const char * zName, int syncDir)
{
RFs fs;
TInt err = fs. Connect ();
If (err! = KErrNone)
{
Return SQLITE_IOERR;
}
TFileName name;
Utf8ToUnicode (zName, name );
Fs. Delete (name );
Fs. Close ();
Return SQLITE_ OK;
}
Int SymbianAccess (sqlite3_vfs *, const char * zName, int flags, int * pResOut)
{
* PResOut = flags;
Return SQLITE_ OK;
}
Int SymbianFullPathname (sqlite3_vfs * pVfs, const char * zRelative, int nFull,
Char * zFull)
{
Const char * temp = zRelative;
Temp = zFull;
Strcpy (zFull, zRelative );
Return SQLITE_ OK;
}
Void * SymbianDlOpen (sqlite3_vfs *, const char * zFilename)
{
Return NULL;
}
Void SymbianDlError (sqlite3_vfs *, int nByte, char * zErrMsg)
{
}
Void SymbianDlClose (sqlite3_vfs *, void *)
{
}
Int SymbianRandomness (sqlite3_vfs *, int nByte, char * zOut)
{
Return SQLITE_NOMEM;
}
Int SymbianSleep (sqlite3_vfs *, int microseconds)
{
Return SQLITE_NOMEM;
}
Int SymbianCurrentTime (sqlite3_vfs *, double *)
{
Return SQLITE_NOMEM;
}
Int SymbianGetLastError (sqlite3_vfs *, int, char *)
{
Return SQLITE_NOMEM;
}
/*
** The methods above are in version 1 of the sqlite_vfs object
** Definition. Those that follow are added in version 2 or later
*/
Int SymbianCurrentTimeInt64 (sqlite3_vfs *, sqlite3_int64 *)
{
Return 0;
}
SQLITE_API
Int sqlite3_ OS _init (void)
{
Static sqlite3_vfs symbianVfs =
{1,/* iVersion */
Sizeof (SymbianFile),/* szOsFile */
255,/* mxPathname */
0,/* pNext */
"Symbian",/* zName */
0,/* pAppData */
SymbianOpen,/* xOpen */
SymbianDelete,/* xDelete */
SymbianAccess,/* xAccess */
SymbianFullPathname,/* xFullPathname */
SymbianDlOpen,/* xDlOpen */
SymbianDlError,/* xDlError */
NULL/* SymbianDlSym */,/* xDlSym */
SymbianDlClose,/* xDlClose */
SymbianRandomness,/* xRandomness */
SymbianSleep,/* xSleep */
SymbianCurrentTime,/* xCurrentTime */
SymbianGetLastError,/* xGetLastError */
};
Sqlite3_vfs_register (& symbianVfs, 1 );
Return SQLITE_ OK;
}
SQLITE_API int sqlite3_ OS _end (void)
{
Return SQLITE_ OK;
}
From Hu zexin's blog