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>
 |