372 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			372 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html><head>
 | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 | |
| <link href="../sqlite.css" rel="stylesheet">
 | |
| <title>Opening A New Database Connection</title>
 | |
| <!-- path=../ -->
 | |
| </head>
 | |
| <body>
 | |
| <div class=nosearch>
 | |
| <a href="../index.html">
 | |
| <img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
 | |
| </a>
 | |
| <div><!-- IE hack to prevent disappearing logo --></div>
 | |
| <div class="tagline desktoponly">
 | |
| Small. Fast. Reliable.<br>Choose any three.
 | |
| </div>
 | |
| <div class="menu mainmenu">
 | |
| <ul>
 | |
| <li><a href="../index.html">Home</a>
 | |
| <li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
 | |
| <li class='wideonly'><a href='../about.html'>About</a>
 | |
| <li class='desktoponly'><a href="../docs.html">Documentation</a>
 | |
| <li class='desktoponly'><a href="../download.html">Download</a>
 | |
| <li class='wideonly'><a href='../copyright.html'>License</a>
 | |
| <li class='desktoponly'><a href="../support.html">Support</a>
 | |
| <li class='desktoponly'><a href="../prosupport.html">Purchase</a>
 | |
| <li class='search' id='search_menubutton'>
 | |
| <a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="menu submenu" id="submenu">
 | |
| <ul>
 | |
| <li><a href='../about.html'>About</a>
 | |
| <li><a href='../docs.html'>Documentation</a>
 | |
| <li><a href='../download.html'>Download</a>
 | |
| <li><a href='../support.html'>Support</a>
 | |
| <li><a href='../prosupport.html'>Purchase</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="searchmenu" id="searchmenu">
 | |
| <form method="GET" action="../search">
 | |
| <select name="s" id="searchtype">
 | |
| <option value="d">Search Documentation</option>
 | |
| <option value="c">Search Changelog</option>
 | |
| </select>
 | |
| <input type="text" name="q" id="searchbox" value="">
 | |
| <input type="submit" value="Go">
 | |
| </form>
 | |
| </div>
 | |
| </div>
 | |
| <script>
 | |
| function toggle_div(nm) {
 | |
| var w = document.getElementById(nm);
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| }else{
 | |
| w.style.display = "block";
 | |
| }
 | |
| }
 | |
| function toggle_search() {
 | |
| var w = document.getElementById("searchmenu");
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| } else {
 | |
| w.style.display = "block";
 | |
| setTimeout(function(){
 | |
| document.getElementById("searchbox").focus()
 | |
| }, 30);
 | |
| }
 | |
| }
 | |
| function div_off(nm){document.getElementById(nm).style.display="none";}
 | |
| window.onbeforeunload = function(e){div_off("submenu");}
 | |
| /* Disable the Search feature if we are not operating from CGI, since */
 | |
| /* Search is accomplished using CGI and will not work without it. */
 | |
| if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
 | |
| document.getElementById("search_menubutton").style.display = "none";
 | |
| }
 | |
| /* Used by the Hide/Show button beside syntax diagrams, to toggle the */
 | |
| function hideorshow(btn,obj){
 | |
| var x = document.getElementById(obj);
 | |
| var b = document.getElementById(btn);
 | |
| if( x.style.display!='none' ){
 | |
| x.style.display = 'none';
 | |
| b.innerHTML='show';
 | |
| }else{
 | |
| x.style.display = '';
 | |
| b.innerHTML='hide';
 | |
| }
 | |
| return false;
 | |
| }
 | |
| </script>
 | |
| </div>
 | |
| <!-- keywords: sqlite3_open sqlite3_open16 sqlite3_open_v2 -->
 | |
| <div class=nosearch>
 | |
| <a href="intro.html"><h2>SQLite C Interface</h2></a>
 | |
| <h2>Opening A New Database Connection</h2>
 | |
| </div>
 | |
| <blockquote><pre>
 | |
| int sqlite3_open(
 | |
|   const char *filename,   /* Database filename (UTF-8) */
 | |
|   sqlite3 **ppDb          /* OUT: SQLite db handle */
 | |
| );
 | |
| int sqlite3_open16(
 | |
|   const void *filename,   /* Database filename (UTF-16) */
 | |
|   sqlite3 **ppDb          /* OUT: SQLite db handle */
 | |
| );
 | |
| int sqlite3_open_v2(
 | |
|   const char *filename,   /* Database filename (UTF-8) */
 | |
|   sqlite3 **ppDb,         /* OUT: SQLite db handle */
 | |
|   int flags,              /* Flags */
 | |
|   const char *zVfs        /* Name of VFS module to use */
 | |
| );
 | |
| </pre></blockquote>
 | |
| <p>
 | |
| These routines open an SQLite database file as specified by the
 | |
| filename argument. The filename argument is interpreted as UTF-8 for
 | |
| sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
 | |
| order for sqlite3_open16(). A <a href="../c3ref/sqlite3.html">database connection</a> handle is usually
 | |
| returned in *ppDb, even if an error occurs.  The only exception is that
 | |
| if SQLite is unable to allocate memory to hold the <a href="../c3ref/sqlite3.html">sqlite3</a> object,
 | |
| a NULL will be written into *ppDb instead of a pointer to the <a href="../c3ref/sqlite3.html">sqlite3</a>
 | |
| object. If the database is opened (and/or created) successfully, then
 | |
| <a href="../rescode.html#ok">SQLITE_OK</a> is returned.  Otherwise an <a href="../rescode.html">error code</a> is returned. The
 | |
| <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> or <a href="../c3ref/errcode.html">sqlite3_errmsg16()</a> routines can be used to obtain
 | |
| an English language description of the error following a failure of any
 | |
| of the sqlite3_open() routines.</p>
 | |
| 
 | |
| <p>The default encoding will be UTF-8 for databases created using
 | |
| sqlite3_open() or sqlite3_open_v2().  The default encoding for databases
 | |
| created using sqlite3_open16() will be UTF-16 in the native byte order.</p>
 | |
| 
 | |
| <p>Whether or not an error occurs when it is opened, resources
 | |
| associated with the <a href="../c3ref/sqlite3.html">database connection</a> handle should be released by
 | |
| passing it to <a href="../c3ref/close.html">sqlite3_close()</a> when it is no longer required.</p>
 | |
| 
 | |
| <p>The sqlite3_open_v2() interface works like sqlite3_open()
 | |
| except that it accepts two additional parameters for additional control
 | |
| over the new database connection.  The flags parameter to
 | |
| sqlite3_open_v2() must include, at a minimum, one of the following
 | |
| three flag combinations:</p>
 | |
| 
 | |
| <p><dl>
 | |
| <dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a></dt>
 | |
| <dd>The database is opened in read-only mode.  If the database does not
 | |
| already exist, an error is returned.</dd></p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a></dt>
 | |
| <dd>The database is opened for reading and writing if possible, or reading
 | |
| only if the file is write protected by the operating system.  In either
 | |
| case the database must already exist, otherwise an error is returned.</dd></p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a> | <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a></dt>
 | |
| <dd>The database is opened for reading and writing, and is created if
 | |
| it does not already exist. This is the behavior that is always used for
 | |
| sqlite3_open() and sqlite3_open16().</dd>
 | |
| </dl></p>
 | |
| 
 | |
| <p>In addition to the required flags, the following optional flags are
 | |
| also supported:</p>
 | |
| 
 | |
| <p><dl>
 | |
| <dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a></dt>
 | |
| <dd>The filename can be interpreted as a URI if this flag is set.</dd></p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_MEMORY</a></dt>
 | |
| <dd>The database will be opened as an in-memory database.  The database
 | |
| is named by the "filename" argument for the purposes of cache-sharing,
 | |
| if shared cache mode is enabled, but the "filename" is otherwise ignored.
 | |
| </dd></p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a></dt>
 | |
| <dd>The new database connection will use the "multi-thread"
 | |
| <a href="../threadsafe.html">threading mode</a>.  This means that separate threads are allowed
 | |
| to use SQLite at the same time, as long as each thread is using
 | |
| a different <a href="../c3ref/sqlite3.html">database connection</a>.</p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a></dt>
 | |
| <dd>The new database connection will use the "serialized"
 | |
| <a href="../threadsafe.html">threading mode</a>.  This means the multiple threads can safely
 | |
| attempt to use the same database connection at the same time.
 | |
| (Mutexes will block any actual concurrency, but in this mode
 | |
| there is no harm in trying.)</p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a></dt>
 | |
| <dd>The database is opened <a href="../sharedcache.html">shared cache</a> enabled, overriding
 | |
| the default shared cache setting provided by
 | |
| <a href="../c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a>.</p>
 | |
| 
 | |
| <p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a></dt>
 | |
| <dd>The database is opened <a href="../sharedcache.html">shared cache</a> disabled, overriding
 | |
| the default shared cache setting provided by
 | |
| <a href="../c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a>.</p>
 | |
| 
 | |
| <p><a name="opennofollow"></a>
 | |
|  <dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a></dt>
 | |
| <dd>The database filename is not allowed to be a symbolic link</dd>
 | |
| </dl></p>
 | |
| 
 | |
| <p>If the 3rd parameter to sqlite3_open_v2() is not one of the
 | |
| required combinations shown above optionally combined with other
 | |
| <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_* bits</a>
 | |
| then the behavior is undefined.</p>
 | |
| 
 | |
| <p>The fourth parameter to sqlite3_open_v2() is the name of the
 | |
| <a href="../c3ref/vfs.html">sqlite3_vfs</a> object that defines the operating system interface that
 | |
| the new database connection should use.  If the fourth parameter is
 | |
| a NULL pointer then the default <a href="../c3ref/vfs.html">sqlite3_vfs</a> object is used.</p>
 | |
| 
 | |
| <p>If the filename is ":memory:", then a private, temporary in-memory database
 | |
| is created for the connection.  This in-memory database will vanish when
 | |
| the database connection is closed.  Future versions of SQLite might
 | |
| make use of additional special filenames that begin with the ":" character.
 | |
| It is recommended that when a database filename actually does begin with
 | |
| a ":" character you should prefix the filename with a pathname such as
 | |
| "./" to avoid ambiguity.</p>
 | |
| 
 | |
| <p>If the filename is an empty string, then a private, temporary
 | |
| on-disk database will be created.  This private database will be
 | |
| automatically deleted as soon as the database connection is closed.</p>
 | |
| 
 | |
| <p><a name="urifilenamesinsqlite3open"></a>
 | |
|  <h3>URI Filenames</h3></p>
 | |
| 
 | |
| <p>If <a href="../uri.html">URI filename</a> interpretation is enabled, and the filename argument
 | |
| begins with "file:", then the filename is interpreted as a URI. URI
 | |
| filename interpretation is enabled if the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> flag is
 | |
| set in the third argument to sqlite3_open_v2(), or if it has
 | |
| been enabled globally using the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a> option with the
 | |
| <a href="../c3ref/config.html">sqlite3_config()</a> method or by the <a href="../compile.html#use_uri">SQLITE_USE_URI</a> compile-time option.
 | |
| URI filename interpretation is turned off
 | |
| by default, but future releases of SQLite might enable URI filename
 | |
| interpretation by default.  See "<a href="../uri.html">URI filenames</a>" for additional
 | |
| information.</p>
 | |
| 
 | |
| <p>URI filenames are parsed according to RFC 3986. If the URI contains an
 | |
| authority, then it must be either an empty string or the string
 | |
| "localhost". If the authority is not an empty string or "localhost", an
 | |
| error is returned to the caller. The fragment component of a URI, if
 | |
| present, is ignored.</p>
 | |
| 
 | |
| <p>SQLite uses the path component of the URI as the name of the disk file
 | |
| which contains the database. If the path begins with a '/' character,
 | |
| then it is interpreted as an absolute path. If the path does not begin
 | |
| with a '/' (meaning that the authority section is omitted from the URI)
 | |
| then the path is interpreted as a relative path.
 | |
| On windows, the first component of an absolute path
 | |
| is a drive specification (e.g. "C:").</p>
 | |
| 
 | |
| <p><a name="coreuriqueryparameters"></a>
 | |
| 
 | |
| The query component of a URI may contain parameters that are interpreted
 | |
| either by SQLite itself, or by a <a href="../vfs.html">custom VFS implementation</a>.
 | |
| SQLite and its built-in <a href="../vfs.html">VFSes</a> interpret the
 | |
| following query parameters:</p>
 | |
| 
 | |
| <p><ul>
 | |
| <li> <b>vfs</b>: The "vfs" parameter may be used to specify the name of
 | |
| a VFS object that provides the operating system interface that should
 | |
| be used to access the database file on disk. If this option is set to
 | |
| an empty string the default VFS object is used. Specifying an unknown
 | |
| VFS is an error. If sqlite3_open_v2() is used and the vfs option is
 | |
| present, then the VFS specified by the option takes precedence over
 | |
| the value passed as the fourth parameter to sqlite3_open_v2().</p>
 | |
| 
 | |
| <p><li> <b>mode</b>: The mode parameter may be set to either "ro", "rw",
 | |
| "rwc", or "memory". Attempting to set it to any other value is
 | |
| an error.
 | |
| If "ro" is specified, then the database is opened for read-only
 | |
| access, just as if the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a> flag had been set in the
 | |
| third argument to sqlite3_open_v2(). If the mode option is set to
 | |
| "rw", then the database is opened for read-write (but not create)
 | |
| access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had
 | |
| been set. Value "rwc" is equivalent to setting both
 | |
| SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE.  If the mode option is
 | |
| set to "memory" then a pure <a href="../inmemorydb.html">in-memory database</a> that never reads
 | |
| or writes from disk is used. It is an error to specify a value for
 | |
| the mode parameter that is less restrictive than that specified by
 | |
| the flags passed in the third parameter to sqlite3_open_v2().</p>
 | |
| 
 | |
| <p><li> <b>cache</b>: The cache parameter may be set to either "shared" or
 | |
| "private". Setting it to "shared" is equivalent to setting the
 | |
| SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
 | |
| sqlite3_open_v2(). Setting the cache parameter to "private" is
 | |
| equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
 | |
| If sqlite3_open_v2() is used and the "cache" parameter is present in
 | |
| a URI filename, its value overrides any behavior requested by setting
 | |
| SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.</p>
 | |
| 
 | |
| <p><li> <b>psow</b>: The psow parameter indicates whether or not the
 | |
| <a href="../psow.html">powersafe overwrite</a> property does or does not apply to the
 | |
| storage media on which the database file resides.</p>
 | |
| 
 | |
| <p><li> <b>nolock</b>: The nolock parameter is a boolean query parameter
 | |
| which if set disables file locking in rollback journal modes.  This
 | |
| is useful for accessing a database on a filesystem that does not
 | |
| support locking.  Caution:  Database corruption might result if two
 | |
| or more processes write to the same database and any one of those
 | |
| processes uses nolock=1.</p>
 | |
| 
 | |
| <p><li> <b>immutable</b>: The immutable parameter is a boolean query
 | |
| parameter that indicates that the database file is stored on
 | |
| read-only media.  When immutable is set, SQLite assumes that the
 | |
| database file cannot be changed, even by a process with higher
 | |
| privilege, and so the database is opened read-only and all locking
 | |
| and change detection is disabled.  Caution: Setting the immutable
 | |
| property on a database file that does in fact change can result
 | |
| in incorrect query results and/or <a href="../rescode.html#corrupt">SQLITE_CORRUPT</a> errors.
 | |
| See also: <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a>.</p>
 | |
| 
 | |
| <p></ul></p>
 | |
| 
 | |
| <p>Specifying an unknown parameter in the query component of a URI is not an
 | |
| error.  Future versions of SQLite might understand additional query
 | |
| parameters.  See "<a href="../uri.html#coreqp">query parameters with special meaning to SQLite</a>" for
 | |
| additional information.</p>
 | |
| 
 | |
| <p><a name="urifilenameexamples"></a>
 | |
|  <h3>URI filename examples</h3></p>
 | |
| 
 | |
| <p><table border="1" align=center cellpadding=5>
 | |
| <tr><th> URI filenames <th> Results
 | |
| <tr><td> file:data.db <td>
 | |
| Open the file "data.db" in the current directory.
 | |
| <tr><td> file:/home/fred/data.db<br>
 | |
| file:///home/fred/data.db <br>
 | |
| file://localhost/home/fred/data.db <br> <td>
 | |
| Open the database file "/home/fred/data.db".
 | |
| <tr><td> file://darkstar/home/fred/data.db <td>
 | |
| An error. "darkstar" is not a recognized authority.
 | |
| <tr><td style="white-space:nowrap">
 | |
| file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
 | |
| <td> Windows only: Open the file "data.db" on fred's desktop on drive
 | |
| C:. Note that the %20 escaping in this example is not strictly
 | |
| necessary - space characters can be used literally
 | |
| in URI filenames.
 | |
| <tr><td> file:data.db?mode=ro&cache=private <td>
 | |
| Open file "data.db" in the current directory for read-only access.
 | |
| Regardless of whether or not shared-cache mode is enabled by
 | |
| default, use a private cache.
 | |
| <tr><td> file:/home/fred/data.db?vfs=unix-dotfile <td>
 | |
| Open file "/home/fred/data.db". Use the special VFS "unix-dotfile"
 | |
| that uses dot-files in place of posix advisory locking.
 | |
| <tr><td> file:data.db?mode=readonly <td>
 | |
| An error. "readonly" is not a valid option for the "mode" parameter.
 | |
| </table></p>
 | |
| 
 | |
| <p>URI hexadecimal escape sequences (%HH) are supported within the path and
 | |
| query components of a URI. A hexadecimal escape sequence consists of a
 | |
| percent sign - "%" - followed by exactly two hexadecimal digits
 | |
| specifying an octet value. Before the path or query components of a
 | |
| URI filename are interpreted, they are encoded using UTF-8 and all
 | |
| hexadecimal escape sequences replaced by a single byte containing the
 | |
| corresponding octet. If this process generates an invalid UTF-8 encoding,
 | |
| the results are undefined.</p>
 | |
| 
 | |
| <p><b>Note to Windows users:</b>  The encoding used for the filename argument
 | |
| of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
 | |
| codepage is currently defined.  Filenames containing international
 | |
| characters must be converted to UTF-8 prior to passing them into
 | |
| sqlite3_open() or sqlite3_open_v2().</p>
 | |
| 
 | |
| <p><b>Note to Windows Runtime users:</b>  The temporary directory must be set
 | |
| prior to calling sqlite3_open() or sqlite3_open_v2().  Otherwise, various
 | |
| features that require the use of temporary files may fail.</p>
 | |
| 
 | |
| <p>See also: <a href="../c3ref/temp_directory.html">sqlite3_temp_directory</a>
 | |
| </p><p>See also lists of
 | |
|   <a href="objlist.html">Objects</a>,
 | |
|   <a href="constlist.html">Constants</a>, and
 | |
|   <a href="funclist.html">Functions</a>.</p>
 |