提交 b492f851 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 93c46a61
...@@ -3,50 +3,50 @@ ...@@ -3,50 +3,50 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Advanced Topics Advanced Topics
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h1>Advanced Topics</h1> <h1>Advanced Topics</h1>
<a href="#result_sets"> <a href="#result_sets">
Result Sets</a><br> Result Sets</a><br />
<a href="#large_objects"> <a href="#large_objects">
Large Objects</a><br> Large Objects</a><br />
<a href="#linked_tables"> <a href="#linked_tables">
Linked Tables</a><br> Linked Tables</a><br />
<a href="#transaction_isolation"> <a href="#transaction_isolation">
Transaction Isolation</a><br> Transaction Isolation</a><br />
<a href="#clustering"> <a href="#clustering">
Clustering / High Availability</a><br> Clustering / High Availability</a><br />
<a href="#two_phase_commit"> <a href="#two_phase_commit">
Two Phase Commit</a><br> Two Phase Commit</a><br />
<a href="#compatibility"> <a href="#compatibility">
Compatibility</a><br> Compatibility</a><br />
<a href="#windows_service"> <a href="#windows_service">
Run as Windows Service</a><br> Run as Windows Service</a><br />
<a href="#odbc_driver"> <a href="#odbc_driver">
ODBC Driver</a><br> ODBC Driver</a><br />
<a href="#acid"> <a href="#acid">
ACID</a><br> ACID</a><br />
<a href="#using_recover_tool"> <a href="#using_recover_tool">
Using the Recover Tool</a><br> Using the Recover Tool</a><br />
<a href="#file_locking_protocols"> <a href="#file_locking_protocols">
File Locking Protocols</a><br> File Locking Protocols</a><br />
<a href="#sql_injection"> <a href="#sql_injection">
Protection against SQL Injection</a><br> Protection against SQL Injection</a><br />
<a href="#security_protocols"> <a href="#security_protocols">
Security Protocols</a><br> Security Protocols</a><br />
<a href="#uuid"> <a href="#uuid">
Universally Unique Identifiers (UUID)</a><br> Universally Unique Identifiers (UUID)</a><br />
<a href="#system_properties"> <a href="#system_properties">
Settings Read from System Properties</a><br> Settings Read from System Properties</a><br />
<a href="#glossary_links"> <a href="#glossary_links">
Glossary and Links</a><br> Glossary and Links</a><br />
<br><a name="result_sets"></a> <br /><a name="result_sets"></a>
<h2>Result Sets</h2> <h2>Result Sets</h2>
<h3>Limiting the Number of Rows</h3> <h3>Limiting the Number of Rows</h3>
...@@ -62,7 +62,7 @@ For result set larger than 1000 rows, the result is buffered to disk. If ORDER B ...@@ -62,7 +62,7 @@ For result set larger than 1000 rows, the result is buffered to disk. If ORDER B
the sorting is done using an external sort algorithm. In this case, each block of rows is sorted using the sorting is done using an external sort algorithm. In this case, each block of rows is sorted using
quick sort, then written to disk; when reading the data, the blocks are merged together. quick sort, then written to disk; when reading the data, the blocks are merged together.
<br><a name="large_objects"></a> <br /><a name="large_objects"></a>
<h2>Large Objects</h2> <h2>Large Objects</h2>
<h3>Storing and Reading Large Objects</h3> <h3>Storing and Reading Large Objects</h3>
...@@ -75,7 +75,7 @@ and to read a CLOB, use ResultSet.getCharacterStream. ...@@ -75,7 +75,7 @@ and to read a CLOB, use ResultSet.getCharacterStream.
If the client/server mode is used, the BLOB and CLOB data is fully read into memory when If the client/server mode is used, the BLOB and CLOB data is fully read into memory when
accessed. In this case, the size of a BLOB or CLOB is limited by the memory. accessed. In this case, the size of a BLOB or CLOB is limited by the memory.
<br><a name="linked_tables"></a> <br /><a name="linked_tables"></a>
<h2>Linked Tables</h2> <h2>Linked Tables</h2>
This database supports linked tables, which means tables that don't exist in the current database but This database supports linked tables, which means tables that don't exist in the current database but
...@@ -88,22 +88,22 @@ There is a restriction when inserting data to this table: When inserting or upda ...@@ -88,22 +88,22 @@ There is a restriction when inserting data to this table: When inserting or upda
NULL and values that are not set in the insert statement are both inserted as NULL. NULL and values that are not set in the insert statement are both inserted as NULL.
This may not have the desired effect if a default value in the target table is other than NULL. This may not have the desired effect if a default value in the target table is other than NULL.
<br><a name="transaction_isolation"></a> <br /><a name="transaction_isolation"></a>
<h2>Transaction Isolation</h2> <h2>Transaction Isolation</h2>
This database supports the transaction isolation level 'serializable', in which dirty reads, non-repeatable This database supports the transaction isolation level 'serializable', in which dirty reads, non-repeatable
reads and phantom reads are prohibited. reads and phantom reads are prohibited.
<ul> <ul>
<li><b>Dirty Reads</b><br> <li><b>Dirty Reads</b><br />
Means a connection can read uncommitted changes made by another connection. Means a connection can read uncommitted changes made by another connection.
<li><b>Non-Repeatable Reads</b><br> </li><li><b>Non-Repeatable Reads</b><br />
A connection reads a row, another connection changes a row and commits, A connection reads a row, another connection changes a row and commits,
and the first connection re-reads the same row and gets the new result. and the first connection re-reads the same row and gets the new result.
<li><b>Phantom Reads</b><br> </li><li><b>Phantom Reads</b><br />
A connection reads a set of rows using a condition, another connection A connection reads a set of rows using a condition, another connection
inserts a row that falls in this condition and commits, then the first connection inserts a row that falls in this condition and commits, then the first connection
re-reads using the same condition and gets the new row. re-reads using the same condition and gets the new row.
</ul> </li></ul>
<h3>Table Level Locking</h3> <h3>Table Level Locking</h3>
The database allows multiple concurrent connections to the same database. The database allows multiple concurrent connections to the same database.
...@@ -127,7 +127,7 @@ the other connection does not release the lock for some time, the unsuccessful ...@@ -127,7 +127,7 @@ the other connection does not release the lock for some time, the unsuccessful
connection will get a lock timeout exception. The lock timeout can be set individually connection will get a lock timeout exception. The lock timeout can be set individually
for each connection. for each connection.
<br><a name="clustering"></a> <br /><a name="clustering"></a>
<h2>Clustering / High Availability</h2> <h2>Clustering / High Availability</h2>
<p> <p>
This database supports a simple clustering / high availability mechanism. The architecture is: This database supports a simple clustering / high availability mechanism. The architecture is:
...@@ -145,11 +145,11 @@ To initialize the cluster, use the following steps: ...@@ -145,11 +145,11 @@ To initialize the cluster, use the following steps:
</p> </p>
<ul> <ul>
<li>Create a database <li>Create a database
<li>Use the CreateCluster tool to copy the database to another location and initialize the clustering. </li><li>Use the CreateCluster tool to copy the database to another location and initialize the clustering.
Afterwards, you have two databases containing the same data. Afterwards, you have two databases containing the same data.
<li>Start two servers (one for each copy of the database) </li><li>Start two servers (one for each copy of the database)
<li>You are now ready to connect to the databases with the client application(s) </li><li>You are now ready to connect to the databases with the client application(s)
</ul> </li></ul>
<h3>Using the CreateCluster Tool</h3> <h3>Using the CreateCluster Tool</h3>
To understand how clustering works, please try out the following example. To understand how clustering works, please try out the following example.
...@@ -158,9 +158,9 @@ databases will be on different servers. ...@@ -158,9 +158,9 @@ databases will be on different servers.
<ul> <ul>
<li>Create two directories: server1 and server2. <li>Create two directories: server1 and server2.
Each directory will simulate a directory on a computer. Each directory will simulate a directory on a computer.
<li>Start a TCP server pointing to the first directory. </li><li>Start a TCP server pointing to the first directory.
You can do this using the command line: You can do this using the command line:
<pre> </li><pre>
java org.h2.tools.Server java org.h2.tools.Server
-tcp -tcpPort 9101 -tcp -tcpPort 9101
-baseDir server1 -baseDir server1
...@@ -168,7 +168,7 @@ java org.h2.tools.Server ...@@ -168,7 +168,7 @@ java org.h2.tools.Server
<li>Start a second TCP server pointing to the second directory. <li>Start a second TCP server pointing to the second directory.
This will simulate a server running on a second (redundant) computer. This will simulate a server running on a second (redundant) computer.
You can do this using the command line: You can do this using the command line:
<pre> </li><pre>
java org.h2.tools.Server java org.h2.tools.Server
-tcp -tcpPort 9102 -tcp -tcpPort 9102
-baseDir server2 -baseDir server2
...@@ -176,7 +176,7 @@ java org.h2.tools.Server ...@@ -176,7 +176,7 @@ java org.h2.tools.Server
<li>Use the CreateCluster tool to initialize clustering. <li>Use the CreateCluster tool to initialize clustering.
This will automatically create a new, empty database if it does not exist. This will automatically create a new, empty database if it does not exist.
Run the tool on the command line: Run the tool on the command line:
<pre> </li><pre>
java org.h2.tools.CreateCluster java org.h2.tools.CreateCluster
-urlSource jdbc:h2:tcp://localhost:9101/test -urlSource jdbc:h2:tcp://localhost:9101/test
-urlTarget jdbc:h2:tcp://localhost:9102/test -urlTarget jdbc:h2:tcp://localhost:9102/test
...@@ -186,13 +186,13 @@ java org.h2.tools.CreateCluster ...@@ -186,13 +186,13 @@ java org.h2.tools.CreateCluster
<li>You can now connect to the databases using <li>You can now connect to the databases using
an application or the H2 Console using the JDBC URL an application or the H2 Console using the JDBC URL
jdbc:h2:tcp://localhost:9101,localhost:9102/test jdbc:h2:tcp://localhost:9101,localhost:9102/test
<li>If you stop a server (by killing the process), </li><li>If you stop a server (by killing the process),
you will notice that the other machine continues to work, you will notice that the other machine continues to work,
and therefore the database is still accessible. and therefore the database is still accessible.
<li>To restore the cluster, you first need to delete the </li><li>To restore the cluster, you first need to delete the
database that failed, then restart the server that was stopped, database that failed, then restart the server that was stopped,
and re-run the CreateCluster tool. and re-run the CreateCluster tool.
</ul> </li></ul>
<h3>Clustering Algorithm and Limitations</h3> <h3>Clustering Algorithm and Limitations</h3>
Read-only queries are only executed against the first cluster node, but all other statements are Read-only queries are only executed against the first cluster node, but all other statements are
...@@ -203,26 +203,26 @@ CSVREAD(), CSVWRITE(), RAND() [when not using a seed]. Those functions should no ...@@ -203,26 +203,26 @@ CSVREAD(), CSVWRITE(), RAND() [when not using a seed]. Those functions should no
directly in modifying statements (for example INSERT, UPDATE, or MERGE). However, they can be used directly in modifying statements (for example INSERT, UPDATE, or MERGE). However, they can be used
in read-only statements and the result can then be used for modifying statements. in read-only statements and the result can then be used for modifying statements.
<br><a name="two_phase_commit"></a> <br /><a name="two_phase_commit"></a>
<h2>Two Phase Commit</h2> <h2>Two Phase Commit</h2>
The two phase commit protocol is supported. 2-phase-commit works as follows: The two phase commit protocol is supported. 2-phase-commit works as follows:
<ul> <ul>
<li>Autocommit needs to be switched off <li>Autocommit needs to be switched off
<li>A transaction is started, for example by inserting a row </li><li>A transaction is started, for example by inserting a row
<li>The transaction is marked 'prepared' by executing the SQL statement </li><li>The transaction is marked 'prepared' by executing the SQL statement
<code>PREPARE COMMIT transactionName</code> </li><code>PREPARE COMMIT transactionName</code>
<li>The transaction can now be committed or rolled back <li>The transaction can now be committed or rolled back
<li>If a problem occurs before the transaction was successfully committed or rolled back </li><li>If a problem occurs before the transaction was successfully committed or rolled back
(for example because a network problem occurred), the transaction is in the state 'in-doubt' (for example because a network problem occurred), the transaction is in the state 'in-doubt'
<li>When re-connecting to the database, the in-doubt transactions can be listed </li><li>When re-connecting to the database, the in-doubt transactions can be listed
with <code>SELECT * FROM INFORMATION_SCHEMA.IN_DOUBT</code> with </li><code>SELECT * FROM INFORMATION_SCHEMA.IN_DOUBT</code>
<li>Each transaction in this list must now be committed or rolled back by executing <li>Each transaction in this list must now be committed or rolled back by executing
<code>COMMIT TRANSACTION transactionName</code> or </li><code>COMMIT TRANSACTION transactionName</code> or
<code>ROLLBACK TRANSACTION transactionName</code> <code>ROLLBACK TRANSACTION transactionName</code>
<li>The database needs to be closed and re-opened to apply the changes <li>The database needs to be closed and re-opened to apply the changes
</ul> </li></ul>
<br><a name="compatibility"></a> <br /><a name="compatibility"></a>
<h2>Compatibility</h2> <h2>Compatibility</h2>
This database is (up to a certain point) compatible to other databases such as HSQLDB, MySQL and PostgreSQL. This database is (up to a certain point) compatible to other databases such as HSQLDB, MySQL and PostgreSQL.
...@@ -246,7 +246,7 @@ Certain words of this list are keywords because they are functions that can be u ...@@ -246,7 +246,7 @@ Certain words of this list are keywords because they are functions that can be u
for example CURRENT_TIMESTAMP. for example CURRENT_TIMESTAMP.
</p> </p>
<br><a name="windows_service"></a> <br /><a name="windows_service"></a>
<h2>Run as Windows Service</h2> <h2>Run as Windows Service</h2>
Using a native wrapper / adapter, Java applications can be run as a Windows Service. Using a native wrapper / adapter, Java applications can be run as a Windows Service.
There are various tools available to do that. The Java Service Wrapper from Tanuki Software, Inc. There are various tools available to do that. The Java Service Wrapper from Tanuki Software, Inc.
...@@ -278,7 +278,7 @@ Please note that the batch file does not print an error message if the service i ...@@ -278,7 +278,7 @@ Please note that the batch file does not print an error message if the service i
To uninstall the service, double click on 5_uninstall_service.bat. To uninstall the service, double click on 5_uninstall_service.bat.
If successful, a command prompt window will pop up and disappear immediately. If not, a message will appear. If successful, a command prompt window will pop up and disappear immediately. If not, a message will appear.
<br><a name="odbc_driver"></a> <br /><a name="odbc_driver"></a>
<h2>ODBC Driver</h2> <h2>ODBC Driver</h2>
The ODBC driver of this database is currently not very stable and only tested superficially The ODBC driver of this database is currently not very stable and only tested superficially
with a few applications (OpenOffice 2.0, Microsoft Excel and Microsoft Access) and with a few applications (OpenOffice 2.0, Microsoft Excel and Microsoft Access) and
...@@ -294,7 +294,7 @@ where you can create new or modify existing data sources. ...@@ -294,7 +294,7 @@ where you can create new or modify existing data sources.
When you create a new H2 ODBC data source, a dialog window will appear When you create a new H2 ODBC data source, a dialog window will appear
and ask for the database settings: and ask for the database settings:
</p> </p>
<img src="odbcDataSource.png" alt="ODBC Configuration"> <img src="odbcDataSource.png" alt="ODBC Configuration" />
<h3>Log Option</h3> <h3>Log Option</h3>
The driver is able to log operations to a file. The driver is able to log operations to a file.
...@@ -322,15 +322,15 @@ Therefore the ODBC driver should not be used where security is important. ...@@ -322,15 +322,15 @@ Therefore the ODBC driver should not be used where security is important.
<h3>Uninstalling</h3> <h3>Uninstalling</h3>
To uninstall the ODBC driver, double click on h2odbcUninstall.exe. This will uninstall the driver. To uninstall the ODBC driver, double click on h2odbcUninstall.exe. This will uninstall the driver.
<br><a name="acid"></a> <br /><a name="acid"></a>
<h2>ACID</h2> <h2>ACID</h2>
In the DBMS world, ACID stands for Atomicity, Consistency, Isolation, and Durability. In the DBMS world, ACID stands for Atomicity, Consistency, Isolation, and Durability.
<ul> <ul>
<li>Atomicity: Transactions must be atomic, that means either all tasks of a transaction are performed, or none. <li>Atomicity: Transactions must be atomic, that means either all tasks of a transaction are performed, or none.
<li>Consistency: Only operations that comply with the defined constraints are allowed. </li><li>Consistency: Only operations that comply with the defined constraints are allowed.
<li>Isolation: Transactions must be completely isolated from each other. </li><li>Isolation: Transactions must be completely isolated from each other.
<li>Durability: Transaction committed to the database will not be lost. </li><li>Durability: Transaction committed to the database will not be lost.
</ul> </li></ul>
This database also supports these properties by default, except durability, which can only This database also supports these properties by default, except durability, which can only
be guaranteed by other means (battery, clustering). be guaranteed by other means (battery, clustering).
...@@ -360,14 +360,14 @@ In Java, there are two ways how this can be achieved: ...@@ -360,14 +360,14 @@ In Java, there are two ways how this can be achieved:
<li>FileDescriptor.sync(). The documentation says that this will force all system buffers to synchronize with the underlying device. <li>FileDescriptor.sync(). The documentation says that this will force all system buffers to synchronize with the underlying device.
Sync is supposed to return after all in-memory modified copies of buffers associated with this FileDescriptor Sync is supposed to return after all in-memory modified copies of buffers associated with this FileDescriptor
have been written to the physical medium. have been written to the physical medium.
<li>FileChannel.force() (since JDK 1.4). This method is supposed to force any updates to this channel's file </li><li>FileChannel.force() (since JDK 1.4). This method is supposed to force any updates to this channel's file
to be written to the storage device that contains it. to be written to the storage device that contains it.
</ul> </li></ul>
There is one related option, but it does not force changes to disk: RandomAccessFile(.., "rws" / "rwd"): There is one related option, but it does not force changes to disk: RandomAccessFile(.., "rws" / "rwd"):
<ul> <ul>
<li>rws: Every update to the file's content or metadata is written synchronously to the underlying storage device. <li>rws: Every update to the file's content or metadata is written synchronously to the underlying storage device.
<li>rwd: Every update to the file's content is written synchronously to the underlying storage device. </li><li>rwd: Every update to the file's content is written synchronously to the underlying storage device.
</ul> </li></ul>
<p> <p>
A simple power-off test using two computers (they communicate over the network, and one the power A simple power-off test using two computers (they communicate over the network, and one the power
is switched off on one computer) shows that the data is not always persisted to the hard drive, is switched off on one computer) shows that the data is not always persisted to the hard drive,
...@@ -405,7 +405,7 @@ run the application again. You will find out that in most cases, none of the dat ...@@ -405,7 +405,7 @@ run the application again. You will find out that in most cases, none of the dat
records that the listener computer knows about. For details, please consult the source code of the records that the listener computer knows about. For details, please consult the source code of the
listener and test application. listener and test application.
<br><a name="using_recover_tool"></a> <br /><a name="using_recover_tool"></a>
<h2>Using the Recover Tool</h2> <h2>Using the Recover Tool</h2>
The recover tool can be used to extract the contents of a data file, even if the database is corrupted. The recover tool can be used to extract the contents of a data file, even if the database is corrupted.
At this time, it does not extract the content of the log file or large objects (CLOB or BLOB). At this time, it does not extract the content of the log file or large objects (CLOB or BLOB).
...@@ -418,7 +418,7 @@ This file contains raw insert statement (for the data) and data definition (DDL) ...@@ -418,7 +418,7 @@ This file contains raw insert statement (for the data) and data definition (DDL)
the schema of the database. This file cannot be executed directly, as the raw insert statements the schema of the database. This file cannot be executed directly, as the raw insert statements
don't have the correct table names, so the file needs to be pre-processed manually before executing. don't have the correct table names, so the file needs to be pre-processed manually before executing.
<br><a name="file_locking_protocols"></a> <br /><a name="file_locking_protocols"></a>
<h2>File Locking Protocols</h2> <h2>File Locking Protocols</h2>
<p> <p>
Whenever a database is opened, a lock file is created to signal other processes Whenever a database is opened, a lock file is created to signal other processes
...@@ -443,7 +443,7 @@ Then, the process waits a little bit (20ms) and checks the file again. If the fi ...@@ -443,7 +443,7 @@ Then, the process waits a little bit (20ms) and checks the file again. If the fi
during this time, the operation is aborted. This protects against a race condition during this time, the operation is aborted. This protects against a race condition
when a process deletes the lock file just after one create it, and a third process creates when a process deletes the lock file just after one create it, and a third process creates
the file again. It does not occur if there are only two writers. the file again. It does not occur if there are only two writers.
<li> </li><li>
If the file can be created, a random number is inserted together with the locking method If the file can be created, a random number is inserted together with the locking method
('file'). Afterwards, a watchdog thread is started that ('file'). Afterwards, a watchdog thread is started that
checks regularly (every second once by default) if the file was deleted or modified by checks regularly (every second once by default) if the file was deleted or modified by
...@@ -452,7 +452,7 @@ old data. The watchdog thread runs with high priority so that a change to the lo ...@@ -452,7 +452,7 @@ old data. The watchdog thread runs with high priority so that a change to the lo
not get through undetected even if the system is very busy. However, the watchdog thread not get through undetected even if the system is very busy. However, the watchdog thread
does use very little resources (CPU time), because it waits most of the time. Also, the watchdog only reads from the hard disk does use very little resources (CPU time), because it waits most of the time. Also, the watchdog only reads from the hard disk
and does not write to it. and does not write to it.
<li> </li><li>
If the lock file exists, and it was modified in the 20 ms, the process waits for some time (up to 10 times). If the lock file exists, and it was modified in the 20 ms, the process waits for some time (up to 10 times).
If it was still changed, an exception is thrown (database is locked). This is done to eliminate race conditions with many concurrent If it was still changed, an exception is thrown (database is locked). This is done to eliminate race conditions with many concurrent
writers. Afterwards, the file is overwritten with a new version (challenge). writers. Afterwards, the file is overwritten with a new version (challenge).
...@@ -462,7 +462,7 @@ and this process will fail to lock the database. ...@@ -462,7 +462,7 @@ and this process will fail to lock the database.
However, if there is no watchdog thread, the lock file will still be as written by However, if there is no watchdog thread, the lock file will still be as written by
this thread. In this case, the file is deleted and atomically created again. this thread. In this case, the file is deleted and atomically created again.
The watchdog thread is started in this case and the file is locked. The watchdog thread is started in this case and the file is locked.
</ul> </li></ul>
<p> <p>
This algorithm is tested with over 100 concurrent threads. In some cases, when there are This algorithm is tested with over 100 concurrent threads. In some cases, when there are
many concurrent threads trying to lock the database, they block each other (meaning many concurrent threads trying to lock the database, they block each other (meaning
...@@ -480,20 +480,20 @@ The algorithm is: ...@@ -480,20 +480,20 @@ The algorithm is:
Then a server socket is opened on a defined port, and kept open. Then a server socket is opened on a defined port, and kept open.
The port and IP address of the process that opened the database is written The port and IP address of the process that opened the database is written
into the lock file. into the lock file.
<li>If the lock file exists, and the lock method is 'file', then the software switches </li><li>If the lock file exists, and the lock method is 'file', then the software switches
to the 'file' method. to the 'file' method.
<li>If the lock file exists, and the lock method is 'socket', then the process </li><li>If the lock file exists, and the lock method is 'socket', then the process
checks if the port is in use. If the original process is still running, the port is in use checks if the port is in use. If the original process is still running, the port is in use
and this process throws an exception (database is in use). If the original process and this process throws an exception (database is in use). If the original process
died (for example due to a blackout, or abnormal termination of the virtual machine), died (for example due to a blackout, or abnormal termination of the virtual machine),
then the port was released. The new process deletes the lock file and starts again. then the port was released. The new process deletes the lock file and starts again.
</ul> </li></ul>
This method does not require a watchdog thread actively polling (reading) the same This method does not require a watchdog thread actively polling (reading) the same
file every second. The problem with this method is, if the file is stored on a network file every second. The problem with this method is, if the file is stored on a network
share, two processes (running on different computers) could still open the same share, two processes (running on different computers) could still open the same
database files, if they do not have a direct TCP/IP connection. database files, if they do not have a direct TCP/IP connection.
<br><a name="sql_injection"></a> <br /><a name="sql_injection"></a>
<h2>Protection against SQL Injection</h2> <h2>Protection against SQL Injection</h2>
<h3>What is SQL Injection</h3> <h3>What is SQL Injection</h3>
This database engine provides a solution for the security vulnerability known as 'SQL Injection'. This database engine provides a solution for the security vulnerability known as 'SQL Injection'.
...@@ -556,7 +556,7 @@ It is not required to create a constant for the number 0 as there is already a b ...@@ -556,7 +556,7 @@ It is not required to create a constant for the number 0 as there is already a b
SELECT * FROM USERS WHERE LENGTH(PASSWORD)=ZERO(); SELECT * FROM USERS WHERE LENGTH(PASSWORD)=ZERO();
</pre> </pre>
<br><a name="security_protocols"></a> <br /><a name="security_protocols"></a>
<h2>Security Protocols</h2> <h2>Security Protocols</h2>
The following paragraphs document the security protocols used in this database. The following paragraphs document the security protocols used in this database.
These descriptions are very technical and only intended for security experts that already know These descriptions are very technical and only intended for security experts that already know
...@@ -641,7 +641,7 @@ The web server supports HTTP and HTTPS connections using SSLServerSocket. ...@@ -641,7 +641,7 @@ The web server supports HTTP and HTTPS connections using SSLServerSocket.
There is a default self-certified certificate to support an easy starting point, but There is a default self-certified certificate to support an easy starting point, but
custom certificates are supported as well. custom certificates are supported as well.
<br><a name="uuid"></a> <br /><a name="uuid"></a>
<h2>Universally Unique Identifiers (UUID)</h2> <h2>Universally Unique Identifiers (UUID)</h2>
This database supports the UUIDs. Also supported is a function to create new UUIDs using This database supports the UUIDs. Also supported is a function to create new UUIDs using
a cryptographically strong pseudo random number generator. a cryptographically strong pseudo random number generator.
...@@ -670,7 +670,7 @@ Some values are: ...@@ -670,7 +670,7 @@ Some values are:
One's annual risk of being hit by a meteorite is estimated to be one chance in 17 billion, One's annual risk of being hit by a meteorite is estimated to be one chance in 17 billion,
that means the probability is about 0.000'000'000'06. that means the probability is about 0.000'000'000'06.
<br><a name="system_properties"></a> <br /><a name="system_properties"></a>
<h2>Settings Read from System Properties</h2> <h2>Settings Read from System Properties</h2>
<p> <p>
Some settings of the database can be set on the command line using Some settings of the database can be set on the command line using
...@@ -714,7 +714,7 @@ INFORMATION_SCHEMA.SETTINGS ...@@ -714,7 +714,7 @@ INFORMATION_SCHEMA.SETTINGS
<tr><td>h2.scriptDirectory</td><td></td><td>Relative or absolute directory where the script files are stored to or read from</td></tr> <tr><td>h2.scriptDirectory</td><td></td><td>Relative or absolute directory where the script files are stored to or read from</td></tr>
</table> </table>
<br><a name="glossary_links"></a> <br /><a name="glossary_links"></a>
<h2>Glossary and Links</h2> <h2>Glossary and Links</h2>
<table><tr><th>Term</th><th>Description</th></tr> <table><tr><th>Term</th><th>Description</th></tr>
<tr> <tr>
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Build Build
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -13,33 +13,33 @@ Build ...@@ -13,33 +13,33 @@ Build
<h1>Build</h1> <h1>Build</h1>
<a href="#portability"> <a href="#portability">
Portability</a><br> Portability</a><br />
<a href="#environment"> <a href="#environment">
Environment</a><br> Environment</a><br />
<a href="#building"> <a href="#building">
Building the Software</a><br> Building the Software</a><br />
<a href="#maven2"> <a href="#maven2">
Using Maven 2</a><br> Using Maven 2</a><br />
<br><a name="portability"></a> <br /><a name="portability"></a>
<h2>Portability</h2> <h2>Portability</h2>
This database is written in Java and therefore works on many platforms. This database is written in Java and therefore works on many platforms.
It is also possible to compile it to a native executable using GCJ. It is also possible to compile it to a native executable using GCJ.
<br><a name="environment"></a> <br /><a name="environment"></a>
<h2>Environment</h2> <h2>Environment</h2>
To build the database executables, the following software stack was used. To build the database executables, the following software stack was used.
In most cases, newer version or compatible software works too, but this was not tested. In most cases, newer version or compatible software works too, but this was not tested.
<ul> <ul>
<li>Windows XP <li>Windows XP
<li>Sun JDK Version 1.4 </li><li>Sun JDK Version 1.4
<li>Apache Ant Version 1.6.5 </li><li>Apache Ant Version 1.6.5
<li>Mozilla Firefox 1.5 </li><li>Mozilla Firefox 1.5
<li>Eclipse Version 3.2.1 </li><li>Eclipse Version 3.2.1
<li>YourKit Java Profiler </li><li>YourKit Java Profiler
</ul> </li></ul>
<br><a name="building"></a> <br /><a name="building"></a>
<h2>Building the Software</h2> <h2>Building the Software</h2>
On the command line, go to the directory src and execute the following command: On the command line, go to the directory src and execute the following command:
<pre> <pre>
...@@ -56,7 +56,7 @@ ant jarClient ...@@ -56,7 +56,7 @@ ant jarClient
</pre> </pre>
The other targets may be used as well. The other targets may be used as well.
<br><a name="maven2"></a> <br /><a name="maven2"></a>
<h2>Using Maven 2</h2> <h2>Using Maven 2</h2>
<h3>Using a Central Repository</h3> <h3>Using a Central Repository</h3>
You can include the database in your Maven 2 project as a dependency. You can include the database in your Maven 2 project as a dependency.
......
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Data Types Data Types
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h1>Data Types</h1> <h1>Data Types</h1>
<c:forEach var="item" items="dataTypes"> <c:forEach var="item" items="dataTypes">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<c:forEach var="item" items="dataTypes"> <c:forEach var="item" items="dataTypes">
<br> <br />
<a name="sql${item.id}"></a><h3>${item.topic}</h3> <a name="sql${item.id}"></a><h3>${item.topic}</h3>
<pre> <pre>
${item.syntax} ${item.syntax}
...@@ -24,9 +24,9 @@ ${item.syntax} ...@@ -24,9 +24,9 @@ ${item.syntax}
<p> <p>
${item.text} ${item.text}
</p> </p>
<b>Example:</b><br> <b>Example:</b><br />
${item.example} ${item.example}
<br> <br />
</c:forEach> </c:forEach>
</div></td></tr></table></body></html> </div></td></tr></table></body></html>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). --> <!-- Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
H2 Database Engine H2 Database Engine
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml"> <link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml" />
<link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml"> <link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -13,14 +13,14 @@ H2 Database Engine ...@@ -13,14 +13,14 @@ H2 Database Engine
<h3>Version 1.0 / 2007-01-17 (Current)</h3> <h3>Version 1.0 / 2007-01-17 (Current)</h3>
<p> <p>
<a href="http://www.h2database.com/h2-setup-2007-01-17.exe">Windows Installer (2.7 MB)</a><br> <a href="http://www.h2database.com/h2-setup-2007-01-17.exe">Windows Installer (2.7 MB)</a><br />
<a href="http://www.h2database.com/h2-2007-01-17.zip">Platform-Independent Zip (3.6 MB)</a><br> <a href="http://www.h2database.com/h2-2007-01-17.zip">Platform-Independent Zip (3.6 MB)</a><br />
</p> </p>
<h3>Version 1.0 / 2006-08-31 (Last Stable)</h3> <h3>Version 1.0 / 2006-08-31 (Last Stable)</h3>
<p> <p>
<a href="http://www.h2database.com/h2-setup-2006-08-31.exe">Windows Installer (2.4 MB)</a><br> <a href="http://www.h2database.com/h2-setup-2006-08-31.exe">Windows Installer (2.4 MB)</a><br />
<a href="http://www.h2database.com/h2-2006-08-31.zip">Platform-Independent Zip (3.1 MB)</a><br> <a href="http://www.h2database.com/h2-2006-08-31.zip">Platform-Independent Zip (3.1 MB)</a><br />
</p> </p>
<p> <p>
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Frequently Asked Questions Frequently Asked Questions
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -18,9 +18,9 @@ Here is the list of known and confirmed issues as of ...@@ -18,9 +18,9 @@ Here is the list of known and confirmed issues as of
2007-01-30: 2007-01-30:
<ul> <ul>
<li>Can not build using ant with JDK 1.3 at the moment. However most things are fixed. <li>Can not build using ant with JDK 1.3 at the moment. However most things are fixed.
<li>Some problems have been found with right outer join. Internally, it is converted to left outer join, which </li><li>Some problems have been found with right outer join. Internally, it is converted to left outer join, which
does not always produce the correct results when used in combination with other joins. does not always produce the correct results when used in combination with other joins.
</ul> </li></ul>
<h3>Is this Database Engine Open Source?</h3> <h3>Is this Database Engine Open Source?</h3>
Yes. It is free to use and distribute, and the source code is included. Yes. It is free to use and distribute, and the source code is included.
...@@ -41,25 +41,25 @@ some problems that have not yet been found. ...@@ -41,25 +41,25 @@ some problems that have not yet been found.
Areas that are not completely tested: Areas that are not completely tested:
<ul> <ul>
<li>Platforms other than Windows XP and the Sun JVM 1.4 <li>Platforms other than Windows XP and the Sun JVM 1.4
<li>Data types BLOB, CLOB, VARCHAR_IGNORECASE, OTHER </li><li>Data types BLOB, CLOB, VARCHAR_IGNORECASE, OTHER
<li>Cluster mode, 2-Phase Commit, Savepoints </li><li>Cluster mode, 2-Phase Commit, Savepoints
<li>Server mode (well tested, but not as well as Embedded mode) </li><li>Server mode (well tested, but not as well as Embedded mode)
<li>Multi-Threading and using multiple connections </li><li>Multi-Threading and using multiple connections
<li>Updatable result sets </li><li>Updatable result sets
<li>Referential integrity and check constraints, Triggers </li><li>Referential integrity and check constraints, Triggers
<li>ALTER TABLE statements, Views, Linked Tables, Schema, UNION </li><li>ALTER TABLE statements, Views, Linked Tables, Schema, UNION
<li>Not all built-in functions are completely tested </li><li>Not all built-in functions are completely tested
<li>The Optimizer may not always select the best plan </li><li>The Optimizer may not always select the best plan
<li>24/7 operation and large databases (500 MB and up) </li><li>24/7 operation and large databases (500 MB and up)
<li>Wide indexes with large VARCHAR or VARBINARY columns and / or with a lot of columns </li><li>Wide indexes with large VARCHAR or VARBINARY columns and / or with a lot of columns
</ul> </li></ul>
Areas considered Experimental: Areas considered Experimental:
<ul> <ul>
<li>ODBC driver and the GCJ native version on Windows <li>ODBC driver and the GCJ native version on Windows
<li>Linear Hash Index </li><li>Linear Hash Index
<li>Compatibility modes for other databases (only some features are implemented) </li><li>Compatibility modes for other databases (only some features are implemented)
</ul> </li></ul>
<h3>How to Create a New Database?</h3> <h3>How to Create a New Database?</h3>
By default, a new database is automatically created if it does not yet exist. By default, a new database is automatically created if it does not yet exist.
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Features Features
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -13,125 +13,125 @@ Features ...@@ -13,125 +13,125 @@ Features
<h1>Features</h1> <h1>Features</h1>
<a href="#feature_list"> <a href="#feature_list">
Feature List</a><br> Feature List</a><br />
<a href="#comparison"> <a href="#comparison">
Comparison to Other Database Engines</a><br> Comparison to Other Database Engines</a><br />
<a href="#products_work_with"> <a href="#products_work_with">
Products that Work with H2</a><br> Products that Work with H2</a><br />
<a href="#why_java"> <a href="#why_java">
Why Java</a><br> Why Java</a><br />
<a href="#connection_modes"> <a href="#connection_modes">
Connection Modes</a><br> Connection Modes</a><br />
<a href="#database_url"> <a href="#database_url">
Database URL Overview</a><br> Database URL Overview</a><br />
<a href="#file_encryption"> <a href="#file_encryption">
Connecting to a Database with File Encryption</a><br> Connecting to a Database with File Encryption</a><br />
<a href="#database_file_locking"> <a href="#database_file_locking">
Database File Locking</a><br> Database File Locking</a><br />
<a href="#database_only_if_exists"> <a href="#database_only_if_exists">
Opening a Database Only if it Already Exists</a><br> Opening a Database Only if it Already Exists</a><br />
<a href="#closing_the_database"> <a href="#closing_the_database">
Closing the Database</a><br> Closing the Database</a><br />
<a href="#log_index_changes"> <a href="#log_index_changes">
Log Index Changes</a><br> Log Index Changes</a><br />
<a href="#multiple_connections"> <a href="#multiple_connections">
Multiple Connections</a><br> Multiple Connections</a><br />
<a href="#database_file_layout"> <a href="#database_file_layout">
Database File Layout</a><br> Database File Layout</a><br />
<a href="#logging_recovery"> <a href="#logging_recovery">
Logging and Recovery</a><br> Logging and Recovery</a><br />
<a href="#compatibility_modes"> <a href="#compatibility_modes">
Compatibility Modes</a><br> Compatibility Modes</a><br />
<a href="#trace_options"> <a href="#trace_options">
Using the Trace Options</a><br> Using the Trace Options</a><br />
<a href="#read_only"> <a href="#read_only">
Read Only Databases</a><br> Read Only Databases</a><br />
<a href="#storage_formats"> <a href="#storage_formats">
Binary and Text Storage Formats</a><br> Binary and Text Storage Formats</a><br />
<a href="#low_disk_space"> <a href="#low_disk_space">
Graceful Handling of Low Disk Space Situations</a><br> Graceful Handling of Low Disk Space Situations</a><br />
<a href="#computed_columns"> <a href="#computed_columns">
Computed Columns / Function Based Index</a><br> Computed Columns / Function Based Index</a><br />
<a href="#multi_dimensional"> <a href="#multi_dimensional">
Multi-Dimensional Indexes</a><br> Multi-Dimensional Indexes</a><br />
<a href="#passwords"> <a href="#passwords">
Using Passwords</a><br> Using Passwords</a><br />
<a href="#user_defined_functions"> <a href="#user_defined_functions">
User Defined Functions and Stored Procedures</a><br> User Defined Functions and Stored Procedures</a><br />
<a href="#triggers"> <a href="#triggers">
Triggers</a><br> Triggers</a><br />
<a href="#compacting"> <a href="#compacting">
Compacting a Database</a><br> Compacting a Database</a><br />
<a href="#cache_settings"> <a href="#cache_settings">
Cache Settings</a><br> Cache Settings</a><br />
<br><a name="feature_list"></a> <br /><a name="feature_list"></a>
<h2>Feature List</h2> <h2>Feature List</h2>
<h3>Main Features</h3> <h3>Main Features</h3>
<ul> <ul>
<li>Very fast database engine <li>Very fast database engine
<li>Free, with source code </li><li>Free, with source code
<li>Written in Java </li><li>Written in Java
<li>Supports standard SQL, JDBC API </li><li>Supports standard SQL, JDBC API
<li>Embedded and Server mode, Clustering support </li><li>Embedded and Server mode, Clustering support
<li>Strong security features </li><li>Strong security features
<li>Experimental native version (GCJ) and ODBC drivers </li><li>Experimental native version (GCJ) and ODBC drivers
</ul> </li></ul>
<h3>Additional Features</h3> <h3>Additional Features</h3>
<ul> <ul>
<li>Disk based or in-memory databases and tables, read-only database support, temporary tables <li>Disk based or in-memory databases and tables, read-only database support, temporary tables
<li>Transaction support (serializable transaction isolation), 2-phase-commit </li><li>Transaction support (serializable transaction isolation), 2-phase-commit
<li>Multiple connections, table level locking </li><li>Multiple connections, table level locking
<li>Cost based optimizer, using a genetic algorithm for complex queries, zero-administration </li><li>Cost based optimizer, using a genetic algorithm for complex queries, zero-administration
<li>Scrollable and updatable result set support, large result set, external result sorting, functions can return a result set </li><li>Scrollable and updatable result set support, large result set, external result sorting, functions can return a result set
<li>Encrypted database (AES or XTEA), SHA-256 password encryption, encryption functions, SSL </li><li>Encrypted database (AES or XTEA), SHA-256 password encryption, encryption functions, SSL
</ul> </li></ul>
<h3>SQL Support</h3> <h3>SQL Support</h3>
<ul> <ul>
<li>Compatibility modes for HSQLDB, MySQL and PostgreSQL <li>Compatibility modes for HSQLDB, MySQL and PostgreSQL
<li>Support for multiple schemas, information schema </li><li>Support for multiple schemas, information schema
<li>Referential integrity / foreign key constraints with cascade, check constraints </li><li>Referential integrity / foreign key constraints with cascade, check constraints
<li>Inner and outer joins, subqueries, read only views and inline views </li><li>Inner and outer joins, subqueries, read only views and inline views
<li>Triggers and Java functions / stored procedures </li><li>Triggers and Java functions / stored procedures
<li>Many built-in functions, including XML and lossless data compression </li><li>Many built-in functions, including XML and lossless data compression
<li>Wide range of data types including large objects (BLOB/CLOB) </li><li>Wide range of data types including large objects (BLOB/CLOB)
<li>Sequence and autoincrement columns, computed columns (can be used for function based indexes) </li><li>Sequence and autoincrement columns, computed columns (can be used for function based indexes)
<li>ORDER BY, GROUP BY, HAVING, UNION, LIMIT, TOP </li><li>ORDER BY, GROUP BY, HAVING, UNION, LIMIT, TOP
<li>Collation support, Users, Roles </li><li>Collation support, Users, Roles
</ul> </li></ul>
<h3>Security Features</h3> <h3>Security Features</h3>
<ul> <ul>
<li>User password authenticated uses SHA-256 and salt <li>User password authenticated uses SHA-256 and salt
<li>User passwords are never transmitted in plain text over the network (even when using insecure connections) </li><li>User passwords are never transmitted in plain text over the network (even when using insecure connections)
<li>All database files (including script files that can be used to backup data) can be encrypted using AES-256 and XTEA encryption algorithms </li><li>All database files (including script files that can be used to backup data) can be encrypted using AES-256 and XTEA encryption algorithms
<li>The remote JDBC driver supports TCP/IP connections over SSL/TLS </li><li>The remote JDBC driver supports TCP/IP connections over SSL/TLS
<li>The built-in web server supports connections over SSL/TLS </li><li>The built-in web server supports connections over SSL/TLS
<li>Passwords can be sent to the database using char arrays instead of Strings </li><li>Passwords can be sent to the database using char arrays instead of Strings
<li>Includes a solution for the SQL injection problem </li><li>Includes a solution for the SQL injection problem
</ul> </li></ul>
<h3>Other Features and Tools</h3> <h3>Other Features and Tools</h3>
<ul> <ul>
<li>Small footprint (smaller than 1 MB), low memory requirements <li>Small footprint (smaller than 1 MB), low memory requirements
<li>Multiple index types (b-tree, tree, hash, linear hash) </li><li>Multiple index types (b-tree, tree, hash, linear hash)
<li>Support for multi-dimensional indexes </li><li>Support for multi-dimensional indexes
<li>CSV file support </li><li>CSV file support
<li>Support for linked tables, and a built-in virtual 'range' table </li><li>Support for linked tables, and a built-in virtual 'range' table
<li>EXPLAIN PLAN support, sophisticated trace options </li><li>EXPLAIN PLAN support, sophisticated trace options
<li>Database closing can be delayed or disabled to improve the performance </li><li>Database closing can be delayed or disabled to improve the performance
<li>Web-based Console application (English, German, partially French and Spanish) with autocomplete </li><li>Web-based Console application (English, German, partially French and Spanish) with autocomplete
<li>The database can generate SQL script files </li><li>The database can generate SQL script files
<li>Contains a recovery tool that can dump the contents of the data file </li><li>Contains a recovery tool that can dump the contents of the data file
<li>Automatic re-compilation of prepared statements </li><li>Automatic re-compilation of prepared statements
<li>Uses a small number of database files, binary and text storage formats, graceful handling of low disk space situations </li><li>Uses a small number of database files, binary and text storage formats, graceful handling of low disk space situations
<li>Uses a checksum for each record and log entry for data integrity </li><li>Uses a checksum for each record and log entry for data integrity
<li>Well tested (high code coverage, randomized stress tests) </li><li>Well tested (high code coverage, randomized stress tests)
</ul> </li></ul>
<br><a name="comparison"></a> <br /><a name="comparison"></a>
<h2>Comparison to Other Database Engines</h2> <h2>Comparison to Other Database Engines</h2>
<table><tr> <table><tr>
...@@ -219,7 +219,7 @@ It looks like the development of this database has stopped. The last release was ...@@ -219,7 +219,7 @@ It looks like the development of this database has stopped. The last release was
<h3>McKoi</h3> <h3>McKoi</h3>
It looks like the development of this database has stopped. The last release was August 2004 It looks like the development of this database has stopped. The last release was August 2004
<br><a name="products_work_with"></a> <br /><a name="products_work_with"></a>
<h2>Products that Work with H2</h2> <h2>Products that Work with H2</h2>
<table> <table>
<tr><th>Product</th><th>Description</th></tr> <tr><th>Product</th><th>Description</th></tr>
...@@ -281,16 +281,16 @@ It looks like the development of this database has stopped. The last release was ...@@ -281,16 +281,16 @@ It looks like the development of this database has stopped. The last release was
</tr> </tr>
</table> </table>
<br><a name="why_java"></a> <br /><a name="why_java"></a>
<h2>Why Java</h2> <h2>Why Java</h2>
A few reasons using a Java database are: A few reasons using a Java database are:
<ul> <ul>
<li>Very simple to integrate in Java applications <li>Very simple to integrate in Java applications
<li>Support for many different platforms </li><li>Support for many different platforms
<li>More secure than native applications (no buffer overflows) </li><li>More secure than native applications (no buffer overflows)
<li>User defined functions (or triggers) run very fast </li><li>User defined functions (or triggers) run very fast
<li>Unicode support </li><li>Unicode support
</ul> </li></ul>
<p> <p>
Some people think that Java is still too slow for low level operations, Some people think that Java is still too slow for low level operations,
but this is not the case (not any more). In general, the code can be written a lot faster but this is not the case (not any more). In general, the code can be written a lot faster
...@@ -315,17 +315,17 @@ Java implementations (such as Swing) are not used or only used for specific feat ...@@ -315,17 +315,17 @@ Java implementations (such as Swing) are not used or only used for specific feat
(such as the SysTray library). (such as the SysTray library).
</p> </p>
<br><a name="connection_modes"></a> <br /><a name="connection_modes"></a>
<h2>Connection Modes</h2> <h2>Connection Modes</h2>
The following connection modes are supported: The following connection modes are supported:
<ul> <ul>
<li>Local connections using JDBC (embedded) <li>Local connections using JDBC (embedded)
<li>Remote connections using JDBC over TCP/IP (client/server) </li><li>Remote connections using JDBC over TCP/IP (client/server)
<li>Remote connections using ODBC over TCP/IP (client/server) </li><li>Remote connections using ODBC over TCP/IP (client/server)
<li>In-Memory databases (private and shared) </li><li>In-Memory databases (private and shared)
</ul> </li></ul>
<br><a name="database_url"></a> <br /><a name="database_url"></a>
<h2>Database URL Overview</h2> <h2>Database URL Overview</h2>
<p> <p>
This database does support multiple connection modes and features when connecting to a database. This database does support multiple connection modes and features when connecting to a database.
...@@ -335,10 +335,10 @@ This is achieved using different database URLs. The settings in the URLs are not ...@@ -335,10 +335,10 @@ This is achieved using different database URLs. The settings in the URLs are not
<tr> <tr>
<td>Embedded (local) connection</td> <td>Embedded (local) connection</td>
<td> <td>
jdbc:h2:[file:][&lt;path&gt;]&lt;databaseName&gt;<br> jdbc:h2:[file:][&lt;path&gt;]&lt;databaseName&gt;<br />
jdbc:h2:test<br> jdbc:h2:test<br />
jdbc:h2:file:/data/sample<br> jdbc:h2:file:/data/sample<br />
jdbc:h2:file:C:/data/sample (Windows only)<br> jdbc:h2:file:C:/data/sample (Windows only)<br />
</td> </td>
</tr> </tr>
<tr> <tr>
...@@ -348,46 +348,46 @@ This is achieved using different database URLs. The settings in the URLs are not ...@@ -348,46 +348,46 @@ This is achieved using different database URLs. The settings in the URLs are not
<tr> <tr>
<td>In-Memory (named)</td> <td>In-Memory (named)</td>
<td> <td>
jdbc:h2:mem:&lt;databaseName&gt;<br> jdbc:h2:mem:&lt;databaseName&gt;<br />
jdbc:h2:mem:test_mem jdbc:h2:mem:test_mem
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Remote using TCP/IP</td> <td>Remote using TCP/IP</td>
<td> <td>
jdbc:h2:tcp://&lt;server&gt;[&lt;port&gt;]/&lt;databaseName&gt;<br> jdbc:h2:tcp://&lt;server&gt;[&lt;port&gt;]/&lt;databaseName&gt;<br />
jdbc:h2:tcp://localhost/test<br> jdbc:h2:tcp://localhost/test<br />
jdbc:h2:tcp://dbserv:8084/sample jdbc:h2:tcp://dbserv:8084/sample
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Remote using SSL/TLS</td> <td>Remote using SSL/TLS</td>
<td> <td>
jdbc:h2:ssl://&lt;server&gt;[&lt;port&gt;]/&lt;databaseName&gt;<br> jdbc:h2:ssl://&lt;server&gt;[&lt;port&gt;]/&lt;databaseName&gt;<br />
jdbc:h2:ssl://secureserv:8085/sample; jdbc:h2:ssl://secureserv:8085/sample;
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Using Encrypted Files</td> <td>Using Encrypted Files</td>
<td> <td>
jdbc:h2:&lt;url&gt;;CIPHER=[AES][XTEA]<br> jdbc:h2:&lt;url&gt;;CIPHER=[AES][XTEA]<br />
jdbc:h2:ssl://secureserv/testdb;CIPHER=AES<br> jdbc:h2:ssl://secureserv/testdb;CIPHER=AES<br />
jdbc:h2:file:secure;CIPHER=XTEA<br> jdbc:h2:file:secure;CIPHER=XTEA<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>File Locking Methods</td> <td>File Locking Methods</td>
<td> <td>
jdbc:h2:&lt;url&gt;;FILE_LOCK={NO|FILE|SOCKET}<br> jdbc:h2:&lt;url&gt;;FILE_LOCK={NO|FILE|SOCKET}<br />
jdbc:h2:file:quickAndDirty;FILE_LOCK=NO<br> jdbc:h2:file:quickAndDirty;FILE_LOCK=NO<br />
jdbc:h2:file:private;CIPHER=XTEA;FILE_LOCK=SOCKET<br> jdbc:h2:file:private;CIPHER=XTEA;FILE_LOCK=SOCKET<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Only Open if it Already Exists</td> <td>Only Open if it Already Exists</td>
<td> <td>
jdbc:h2:&lt;url&gt;;IFEXISTS=TRUE<br> jdbc:h2:&lt;url&gt;;IFEXISTS=TRUE<br />
jdbc:h2:file:sample;IFEXISTS=TRUE<br> jdbc:h2:file:sample;IFEXISTS=TRUE<br />
</td> </td>
</tr> </tr>
<tr> <tr>
...@@ -399,35 +399,35 @@ This is achieved using different database URLs. The settings in the URLs are not ...@@ -399,35 +399,35 @@ This is achieved using different database URLs. The settings in the URLs are not
<tr> <tr>
<td>User Name and/or Password</td> <td>User Name and/or Password</td>
<td> <td>
jdbc:h2:&lt;url&gt;[;USER=&lt;username&gt;][;PASSWORD=&lt;value&gt;]<br> jdbc:h2:&lt;url&gt;[;USER=&lt;username&gt;][;PASSWORD=&lt;value&gt;]<br />
jdbc:h2:file:sample;USER=sa;PASSWORD=123<br> jdbc:h2:file:sample;USER=sa;PASSWORD=123<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Log Index Changes</td> <td>Log Index Changes</td>
<td> <td>
jdbc:h2:&lt;url&gt;;LOG=2<br> jdbc:h2:&lt;url&gt;;LOG=2<br />
jdbc:h2:file:sample;LOG=2<br> jdbc:h2:file:sample;LOG=2<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Debug Trace Settings</td> <td>Debug Trace Settings</td>
<td> <td>
jdbc:h2:&lt;url&gt;;TRACE_LEVEL_FILE=&lt;level 0..3&gt;<br> jdbc:h2:&lt;url&gt;;TRACE_LEVEL_FILE=&lt;level 0..3&gt;<br />
jdbc:h2:file:sample;TRACE_LEVEL_FILE=3<br> jdbc:h2:file:sample;TRACE_LEVEL_FILE=3<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Ignore Unknown Settings</td> <td>Ignore Unknown Settings</td>
<td> <td>
jdbc:h2:&lt;url&gt;;IGNORE_UNKNOWN_SETTINGS=TRUE<br> jdbc:h2:&lt;url&gt;;IGNORE_UNKNOWN_SETTINGS=TRUE<br />
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Changing Other Settings</td> <td>Changing Other Settings</td>
<td> <td>
jdbc:h2:&lt;url&gt;;&lt;setting&gt;=&lt;value&gt;[;&lt;setting&gt;=&lt;value&gt;...]<br> jdbc:h2:&lt;url&gt;;&lt;setting&gt;=&lt;value&gt;[;&lt;setting&gt;=&lt;value&gt;...]<br />
jdbc:h2:file:sample;TRACE_LEVEL_SYSTEM_OUT=3<br> jdbc:h2:file:sample;TRACE_LEVEL_SYSTEM_OUT=3<br />
</td> </td>
</tr> </tr>
</table> </table>
...@@ -457,7 +457,7 @@ An example database URL is: <code>jdbc:h2:tcp://localhost/mem:db1</code> ...@@ -457,7 +457,7 @@ An example database URL is: <code>jdbc:h2:tcp://localhost/mem:db1</code>
(using private database remotely is also possible). (using private database remotely is also possible).
</p> </p>
<br><a name="file_encryption"></a> <br /><a name="file_encryption"></a>
<h2>Connecting to a Database with File Encryption</h2> <h2>Connecting to a Database with File Encryption</h2>
To use file encryption, it is required to specify the encryption algorithm (the 'cipher') To use file encryption, it is required to specify the encryption algorithm (the 'cipher')
and the file password. The algorithm needs to be specified using the connection parameter. and the file password. The algorithm needs to be specified using the connection parameter.
...@@ -475,7 +475,7 @@ conn = DriverManager. ...@@ -475,7 +475,7 @@ conn = DriverManager.
getConnection(url, user, pwds); getConnection(url, user, pwds);
</pre> </pre>
<br><a name="database_file_locking"></a> <br /><a name="database_file_locking"></a>
<h2>Database File Locking</h2> <h2>Database File Locking</h2>
<p> <p>
Whenever a database is opened, a lock file is created to signal other processes Whenever a database is opened, a lock file is created to signal other processes
...@@ -487,12 +487,12 @@ The following file locking methods are implemented: ...@@ -487,12 +487,12 @@ The following file locking methods are implemented:
<ul> <ul>
<li>The default method is 'file' and uses a watchdog thread to <li>The default method is 'file' and uses a watchdog thread to
protect the database file. The watchdog reads the lock file each second. protect the database file. The watchdog reads the lock file each second.
<li>The second method is 'socket' and opens a server socket. The socket method does </li><li>The second method is 'socket' and opens a server socket. The socket method does
not require reading the lock file every second. The socket method should only be used not require reading the lock file every second. The socket method should only be used
if the database files are only accessed by the one (and always the same) computer. if the database files are only accessed by the one (and always the same) computer.
<li>It is also possible to open the database without file locking; </li><li>It is also possible to open the database without file locking;
in this case it is up to the application to protect the database files. in this case it is up to the application to protect the database files.
</ul> </li></ul>
To open the database with a different file locking method, use the parameter 'FILE_LOCK'. To open the database with a different file locking method, use the parameter 'FILE_LOCK'.
The following code opens the database with the 'socket' locking method: The following code opens the database with the 'socket' locking method:
<pre> <pre>
...@@ -507,7 +507,7 @@ String url = "jdbc:h2:test;FILE_LOCK=NO"; ...@@ -507,7 +507,7 @@ String url = "jdbc:h2:test;FILE_LOCK=NO";
For more information about the algorithms please see in Advanced Topics under For more information about the algorithms please see in Advanced Topics under
File Locking Protocol. File Locking Protocol.
<br><a name="database_only_if_exists"></a> <br /><a name="database_only_if_exists"></a>
<h2>Opening a Database Only if it Already Exists</h2> <h2>Opening a Database Only if it Already Exists</h2>
By default, when an application calls <code>DriverManager.getConnection(url,...)</code> By default, when an application calls <code>DriverManager.getConnection(url,...)</code>
and the database specified in the URL does not yet exist, a new (empty) database is created. and the database specified in the URL does not yet exist, a new (empty) database is created.
...@@ -520,7 +520,7 @@ The complete URL may look like this: ...@@ -520,7 +520,7 @@ The complete URL may look like this:
String url = "jdbc:h2:/data/sample;IFEXISTS=TRUE"; String url = "jdbc:h2:/data/sample;IFEXISTS=TRUE";
</pre> </pre>
<br><a name="closing_the_database"></a> <br /><a name="closing_the_database"></a>
<h2>Closing the Database</h2> <h2>Closing the Database</h2>
<h3>Delayed Database Closing</h3> <h3>Delayed Database Closing</h3>
...@@ -551,7 +551,7 @@ The database URL to disable database closing on exit is: ...@@ -551,7 +551,7 @@ The database URL to disable database closing on exit is:
String url = "jdbc:h2:test;DB_CLOSE_ON_EXIT=FALSE"; String url = "jdbc:h2:test;DB_CLOSE_ON_EXIT=FALSE";
</pre> </pre>
<br><a name="log_index_changes"></a> <br /><a name="log_index_changes"></a>
<h2>Log Index Changes</h2> <h2>Log Index Changes</h2>
Usually, changes to the index file are not logged for performance. Usually, changes to the index file are not logged for performance.
If the index file is corrupt or missing when opening a database, it is re-created from the data. If the index file is corrupt or missing when opening a database, it is re-created from the data.
...@@ -582,7 +582,7 @@ same as executing the statement <code>SET setting value</code> just after ...@@ -582,7 +582,7 @@ same as executing the statement <code>SET setting value</code> just after
connecting. For a list of settings supported by this database please see the connecting. For a list of settings supported by this database please see the
SQL grammar documentation. SQL grammar documentation.
<br><a name="multiple_connections"></a> <br /><a name="multiple_connections"></a>
<h2>Multiple Connections</h2> <h2>Multiple Connections</h2>
<h3>Opening Multiple Databases at the Same Time</h3> <h3>Opening Multiple Databases at the Same Time</h3>
...@@ -626,8 +626,8 @@ Here is an overview on what statements generate what type of lock: ...@@ -626,8 +626,8 @@ Here is an overview on what statements generate what type of lock:
Read Read
</td> </td>
<td> <td>
SELECT * FROM TEST<br> SELECT * FROM TEST<br />
CALL SELECT MAX(ID) FROM TEST<br> CALL SELECT MAX(ID) FROM TEST<br />
SCRIPT SCRIPT
</td> </td>
</tr> </tr>
...@@ -644,9 +644,9 @@ Here is an overview on what statements generate what type of lock: ...@@ -644,9 +644,9 @@ Here is an overview on what statements generate what type of lock:
Write Write
</td> </td>
<td> <td>
INSERT INTO TEST VALUES(1, 'Hello')<br> INSERT INTO TEST VALUES(1, 'Hello')<br />
INSERT INTO TEST SELECT * FROM TEST<br> INSERT INTO TEST SELECT * FROM TEST<br />
UPDATE TEST SET NAME='Hi'<br> UPDATE TEST SET NAME='Hi'<br />
DELETE FROM TEST DELETE FROM TEST
</td> </td>
</tr> </tr>
...@@ -655,8 +655,8 @@ Here is an overview on what statements generate what type of lock: ...@@ -655,8 +655,8 @@ Here is an overview on what statements generate what type of lock:
Write Write
</td> </td>
<td> <td>
ALTER TABLE TEST ...<br> ALTER TABLE TEST ...<br />
CREATE INDEX ... ON TEST ...<br> CREATE INDEX ... ON TEST ...<br />
DROP INDEX ... DROP INDEX ...
</td> </td>
</tr> </tr>
...@@ -668,7 +668,7 @@ The initial lock timeout (that is the timeout used for new connections) can be s ...@@ -668,7 +668,7 @@ The initial lock timeout (that is the timeout used for new connections) can be s
SET DEFAULT_LOCK_TIMEOUT &lt;milliseconds&gt;. The default lock timeout is persistent. SET DEFAULT_LOCK_TIMEOUT &lt;milliseconds&gt;. The default lock timeout is persistent.
</p> </p>
<br><a name="database_file_layout"></a> <br /><a name="database_file_layout"></a>
<h2>Database File Layout</h2> <h2>Database File Layout</h2>
<p> <p>
There are a number of files created for persistent databases. Other than some databases, There are a number of files created for persistent databases. Other than some databases,
...@@ -683,8 +683,8 @@ The following files can be created by the database: ...@@ -683,8 +683,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.data.db test.data.db
</td><td> </td><td>
Data file<br> Data file<br />
Contains the data for all tables<br> Contains the data for all tables<br />
Format: &lt;database&gt;.data.db Format: &lt;database&gt;.data.db
</td><td> </td><td>
1 per database 1 per database
...@@ -692,8 +692,8 @@ The following files can be created by the database: ...@@ -692,8 +692,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.index.db test.index.db
</td><td> </td><td>
Index file<br> Index file<br />
Contains the data for all (btree) indexes<br> Contains the data for all (btree) indexes<br />
Format: &lt;database&gt;.index.db Format: &lt;database&gt;.index.db
</td><td> </td><td>
1 per database 1 per database
...@@ -701,8 +701,8 @@ The following files can be created by the database: ...@@ -701,8 +701,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.0.log.db test.0.log.db
</td><td> </td><td>
Log file<br> Log file<br />
The log file is used for recovery<br> The log file is used for recovery<br />
Format: &lt;database&gt;.&lt;id&gt;.log.db Format: &lt;database&gt;.&lt;id&gt;.log.db
</td><td> </td><td>
0 or more per database 0 or more per database
...@@ -710,8 +710,8 @@ The following files can be created by the database: ...@@ -710,8 +710,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.lock.db test.lock.db
</td><td> </td><td>
Database lock file<br> Database lock file<br />
Exists only if the database is open<br> Exists only if the database is open<br />
Format: &lt;database&gt;.lock.db Format: &lt;database&gt;.lock.db
</td><td> </td><td>
1 per database 1 per database
...@@ -719,9 +719,9 @@ The following files can be created by the database: ...@@ -719,9 +719,9 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.trace.db test.trace.db
</td><td> </td><td>
Trace file<br> Trace file<br />
Contains trace information<br> Contains trace information<br />
Format: &lt;database&gt;.trace.db<br> Format: &lt;database&gt;.trace.db<br />
If the file is too big, it is renamed to &lt;database&gt;.trace.db.old If the file is too big, it is renamed to &lt;database&gt;.trace.db.old
</td><td> </td><td>
1 per database 1 per database
...@@ -729,8 +729,8 @@ The following files can be created by the database: ...@@ -729,8 +729,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.14.15.lob.db test.14.15.lob.db
</td><td> </td><td>
Large object<br> Large object<br />
Contains the data for BLOB or CLOB<br> Contains the data for BLOB or CLOB<br />
Format: &lt;database&gt;.&lt;tableid&gt;.&lt;id&gt;.lob.db Format: &lt;database&gt;.&lt;tableid&gt;.&lt;id&gt;.lob.db
</td><td> </td><td>
1 per object 1 per object
...@@ -738,8 +738,8 @@ The following files can be created by the database: ...@@ -738,8 +738,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.123.temp.db test.123.temp.db
</td><td> </td><td>
Temporary file<br> Temporary file<br />
Contains a temporary blob or a large result set<br> Contains a temporary blob or a large result set<br />
Format: &lt;database&gt;.&lt;session id&gt;.&lt;object id&gt;.temp.db Format: &lt;database&gt;.&lt;session id&gt;.&lt;object id&gt;.temp.db
</td><td> </td><td>
1 per object 1 per object
...@@ -747,8 +747,8 @@ The following files can be created by the database: ...@@ -747,8 +747,8 @@ The following files can be created by the database:
<tr><td> <tr><td>
test.7.hash.db test.7.hash.db
</td><td> </td><td>
Hash index file<br> Hash index file<br />
Contains the data for a linear hash index<br> Contains the data for a linear hash index<br />
Format: &lt;database&gt;.&lt;object id&gt;.hash.db Format: &lt;database&gt;.&lt;object id&gt;.hash.db
</td><td> </td><td>
1 per linear hash index 1 per linear hash index
...@@ -775,7 +775,7 @@ automatically if they don't exist. ...@@ -775,7 +775,7 @@ automatically if they don't exist.
To backup data while the database is running, the SQL command SCRIPT can be used. To backup data while the database is running, the SQL command SCRIPT can be used.
</p> </p>
<br><a name="logging_recovery"></a> <br /><a name="logging_recovery"></a>
<h2>Logging and Recovery</h2> <h2>Logging and Recovery</h2>
<p> <p>
Whenever data is modified in the database and those changes are committed, the changes are logged Whenever data is modified in the database and those changes are committed, the changes are logged
...@@ -799,7 +799,7 @@ must contain RECOVER=1, as in jdbc:h2:test;RECOVER=1. Indexes are rebuilt in thi ...@@ -799,7 +799,7 @@ must contain RECOVER=1, as in jdbc:h2:test;RECOVER=1. Indexes are rebuilt in thi
the summary (object allocation table) is not read in this case, so opening the database takes longer. the summary (object allocation table) is not read in this case, so opening the database takes longer.
</p> </p>
<br><a name="compatibility_modes"></a> <br /><a name="compatibility_modes"></a>
<h2>Compatibility Modes</h2> <h2>Compatibility Modes</h2>
<p> <p>
All database engines behave a little bit different. For certain features, All database engines behave a little bit different. For certain features,
...@@ -836,17 +836,17 @@ Here is the list of currently supported modes and the difference to the regular ...@@ -836,17 +836,17 @@ Here is the list of currently supported modes and the difference to the regular
</td></tr> </td></tr>
</table> </table>
<br><a name="trace_options"></a> <br /><a name="trace_options"></a>
<h2>Using the Trace Options</h2> <h2>Using the Trace Options</h2>
To find problems in an application, it is sometimes good to see what database operations To find problems in an application, it is sometimes good to see what database operations
where executed. This database offers the following trace features: where executed. This database offers the following trace features:
<ul> <ul>
<li>Trace to System.out and/or a file <li>Trace to System.out and/or a file
<li>Support for trace levels OFF, ERROR, INFO, and DEBUG </li><li>Support for trace levels OFF, ERROR, INFO, and DEBUG
<li>The maximum size of the trace file can be set </li><li>The maximum size of the trace file can be set
<li>The Java code generation is possible </li><li>The Java code generation is possible
<li>Trace can be enabled at runtime by manually creating a file </li><li>Trace can be enabled at runtime by manually creating a file
</ul> </li></ul>
<h3>Trace Options</h3> <h3>Trace Options</h3>
The simplest way to enable the trace option is setting it in the database URL. The simplest way to enable the trace option is setting it in the database URL.
...@@ -921,7 +921,7 @@ However, if the start file is read only, the database engine cannot delete the f ...@@ -921,7 +921,7 @@ However, if the start file is read only, the database engine cannot delete the f
will always enable the trace mode when connecting. will always enable the trace mode when connecting.
</p> </p>
<br><a name="read_only"></a> <br /><a name="read_only"></a>
<h2>Read Only Databases</h2> <h2>Read Only Databases</h2>
If the database files are read-only, then the database is read-only as well. If the database files are read-only, then the database is read-only as well.
It is not possible to create new tables, add or modify data in this database. It is not possible to create new tables, add or modify data in this database.
...@@ -932,7 +932,7 @@ When you open the database now, it is read-only. ...@@ -932,7 +932,7 @@ When you open the database now, it is read-only.
There are two ways an application can find out a database is read-only: There are two ways an application can find out a database is read-only:
By calling Connection.isReadOnly() or by executing the SQL statement CALL READONLY(). By calling Connection.isReadOnly() or by executing the SQL statement CALL READONLY().
<br><a name="storage_formats"></a> <br /><a name="storage_formats"></a>
<h2>Binary and Text Storage Formats</h2> <h2>Binary and Text Storage Formats</h2>
This database engine supports both binary and text storage formats. This database engine supports both binary and text storage formats.
The binary format is faster, but the text storage format can be useful as well, The binary format is faster, but the text storage format can be useful as well,
...@@ -942,7 +942,7 @@ New databases are created in the binary storage format by default. ...@@ -942,7 +942,7 @@ New databases are created in the binary storage format by default.
To create a new database in the text storage format, the database URL must contain To create a new database in the text storage format, the database URL must contain
the parameter STORAGE=TEXT. Example URL: jdbc:h2:test;STORAGE=TEXT the parameter STORAGE=TEXT. Example URL: jdbc:h2:test;STORAGE=TEXT
<br><a name="low_disk_space"></a> <br /><a name="low_disk_space"></a>
<h2>Graceful Handling of Low Disk Space Situations</h2> <h2>Graceful Handling of Low Disk Space Situations</h2>
<p> <p>
The database is able to deal with situations where the disk space available is running low. The database is able to deal with situations where the disk space available is running low.
...@@ -968,7 +968,7 @@ If a database can not be opened because the boot info (the SQL script that is ru ...@@ -968,7 +968,7 @@ If a database can not be opened because the boot info (the SQL script that is ru
is corrupted, then the database can be opened by specifying a database event listener. is corrupted, then the database can be opened by specifying a database event listener.
The exceptions are logged, but opening the database will continue. The exceptions are logged, but opening the database will continue.
<br><a name="computed_columns"></a> <br /><a name="computed_columns"></a>
<h2>Computed Columns / Function Based Index</h2> <h2>Computed Columns / Function Based Index</h2>
Function indexes are not directly supported by this database, but they can be easily emulated Function indexes are not directly supported by this database, but they can be easily emulated
by using computed columns. For example, if an index on the upper-case version of by using computed columns. For example, if an index on the upper-case version of
...@@ -990,7 +990,7 @@ INSERT INTO ADDRESS(ID, NAME) VALUES(1, 'Miller'); ...@@ -990,7 +990,7 @@ INSERT INTO ADDRESS(ID, NAME) VALUES(1, 'Miller');
SELECT * FROM ADDRESS WHERE UPPER_NAME='MILLER'; SELECT * FROM ADDRESS WHERE UPPER_NAME='MILLER';
</pre> </pre>
<br><a name="multi_dimensional"></a> <br /><a name="multi_dimensional"></a>
<h2>Multi-Dimensional Indexes</h2> <h2>Multi-Dimensional Indexes</h2>
<p> <p>
A tool is provided to execute efficient multi-dimension (spatial) range queries. A tool is provided to execute efficient multi-dimension (spatial) range queries.
...@@ -1013,7 +1013,7 @@ For an example how to use the tool, please have a look at the sample code provid ...@@ -1013,7 +1013,7 @@ For an example how to use the tool, please have a look at the sample code provid
in TestMultiDimension.java. in TestMultiDimension.java.
</p> </p>
<br><a name="passwords"></a> <br /><a name="passwords"></a>
<h2>Using Passwords</h2> <h2>Using Passwords</h2>
<h3>Using Secure Passwords</h3> <h3>Using Secure Passwords</h3>
...@@ -1077,7 +1077,7 @@ Connection conn = DriverManager. ...@@ -1077,7 +1077,7 @@ Connection conn = DriverManager.
</code> </code>
The settings in the URL override the settings passed as a separate parameter. The settings in the URL override the settings passed as a separate parameter.
<br><a name="user_defined_functions"></a> <br /><a name="user_defined_functions"></a>
<h2>User Defined Functions and Stored Procedures</h2> <h2>User Defined Functions and Stored Procedures</h2>
In addition to the built-in functions, this database supports user defined Java functions. In addition to the built-in functions, this database supports user defined Java functions.
...@@ -1170,7 +1170,7 @@ CREATE ALIAS MATRIX FOR "org.h2.samples.Function.getMatrix"; ...@@ -1170,7 +1170,7 @@ CREATE ALIAS MATRIX FOR "org.h2.samples.Function.getMatrix";
SELECT * FROM MATRIX(3) WHERE X>0; SELECT * FROM MATRIX(3) WHERE X>0;
</pre> </pre>
<br><a name="triggers"></a> <br /><a name="triggers"></a>
<h2>Triggers</h2> <h2>Triggers</h2>
This database supports Java triggers that are called before or after a row is updated, inserted or deleted. This database supports Java triggers that are called before or after a row is updated, inserted or deleted.
Triggers can be used for complex consistency checks, or to update related data in the database. Triggers can be used for complex consistency checks, or to update related data in the database.
...@@ -1197,7 +1197,7 @@ CREATE TRIGGER INV_INS AFTER INSERT ON INVOICE ...@@ -1197,7 +1197,7 @@ CREATE TRIGGER INV_INS AFTER INSERT ON INVOICE
</pre> </pre>
The trigger can be used to veto a change, by throwing a SQL Exception. The trigger can be used to veto a change, by throwing a SQL Exception.
<br><a name="compacting"></a> <br /><a name="compacting"></a>
<h2>Compacting a Database</h2> <h2>Compacting a Database</h2>
Empty space in the database file is re-used automatically. Empty space in the database file is re-used automatically.
To re-build the indexes, the most simple way is to delete the .index.db file To re-build the indexes, the most simple way is to delete the .index.db file
...@@ -1218,7 +1218,7 @@ See also the sample application org.h2.samples.Compact. ...@@ -1218,7 +1218,7 @@ See also the sample application org.h2.samples.Compact.
The commands SCRIPT / RUNSCRIPT can be used as well to create the a backup The commands SCRIPT / RUNSCRIPT can be used as well to create the a backup
of a database and re-build the database from the script. of a database and re-build the database from the script.
<br><a name="cache_settings"></a> <br /><a name="cache_settings"></a>
<h2>Cache Settings</h2> <h2>Cache Settings</h2>
<p> <p>
The database keeps most frequently used data and index pages in the main memory. The database keeps most frequently used data and index pages in the main memory.
......
...@@ -5,16 +5,16 @@ Initial Developer: H2 Group ...@@ -5,16 +5,16 @@ Initial Developer: H2 Group
--> -->
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>H2 Database Engine</title> <title>H2 Database Engine</title>
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
<link rel="stylesheet" type="text/css" href="stylesheet.css"> <link rel="stylesheet" type="text/css" href="stylesheet.css" />
<link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml"> <link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml" />
<link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml"> <link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml" />
</head> </head>
<frameset cols="180,*" rows="*" frameborder="2" framespacing="4" border="4" onLoad="loadFrameset()"> <frameset cols="180,*" rows="*" frameborder="2" framespacing="4" border="4" onLoad="loadFrameset()">
<frame frameborder="0" marginheight="0" marginwidth="0" src="search.html" name="menu"> <frame frameborder="0" marginheight="0" marginwidth="0" src="search.html" name="menu" />
<frame frameborder="0" marginheight="0" marginwidth="0" src="main.html" name="main"> <frame frameborder="0" marginheight="0" marginwidth="0" src="main.html" name="main" />
</frameset> </frameset>
<noframes> <noframes>
<body> <body>
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Functions Functions
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -14,31 +14,31 @@ Functions ...@@ -14,31 +14,31 @@ Functions
<h2>Aggregate Functions</h2> <h2>Aggregate Functions</h2>
<c:forEach var="item" items="functionsAggregate"> <c:forEach var="item" items="functionsAggregate">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>Numeric Functions</h2> <h2>Numeric Functions</h2>
<c:forEach var="item" items="functionsNumeric"> <c:forEach var="item" items="functionsNumeric">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>String Functions</h2> <h2>String Functions</h2>
<c:forEach var="item" items="functionsString"> <c:forEach var="item" items="functionsString">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>Time and Date Functions</h2> <h2>Time and Date Functions</h2>
<c:forEach var="item" items="functionsTimeDate"> <c:forEach var="item" items="functionsTimeDate">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>System Functions</h2> <h2>System Functions</h2>
<c:forEach var="item" items="functionsSystem"> <c:forEach var="item" items="functionsSystem">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<c:forEach var="item" items="functionsAll"> <c:forEach var="item" items="functionsAll">
<br> <br />
<a name="sql${item.id}"></a><h3>${item.topic}</h3> <a name="sql${item.id}"></a><h3>${item.topic}</h3>
<pre> <pre>
${item.syntax} ${item.syntax}
...@@ -46,9 +46,9 @@ ${item.syntax} ...@@ -46,9 +46,9 @@ ${item.syntax}
<p> <p>
${item.text} ${item.text}
</p> </p>
<b>Example:</b><br> <b>Example:</b><br />
${item.example} ${item.example}
<br> <br />
</c:forEach> </c:forEach>
</div></td></tr></table></body></html> </div></td></tr></table></body></html>
\ No newline at end of file
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
SQL Grammar SQL Grammar
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -13,23 +13,23 @@ SQL Grammar ...@@ -13,23 +13,23 @@ SQL Grammar
<h1>SQL Grammar</h1> <h1>SQL Grammar</h1>
<h2>Commands (Data Manipulation)</h2> <h2>Commands (Data Manipulation)</h2>
<c:forEach var="item" items="commandsDML"> <c:forEach var="item" items="commandsDML">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>Commands (Data Definition)</h2> <h2>Commands (Data Definition)</h2>
<c:forEach var="item" items="commandsDDL"> <c:forEach var="item" items="commandsDDL">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>Commands (Other)</h2> <h2>Commands (Other)</h2>
<c:forEach var="item" items="commandsOther"> <c:forEach var="item" items="commandsOther">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<h2>Other Grammar</h2> <h2>Other Grammar</h2>
<c:forEach var="item" items="otherGrammar"> <c:forEach var="item" items="otherGrammar">
<a href="#sql${item.id}">${item.topic}</a><br> <a href="#sql${item.id}">${item.topic}</a><br />
</c:forEach> </c:forEach>
<c:forEach var="item" items="commands"> <c:forEach var="item" items="commands">
<br> <br />
<a name="sql${item.id}"></a><h3>${item.topic}</h3> <a name="sql${item.id}"></a><h3>${item.topic}</h3>
<pre> <pre>
${item.syntax} ${item.syntax}
...@@ -37,13 +37,13 @@ ${item.syntax} ...@@ -37,13 +37,13 @@ ${item.syntax}
<p> <p>
${item.text} ${item.text}
</p> </p>
<b>Example:</b><br> <b>Example:</b><br />
${item.example} ${item.example}
<br> <br />
</c:forEach> </c:forEach>
<c:forEach var="item" items="otherGrammar"> <c:forEach var="item" items="otherGrammar">
<br> <br />
<a name="sql${item.id}"></a><h3>${item.topic}</h3> <a name="sql${item.id}"></a><h3>${item.topic}</h3>
<pre> <pre>
${item.syntax} ${item.syntax}
...@@ -51,9 +51,9 @@ ${item.syntax} ...@@ -51,9 +51,9 @@ ${item.syntax}
<p> <p>
${item.text} ${item.text}
</p> </p>
<b>Example:</b><br> <b>Example:</b><br />
${item.example} ${item.example}
<br> <br />
</c:forEach> </c:forEach>
</div></td></tr></table></body></html> </div></td></tr></table></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Installation Installation
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -13,25 +13,25 @@ Installation ...@@ -13,25 +13,25 @@ Installation
<h1>Installation</h1> <h1>Installation</h1>
<a href="#requirements"> <a href="#requirements">
Requirements</a><br> Requirements</a><br />
<a href="#supported_platforms"> <a href="#supported_platforms">
Supported Platforms</a><br> Supported Platforms</a><br />
<a href="#installing"> <a href="#installing">
Installing the Software</a><br> Installing the Software</a><br />
<a href="#directory_structure"> <a href="#directory_structure">
Directory Structure</a><br> Directory Structure</a><br />
<br><a name="requirements"></a> <br /><a name="requirements"></a>
<h2>Requirements</h2> <h2>Requirements</h2>
To run the database, the following software stack is known to work. To run the database, the following software stack is known to work.
Compatible software works too, but this was not tested. Compatible software works too, but this was not tested.
<ul> <ul>
<li>Windows XP <li>Windows XP
<li>Sun JDK Version 1.4 </li><li>Sun JDK Version 1.4
<li>Mozilla Firefox 1.5 </li><li>Mozilla Firefox 1.5
</ul> </li></ul>
<br><a name="supported_platforms"></a> <br /><a name="supported_platforms"></a>
<h2>Supported Platforms</h2> <h2>Supported Platforms</h2>
As this database is written in Java, it can be run on many different platforms. As this database is written in Java, it can be run on many different platforms.
It is tested with Java 1.4 and 1.5, but can also be compiled to native code using GCJ. It is tested with Java 1.4 and 1.5, but can also be compiled to native code using GCJ.
...@@ -39,11 +39,11 @@ The source code does not use features of Java 1.5. Currently, the database is ...@@ -39,11 +39,11 @@ The source code does not use features of Java 1.5. Currently, the database is
developed and tested on Windows XP using the Sun JDKs, but probably it also developed and tested on Windows XP using the Sun JDKs, but probably it also
works in many other operating systems and using other Java runtime environments. works in many other operating systems and using other Java runtime environments.
<br><a name="installing"></a> <br /><a name="installing"></a>
<h2>Installing the Software</h2> <h2>Installing the Software</h2>
To install the software, run the installer or unzip it to a directory of your choice. To install the software, run the installer or unzip it to a directory of your choice.
<br><a name="directory_structure"></a> <br /><a name="directory_structure"></a>
<h2>Directory Structure</h2> <h2>Directory Structure</h2>
<p> <p>
After installing, you should get the following directory structure: After installing, you should get the following directory structure:
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
License License
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -17,11 +17,12 @@ This license is a modified version of the MPL 1.1 available at <a href="http://w ...@@ -17,11 +17,12 @@ This license is a modified version of the MPL 1.1 available at <a href="http://w
the changes are <u>underlined</u>. the changes are <u>underlined</u>.
There is a License FAQ section at the Mozilla web site, most of that is applicable to the H2 License as well. There is a License FAQ section at the Mozilla web site, most of that is applicable to the H2 License as well.
<ul> <ul>
<li>You can use H2 for free. You can integrate it into your application (including commercial applications), and you can distribute it. <li>You can use H2 for free. You can integrate it into your application (including commercial applications),
<li>Files containing only your code are not covered by this license (it is 'commercial friendly'). and you can distribute it.
<li>Modifications to the H2 source code must be published. </li><li>Files containing only your code are not covered by this license (it is 'commercial friendly').
<li>You don't need to provide the source code of H2 if you did not modify anything. </li><li>Modifications to the H2 source code must be published.
</ul> </li><li>You don't need to provide the source code of H2 if you did not modify anything.
</li></ul>
<p> <p>
However, nobody is allowed to rename H2, modify it a little, and sell it as a database engine without telling the customers it is in fact H2. However, nobody is allowed to rename H2, modify it a little, and sell it as a database engine without telling the customers it is in fact H2.
...@@ -81,9 +82,9 @@ copyright and license as the original code. The copyright of the ported source c ...@@ -81,9 +82,9 @@ copyright and license as the original code. The copyright of the ported source c
<ol type="a"> <ol type="a">
<li id="section-1.9-a">Any addition to or deletion from the contents of a file <li id="section-1.9-a">Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications. containing Original Code or previous Modifications.
<li id="section-1.9-b">Any new file that contains any part of the Original Code or </li><li id="section-1.9-b">Any new file that contains any part of the Original Code or
previous Modifications. previous Modifications.
</ol> </li></ol>
<p id="section-1.10"><b>1.10. "Original Code"</b> <p id="section-1.10"><b>1.10. "Original Code"</b>
means Source Code of computer software code which is described in the Source Code means Source Code of computer software code which is described in the Source Code
notice required by <a href="#exhibit-a">Exhibit A</a> as Original Code, and which, notice required by <a href="#exhibit-a">Exhibit A</a> as Original Code, and which,
...@@ -124,19 +125,19 @@ copyright and license as the original code. The copyright of the ported source c ...@@ -124,19 +125,19 @@ copyright and license as the original code. The copyright of the ported source c
trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform,
sublicense and distribute the Original Code (or portions thereof) with or without sublicense and distribute the Original Code (or portions thereof) with or without
Modifications, and/or as part of a Larger Work; and Modifications, and/or as part of a Larger Work; and
<li id="section-2.1-b">under Patents Claims infringed by the making, using or selling </li><li id="section-2.1-b">under Patents Claims infringed by the making, using or selling
of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or
otherwise dispose of the Original Code (or portions thereof). otherwise dispose of the Original Code (or portions thereof).
<li id="section-2.1-c">the licenses granted in this Section 2.1 </li><li id="section-2.1-c">the licenses granted in this Section 2.1
(<a href="#section-2.1-a">a</a>) and (<a href="#section-2.1-b">b</a>) are effective on (<a href="#section-2.1-a">a</a>) and (<a href="#section-2.1-b">b</a>) are effective on
the date Initial Developer first distributes Original Code under the terms of this the date Initial Developer first distributes Original Code under the terms of this
License. License.
<li id="section-2.1-d">Notwithstanding Section 2.1 (<a href="#section-2.1-b">b</a>) </li><li id="section-2.1-d">Notwithstanding Section 2.1 (<a href="#section-2.1-b">b</a>)
above, no patent license is granted: 1) for code that You delete from the Original Code; above, no patent license is granted: 1) for code that You delete from the Original Code;
2) separate from the Original Code; or 3) for infringements caused by: i) the 2) separate from the Original Code; or 3) for infringements caused by: i) the
modification of the Original Code or ii) the combination of the Original Code with other modification of the Original Code or ii) the combination of the Original Code with other
software or devices. software or devices.
</ol> </li></ol>
<h4 id="section-2.2">2.2. Contributor Grant</h4> <h4 id="section-2.2">2.2. Contributor Grant</h4>
Subject to third party intellectual property claims, each Contributor hereby grants You Subject to third party intellectual property claims, each Contributor hereby grants You
...@@ -147,23 +148,23 @@ copyright and license as the original code. The copyright of the ported source c ...@@ -147,23 +148,23 @@ copyright and license as the original code. The copyright of the ported source c
distribute the Modifications created by such Contributor (or portions thereof) either on distribute the Modifications created by such Contributor (or portions thereof) either on
an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger
Work; and Work; and
<li id="section-2.2-b">under Patent Claims infringed by the making, using, or selling of </li><li id="section-2.2-b">under Patent Claims infringed by the making, using, or selling of
Modifications made by that Contributor either alone and/or in combination with its Modifications made by that Contributor either alone and/or in combination with its
Contributor Version (or portions of such combination), to make, use, sell, offer for Contributor Version (or portions of such combination), to make, use, sell, offer for
sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor
(or portions thereof); and 2) the combination of Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor
with its Contributor Version (or portions of such combination). with its Contributor Version (or portions of such combination).
<li id="section-2.2-c">the licenses granted in Sections 2.2 </li><li id="section-2.2-c">the licenses granted in Sections 2.2
(<a href="#section-2.2-a">a</a>) and 2.2 (<a href="#section-2.2-b">b</a>) are effective (<a href="#section-2.2-a">a</a>) and 2.2 (<a href="#section-2.2-b">b</a>) are effective
on the date Contributor first makes Commercial Use of the Covered Code. on the date Contributor first makes Commercial Use of the Covered Code.
<li id="section-2.2-d">Notwithstanding Section 2.2 (<a href="#section-2.2-b">b</a>) </li><li id="section-2.2-d">Notwithstanding Section 2.2 (<a href="#section-2.2-b">b</a>)
above, no patent license is granted: 1) for any code that Contributor has deleted from above, no patent license is granted: 1) for any code that Contributor has deleted from
the Contributor Version; 2) separate from the Contributor Version; 3) for infringements the Contributor Version; 2) separate from the Contributor Version; 3) for infringements
caused by: i) third party modifications of Contributor Version or ii) the combination of caused by: i) third party modifications of Contributor Version or ii) the combination of
Modifications made by that Contributor with other software (except as part of the Modifications made by that Contributor with other software (except as part of the
Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code
in the absence of Modifications made by that Contributor. in the absence of Modifications made by that Contributor.
</ol> </li></ol>
<h3 id="section-3">3. Distribution Obligations</h3> <h3 id="section-3">3. Distribution Obligations</h3>
<h4 id="section-3.1">3.1. Application of License</h4> <h4 id="section-3.1">3.1. Application of License</h4>
...@@ -207,16 +208,16 @@ copyright and license as the original code. The copyright of the ported source c ...@@ -207,16 +208,16 @@ copyright and license as the original code. The copyright of the ported source c
all copies Contributor makes available thereafter and shall take other steps (such as all copies Contributor makes available thereafter and shall take other steps (such as
notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who
received the Covered Code that new knowledge has been obtained. received the Covered Code that new knowledge has been obtained.
<li id="section-3.4-b"><b>Contributor APIs:</b> </li><li id="section-3.4-b"><b>Contributor APIs:</b>
If Contributor's Modifications include an application programming interface and Contributor If Contributor's Modifications include an application programming interface and Contributor
has knowledge of patent licenses which are reasonably necessary to implement that has knowledge of patent licenses which are reasonably necessary to implement that
API, Contributor must also include this information in the legal file. API, Contributor must also include this information in the legal file.
<li id="section-3.4-c"><b>Representations:</b> </li><li id="section-3.4-c"><b>Representations:</b>
Contributor represents that, except as disclosed pursuant to Section 3.4 Contributor represents that, except as disclosed pursuant to Section 3.4
(<a href="#section-3.4-a">a</a>) above, Contributor believes that Contributor's Modifications (<a href="#section-3.4-a">a</a>) above, Contributor believes that Contributor's Modifications
are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the
rights conveyed by this License. rights conveyed by this License.
</ol> </li></ol>
<h4 id="section-3.5">3.5. Required Notices</h4> <h4 id="section-3.5">3.5. Required Notices</h4>
You must duplicate the notice in <a href="#exhibit-a">Exhibit A</a> in each file of the You must duplicate the notice in <a href="#exhibit-a">Exhibit A</a> in each file of the
Source Code. If it is not possible to put such notice in a particular Source Code file due to Source Code. If it is not possible to put such notice in a particular Source Code file due to
...@@ -326,12 +327,12 @@ copyright and license as the original code. The copyright of the ported source c ...@@ -326,12 +327,12 @@ copyright and license as the original code. The copyright of the ported source c
Participant to You under Sections <a href="#section-2.1">2.1</a> and/or Participant to You under Sections <a href="#section-2.1">2.1</a> and/or
<a href="#section-2.2">2.2</a> automatically terminate at the expiration of the 60 day <a href="#section-2.2">2.2</a> automatically terminate at the expiration of the 60 day
notice period specified above. notice period specified above.
<li id="section-8.2-b">any software, hardware, or device, other than such Participant's </li><li id="section-8.2-b">any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then any rights Contributor Version, directly or indirectly infringes any patent, then any rights
granted to You by such Participant under Sections 2.1(<a href="#section-2.1-b">b</a>) granted to You by such Participant under Sections 2.1(<a href="#section-2.1-b">b</a>)
and 2.2(<a href="#section-2.2-b">b</a>) are revoked effective as of the date You first and 2.2(<a href="#section-2.2-b">b</a>) are revoked effective as of the date You first
made, used, sold, distributed, or had made, Modifications made by that Participant. made, used, sold, distributed, or had made, Modifications made by that Participant.
</ol> </li></ol>
<p id="section-8.3">8.3. If You assert a patent infringement claim against Participant <p id="section-8.3">8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or indirectly infringes alleging that such Participant's Contributor Version directly or indirectly infringes
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
H2 Database Engine H2 Database Engine
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -16,15 +16,15 @@ Welcome to H2, the free SQL database engine. ...@@ -16,15 +16,15 @@ Welcome to H2, the free SQL database engine.
</p> </p>
<a href="quickstartText.html" style="font-size: 16px; font-weight: bold">Quickstart</a> <a href="quickstartText.html" style="font-size: 16px; font-weight: bold">Quickstart</a>
<br> <br />
Click here to get a fast overview. Click here to get a fast overview.
<br><br> <br /><br />
<a href="features.html" style="font-size: 16px; font-weight: bold">Features</a> <a href="features.html" style="font-size: 16px; font-weight: bold">Features</a>
<br> <br />
See what this database can do. See what this database can do.
<br><br> <br /><br />
<a href="tutorial.html" style="font-size: 16px; font-weight: bold">Tutorial</a> <a href="tutorial.html" style="font-size: 16px; font-weight: bold">Tutorial</a>
<br> <br />
Go through the samples. Go through the samples.
</div></td></tr></table></body></html> </div></td></tr></table></body></html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). --> <!-- Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
H2 Database Engine H2 Database Engine
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml"> <link rel="alternate" type="application/atom+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-atom.xml" />
<link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml"> <link rel="alternate" type="application/rss+xml" title="H2 Newsfeed" href="http://www.h2database.com/html/newsfeed-rss.xml" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
<style type="text/css"> <style type="text/css">
<!-- <!--
...@@ -20,10 +20,10 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -20,10 +20,10 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
</p> </p>
<ul> <ul>
<li>Very fast, free for everybody, source code is included <li>Very fast, free for everybody, source code is included
<li>Written Java; can be compiled with GCJ (Linux) </li><li>Written Java; can be compiled with GCJ (Linux)
<li>Embedded, Server and Cluster modes </li><li>Embedded, Server and Cluster modes
<li>JDBC and (partial) ODBC API; Web Client application </li><li>JDBC and (partial) ODBC API; Web Client application
</ul> </li></ul>
<table style="border: 0px;"> <table style="border: 0px;">
<tr><td style="background-color: #eee;"> <tr><td style="background-color: #eee;">
...@@ -33,12 +33,12 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -33,12 +33,12 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
Version 1.0 / 2007-01-17: Version 1.0 / 2007-01-17:
</td></tr> </td></tr>
<tr><td style="border: 0px; background-color: #eee;"> <tr><td style="border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-setup-2007-01-17.exe"><img border="1" src="images/download.png" alt="download"></a> <a href="http://www.h2database.com/h2-setup-2007-01-17.exe"><img border="1" src="images/download.png" alt="download" /></a>
</td><td style="vertical-align: middle; border: 0px; background-color: #eee;"> </td><td style="vertical-align: middle; border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-setup-2007-01-17.exe">Windows Installer (2.7 MB)</a> <a href="http://www.h2database.com/h2-setup-2007-01-17.exe">Windows Installer (2.7 MB)</a>
</td></tr> </td></tr>
<tr><td style="border: 0px; background-color: #eee;"> <tr><td style="border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-2007-01-17.zip"><img border="1" src="images/download.png" alt="download"></a> <a href="http://www.h2database.com/h2-2007-01-17.zip"><img border="1" src="images/download.png" alt="download" /></a>
</td><td style="vertical-align: middle; border: 0px; background-color: #eee;"> </td><td style="vertical-align: middle; border: 0px; background-color: #eee;">
<a href="http://www.h2database.com/h2-2007-01-17.zip">Platform-Independent Zip (3.6 MB)</a> <a href="http://www.h2database.com/h2-2007-01-17.zip">Platform-Independent Zip (3.6 MB)</a>
</td></tr> </td></tr>
...@@ -52,8 +52,8 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -52,8 +52,8 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
<tr><td style="border: 0px; background-color: #eee;"> <tr><td style="border: 0px; background-color: #eee;">
<h3>Support</h3> <h3>Support</h3>
<p> <p>
<a href="http://www.h2database.com/ipowerb" target="_top">Forums: Help and Open Discussion</a><br><br> <a href="http://www.h2database.com/ipowerb" target="_top">Forums: Help and Open Discussion</a><br /><br />
Or send an e-mail to: <br> Or send an e-mail to: <br />
<script type="text/javascript"> <script type="text/javascript">
<!-- <!--
var a = '-support.png'; var a = '-support.png';
...@@ -68,7 +68,7 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -68,7 +68,7 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
//--> //-->
</script> </script>
<!-- <!--
The forum doesn't work at the moment, sorry. <br> The forum doesn't work at the moment, sorry. <br />
But you can send an e-mail to: <p> But you can send an e-mail to: <p>
<script type="text/javascript"> <script type="text/javascript">
var a = '-support.png'; var a = '-support.png';
...@@ -93,7 +93,7 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -93,7 +93,7 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
<table style="border: 0px; margin: 5px; width: 100%;"> <table style="border: 0px; margin: 5px; width: 100%;">
<tr><td style="border: 0px;" > <tr><td style="border: 0px;" >
<h3>Performance</h3> <h3>Performance</h3>
<img border="0" src="images/performance.png" alt="Performance comparison"><br> <img border="0" src="images/performance.png" alt="Performance comparison" /><br />
Operations/second (higher is better) - <a href="performance.html">More information about this test</a> Operations/second (higher is better) - <a href="performance.html">More information about this test</a>
</td></tr> </td></tr>
</table> </table>
...@@ -106,19 +106,19 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -106,19 +106,19 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
<tr><td style="border: 0px; background-color: #eee;"> <tr><td style="border: 0px; background-color: #eee;">
<h3>News</h3> <h3>News</h3>
<p> <p>
<b>Email Subscription</b>: If you like to get informed by email about new releases, <br> <b>Email Subscription</b>: If you like to get informed by email about new releases, <br />
subscribe here. The email addresses of members are only used in this context.<br> subscribe here. The email addresses of members are only used in this context.<br />
Usually, only one mail every few weeks will be sent. Usually, only one mail every few weeks will be sent.
</p> </p>
<form name="newsletter" method="post" action="php/newsletter.php"> <form name="newsletter" method="post" action="php/newsletter.php">
Email: <input type="email" name="email" size="30" onKeyDown="newsletter.spam.value='false';"> Email: <input type="email" name="email" size="30" onKeyDown="newsletter.spam.value='false';"/>
<input type="hidden" name="spam" value="true" size="30"> <input type="hidden" name="spam" value="true" size="30"/>
<input type="hidden" name="text" value="subscribe"> <input type="hidden" name="text" value="subscribe"/>
<input type="submit" value="Submit"> <input type="submit" value="Submit"/>
<br><br> <br /><br />
<b>Newsfeeds:</b> Two are available: <b>Newsfeeds:</b> Two are available:
<a href="http://www.h2database.com/html/newsfeed-atom.xml" target="_blank">Full text (Atom)</a> <a href="http://www.h2database.com/html/newsfeed-atom.xml" target="_blank">Full text (Atom)</a>
and <a href="http://www.h2database.com/html/newsfeed-rss.xml" target="_blank">Header only (RSS)</a>.<br> and <a href="http://www.h2database.com/html/newsfeed-rss.xml" target="_blank">Header only (RSS)</a>.<br />
If you need a newsreader: <a href="http://rssowl.sf.net">RSSOwl</a>. If you need a newsreader: <a href="http://rssowl.sf.net">RSSOwl</a>.
</form> </form>
</td></tr> </td></tr>
...@@ -132,16 +132,16 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -132,16 +132,16 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
<tr><td style="border: 0px; background-color: #eee;"> <tr><td style="border: 0px; background-color: #eee;">
<h3>Contribute</h3> <h3>Contribute</h3>
<p> <p>
You can contribute to the development of H2 by sending feedback and bug<br> You can contribute to the development of H2 by sending feedback and bug<br />
reports, or translate the H2 Console application (files h2/src/main/org/h2/<br> reports, or translate the H2 Console application (files h2/src/main/org/h2/<br />
server/web/res/_text_*.properties). Or click on the PayPal button below to<br> server/web/res/_text_*.properties). Or click on the PayPal button below to<br />
donate money. You will be listed as a supporter: donate money. You will be listed as a supporter:
</p> </p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
<input type="hidden" name="cmd" value="_s-xclick"> <input type="hidden" name="cmd" value="_s-xclick"/>
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!"> <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!"/>
<img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1"> <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" />
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHNwYJKoZIhvcNAQcEoIIHKDCCByQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBT5YHCnqqyWDNUoD0DGudVB/0gMr1D2iOAKr/X+zR9VGBMeZsBtgmJphsbszGxXXEGxwzIVAv/ys+8TKW/uvk9UvZcDqFbCvupXmVIv3dp143N1xHsyLQGGHd8aFNraqCF7fdFoQ8GHzwvNw0VaPbGqU6udswpKz/225zBkMCjTjELMAkGBSsOAwIaBQAwgbQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIvFAVO1Ru/gCAgZCWN/nYxfM8UtcqFy4Z+KefQIgmUISauadMhddUvvkARcSyEOITMCoEkJCc0KC+2mp9noBz2VhDO7uxNIjdj4O74V4iNcRsSy2d7CJe4QEBw2PCrnw2GsLkcL0DDfCE4Y0KfF6zHyUq/GNGUVR8ZhrFTSSLjh4tJJzuLYBPIbWHv89K1OJsWGuHs8dB5zGcbQ6gggOHMIIDgzCCAuygAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wHhcNMDQwMjEzMTAxMzE1WhcNMzUwMjEzMTAxMzE1WjCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFHTt38RMxLXJyO2SmS+Ndl72T7oKJ4u4uw+6awntALWh03PewmIJuzbALScsTS4sZoS1fKciBGoh11gIfHzylvkdNe/hJl66/RGqrj5rFb08sAABNTzDTiqqNpJeBsYs/c2aiGozptX2RlnBktH+SUNpAajW724Nv2Wvhif6sFAgMBAAGjge4wgeswHQYDVR0OBBYEFJaffLvGbxe9WT9S1wob7BDWZJRrMIG7BgNVHSMEgbMwgbCAFJaffLvGbxe9WT9S1wob7BDWZJRroYGUpIGRMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIFfOlaagFrl71+jq6OKidbWFSE+Q4FqROvdgIONth+8kSK//Y/4ihuE4Ymvzn5ceE3S/iBSQQMjyvb+s2TWbQYDwcp129OPIbD9epdr4tJOUNiSojw7BHwYRiPh58S1xGlFgHFXwrEBb3dgNbMUa+u4qectsMAXpVHnD9wIyfmHMYIBmjCCAZYCAQEwgZQwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNzAxMDcxMTI5MzFaMCMGCSqGSIb3DQEJBDEWBBRCGFuirr8xc1NmatO8jdDYt93luzANBgkqhkiG9w0BAQEFAASBgLJMfUrlr/Ckx/peA6UOkMqsB20W7M9FC4dYaGrlhSf0Og2N3NVlBrliloxGq85KpLnwJsKsh1wbP2aMGHvbicpCOsRoogPVvFI0cLb2UfPFkT0fRuEKerxcVVZQq26WjMq3h/Gps5tQEBGEB5Ok9IGP/dusNA+YijCt5XA/WM47-----END PKCS7-----"> <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHNwYJKoZIhvcNAQcEoIIHKDCCByQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBT5YHCnqqyWDNUoD0DGudVB/0gMr1D2iOAKr/X+zR9VGBMeZsBtgmJphsbszGxXXEGxwzIVAv/ys+8TKW/uvk9UvZcDqFbCvupXmVIv3dp143N1xHsyLQGGHd8aFNraqCF7fdFoQ8GHzwvNw0VaPbGqU6udswpKz/225zBkMCjTjELMAkGBSsOAwIaBQAwgbQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIvFAVO1Ru/gCAgZCWN/nYxfM8UtcqFy4Z+KefQIgmUISauadMhddUvvkARcSyEOITMCoEkJCc0KC+2mp9noBz2VhDO7uxNIjdj4O74V4iNcRsSy2d7CJe4QEBw2PCrnw2GsLkcL0DDfCE4Y0KfF6zHyUq/GNGUVR8ZhrFTSSLjh4tJJzuLYBPIbWHv89K1OJsWGuHs8dB5zGcbQ6gggOHMIIDgzCCAuygAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wHhcNMDQwMjEzMTAxMzE1WhcNMzUwMjEzMTAxMzE1WjCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFHTt38RMxLXJyO2SmS+Ndl72T7oKJ4u4uw+6awntALWh03PewmIJuzbALScsTS4sZoS1fKciBGoh11gIfHzylvkdNe/hJl66/RGqrj5rFb08sAABNTzDTiqqNpJeBsYs/c2aiGozptX2RlnBktH+SUNpAajW724Nv2Wvhif6sFAgMBAAGjge4wgeswHQYDVR0OBBYEFJaffLvGbxe9WT9S1wob7BDWZJRrMIG7BgNVHSMEgbMwgbCAFJaffLvGbxe9WT9S1wob7BDWZJRroYGUpIGRMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAIFfOlaagFrl71+jq6OKidbWFSE+Q4FqROvdgIONth+8kSK//Y/4ihuE4Ymvzn5ceE3S/iBSQQMjyvb+s2TWbQYDwcp129OPIbD9epdr4tJOUNiSojw7BHwYRiPh58S1xGlFgHFXwrEBb3dgNbMUa+u4qectsMAXpVHnD9wIyfmHMYIBmjCCAZYCAQEwgZQwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tAgEAMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0wNzAxMDcxMTI5MzFaMCMGCSqGSIb3DQEJBDEWBBRCGFuirr8xc1NmatO8jdDYt93luzANBgkqhkiG9w0BAQEFAASBgLJMfUrlr/Ckx/peA6UOkMqsB20W7M9FC4dYaGrlhSf0Og2N3NVlBrliloxGq85KpLnwJsKsh1wbP2aMGHvbicpCOsRoogPVvFI0cLb2UfPFkT0fRuEKerxcVVZQq26WjMq3h/Gps5tQEBGEB5Ok9IGP/dusNA+YijCt5XA/WM47-----END PKCS7-----"/>
</form> </form>
</td></tr> </td></tr>
</table> </table>
...@@ -156,13 +156,13 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -156,13 +156,13 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
You may also send questions, feature requests, or feedback of any kind here: You may also send questions, feature requests, or feedback of any kind here:
<form method="post" action="php/sendMail.php"> <form method="post" action="php/sendMail.php">
<p> <p>
Email (optional):<br> Email (optional):<br />
<input name="email" size="73" type="email"> <input name="email" size="73" type="email"/>
</p> </p>
Message:<br> Message:<br />
<textarea name="text" cols="70" rows="5"></textarea> <textarea name="text" cols="70" rows="5"></textarea>
<br> <br />
<input value="Submit" type="submit"> <input value="Submit" type="submit"/>
</form> </form>
</td></tr> </td></tr>
</table> </table>
......
...@@ -3,22 +3,22 @@ ...@@ -3,22 +3,22 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Performance Performance
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h1>Performance</h1> <h1>Performance</h1>
<a href="#performance_comparison"> <a href="#performance_comparison">
Performance Comparison</a><br> Performance Comparison</a><br />
<a href="#application_profiling"> <a href="#application_profiling">
Application Profiling</a><br> Application Profiling</a><br />
<a href="#database_performance_tuning"> <a href="#database_performance_tuning">
Performance Tuning</a><br> Performance Tuning</a><br />
<br><a name="performance_comparison"></a> <br /><a name="performance_comparison"></a>
<h2>Performance Comparison</h2> <h2>Performance Comparison</h2>
In most cases H2 is a lot faster than all other In most cases H2 is a lot faster than all other
...@@ -222,7 +222,7 @@ It was developed / sponsored by db4o. ...@@ -222,7 +222,7 @@ It was developed / sponsored by db4o.
<tr><td>Total</td><td>ms</td><td>26724</td><td>53962</td><td>87112</td></tr> <tr><td>Total</td><td>ms</td><td>26724</td><td>53962</td><td>87112</td></tr>
</table> </table>
<br><a name="application_profiling"></a> <br /><a name="application_profiling"></a>
<h2>Application Profiling</h2> <h2>Application Profiling</h2>
<h3>Analyze First</h3> <h3>Analyze First</h3>
...@@ -236,7 +236,7 @@ A very good tool to measure both the memory and the CPU is the ...@@ -236,7 +236,7 @@ A very good tool to measure both the memory and the CPU is the
<a href="http://www.yourkit.com">YourKit Java Profiler</a>. This tool is also used <a href="http://www.yourkit.com">YourKit Java Profiler</a>. This tool is also used
to optimize the performance and memory footprint of this database engine. to optimize the performance and memory footprint of this database engine.
<br><a name="database_performance_tuning"></a> <br /><a name="database_performance_tuning"></a>
<h2>Database Performance Tuning</h2> <h2>Database Performance Tuning</h2>
<h3>Virus Scanners</h3> <h3>Virus Scanners</h3>
......
...@@ -13,9 +13,9 @@ $headers = 'From: newsletter@h2database.com' . "\r\n" . ...@@ -13,9 +13,9 @@ $headers = 'From: newsletter@h2database.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion(); 'X-Mailer: PHP/' . phpversion();
mail("dbsupport@h2database.com", "[H2 Newsletter] $now $spam2", $body, $headers); mail("dbsupport@h2database.com", "[H2 Newsletter] $now $spam2", $body, $headers);
?> ?>
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
H2 Database H2 Database
</title><link rel="stylesheet" type="text/css" href="../stylesheet.css"></head><body> </title><link rel="stylesheet" type="text/css" href="../stylesheet.css" /></head><body>
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h2>The email was sent successfully</h2> <h2>The email was sent successfully</h2>
......
...@@ -14,9 +14,9 @@ $headers = 'From: feedback@h2database.com' . "\r\n" . ...@@ -14,9 +14,9 @@ $headers = 'From: feedback@h2database.com' . "\r\n" .
$headers = $headers =
mail("dbsupport@h2database.com", "[H2 Feedback] $now $spam2", $body, $headers); mail("dbsupport@h2database.com", "[H2 Feedback] $now $spam2", $body, $headers);
?> ?>
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
H2 Database H2 Database
</title><link rel="stylesheet" type="text/css" href="../stylesheet.css"></head><body> </title><link rel="stylesheet" type="text/css" href="../stylesheet.css" /></head><body>
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h2>The email was sent successfully</h2> <h2>The email was sent successfully</h2>
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Quickstart Quickstart
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
...@@ -14,9 +14,9 @@ Quickstart ...@@ -14,9 +14,9 @@ Quickstart
<h2>The H2 Console Application</h2> <h2>The H2 Console Application</h2>
The Console lets you access a SQL database using a browser interface. The Console lets you access a SQL database using a browser interface.
<br> <br />
<img src="console.png" alt="Web Browser - H2 Console Server - H2 Database"> <img src="console.png" alt="Web Browser - H2 Console Server - H2 Database" />
<br> <br />
If you don't have Windows XP, or if something does not work as expected, If you don't have Windows XP, or if something does not work as expected,
please see the detailed description in the <a href="tutorial.html">Tutorial</a>. please see the detailed description in the <a href="tutorial.html">Tutorial</a>.
...@@ -29,34 +29,34 @@ Install the software using the Windows Installer (if you did not yet do that). ...@@ -29,34 +29,34 @@ Install the software using the Windows Installer (if you did not yet do that).
Click <span class="button">Start</span>, Click <span class="button">Start</span>,
<span class="button">All Programs</span>, <span class="button">All Programs</span>,
<span class="button">H2</span>, and <span class="button">H2</span>, and
<span class="button">H2 Console (Native)</span>:<br> <span class="button">H2 Console (Native)</span>:<br />
<img class="screenshot" src="quickstart-1.png" alt="screenshot: start H2 Console"><br> <img class="screenshot" src="quickstart-1.png" alt="screenshot: start H2 Console" /><br />
A new console window appears:<br> A new console window appears:<br />
<img class="screenshot" src="quickstart-2.png" alt="screenshot: H2 Running"><br> <img class="screenshot" src="quickstart-2.png" alt="screenshot: H2 Running" /><br />
Also, a new browser page should open with URL <a href="http://localhost:8082" target="_blank">http://localhost:8082</a>. Also, a new browser page should open with URL <a href="http://localhost:8082" target="_blank">http://localhost:8082</a>.
You may get a security warning from the firewall. If you don't want other computers in the network to access the database You may get a security warning from the firewall. If you don't want other computers in the network to access the database
on your machine, you can let the firewall block these connections. Only local connections are required at this time. on your machine, you can let the firewall block these connections. Only local connections are required at this time.
<h4>Login</h4> <h4>Login</h4>
Select <span class="button">Generic H2</span> and click <span class="button">Connect</span>:<br> Select <span class="button">Generic H2</span> and click <span class="button">Connect</span>:<br />
<img class="screenshot" src="quickstart-3.png" alt="screenshot: Login screen"><br> <img class="screenshot" src="quickstart-3.png" alt="screenshot: Login screen" /><br />
You are now logged in. You are now logged in.
<h4>Sample</h4> <h4>Sample</h4>
Click on the <span class="button">Sample SQL Script</span>:<br> Click on the <span class="button">Sample SQL Script</span>:<br />
<img class="screenshot" src="quickstart-4.png" alt="screenshot: click on the sample SQL script"><br> <img class="screenshot" src="quickstart-4.png" alt="screenshot: click on the sample SQL script" /><br />
The SQL commands appear in the command area.<br> The SQL commands appear in the command area.<br />
<h4>Execute</h4> <h4>Execute</h4>
Click <span class="button">Run</span>:<br> Click <span class="button">Run</span>:<br />
<img class="screenshot" src="quickstart-5.png" alt="screenshot: click Run"><br> <img class="screenshot" src="quickstart-5.png" alt="screenshot: click Run" /><br />
On the left side, a new entry TEST is added below the database icon. On the left side, a new entry TEST is added below the database icon.
The operations and results of the statements are shown below the script.<br> The operations and results of the statements are shown below the script.<br />
<img class="screenshot" src="quickstart-6.png" alt="screenshot: see the result"><br> <img class="screenshot" src="quickstart-6.png" alt="screenshot: see the result" /><br />
<h4>Disconnect</h4> <h4>Disconnect</h4>
Click on <span class="button">Disconnect</span>:<br> Click on <span class="button">Disconnect</span>:<br />
<img src="icon_disconnect.gif" alt="Disconnect icon"><br> <img src="icon_disconnect.gif" alt="Disconnect icon" /><br />
to close the database. to close the database.
<h4>End</h4> <h4>End</h4>
......
...@@ -4,9 +4,9 @@ Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http:/ ...@@ -4,9 +4,9 @@ Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http:/
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head> <html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Search</title> <title>Search</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css"> <link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="index.js"></script> <script type="text/javascript" src="index.js"></script>
<script type="text/javascript" src="search.js"></script> <script type="text/javascript" src="search.js"></script>
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
...@@ -14,7 +14,7 @@ Initial Developer: H2 Group ...@@ -14,7 +14,7 @@ Initial Developer: H2 Group
<body style="margin: 10px 0px 0px 0px;" onload="frameMe('menu');"> <body style="margin: 10px 0px 0px 0px;" onload="frameMe('menu');">
<div class="menu"> <div class="menu">
<img border="0" src="h2-logo.png" alt="H2 Logo" onclick="document.location='main.html'"> <img border="0" src="h2-logo.png" alt="H2 Logo" onclick="document.location='main.html'" />
</div> </div>
<form name="searchForm" action="submit" onsubmit="return goFirst();"> <form name="searchForm" action="submit" onsubmit="return goFirst();">
...@@ -26,12 +26,12 @@ Initial Developer: H2 Group ...@@ -26,12 +26,12 @@ Initial Developer: H2 Group
</tr> </tr>
<tr class="search"> <tr class="search">
<td class="search" colspan="2"> <td class="search" colspan="2">
<input id="search" name="search" type="text" size="21" maxlength="100" onKeyup="listWords(this.value, '')"><br> <input id="search" name="search" type="text" size="21" maxlength="100" onKeyup="listWords(this.value, '')" /><br />
<input type="reset" id="clear" style="display:none;" value="Clear" onclick="listWords('', '');"> <input type="reset" id="clear" style="display:none;" value="Clear" onclick="listWords('', '');" />
</td> </td>
</tr> </tr>
<tr class="search" style="display:none;" > <tr class="search" style="display:none;" >
<td width="1%" class="search" style="vertical-align: middle;"><input id="highlight" type="checkbox" checked="checked" onclick="highlightCurrent(this.checked, search.value)"></td> <td width="1%" class="search" style="vertical-align: middle;"><input id="highlight" type="checkbox" checked="checked" onclick="highlightCurrent(this.checked, search.value)" /></td>
<td width="99%" class="search" style="padding: 0px; vertical-align: middle;">Highlight keyword(s)</td> <td width="99%" class="search" style="padding: 0px; vertical-align: middle;">Highlight keyword(s)</td>
</tr> </tr>
<tr class="search"> <tr class="search">
...@@ -44,27 +44,27 @@ Initial Developer: H2 Group ...@@ -44,27 +44,27 @@ Initial Developer: H2 Group
</form> </form>
<div class="menu"> <div class="menu">
<b><a href="main.html" target="main">Home</a></b><br> <b><a href="main.html" target="main">Home</a></b><br />
<a href="quickstartText.html" target="main">Quickstart</a><br> <a href="quickstartText.html" target="main">Quickstart</a><br />
<a href="installation.html" target="main">Installation</a><br> <a href="installation.html" target="main">Installation</a><br />
<a href="tutorial.html" target="main">Tutorial</a><br> <a href="tutorial.html" target="main">Tutorial</a><br />
<a href="features.html" target="main">Features</a><br> <a href="features.html" target="main">Features</a><br />
<a href="performance.html" target="main">Performance</a><br> <a href="performance.html" target="main">Performance</a><br />
<a href="advanced.html" target="main">Advanced Topics</a><br> <a href="advanced.html" target="main">Advanced Topics</a><br />
<br> <br />
<b>Reference</b><br> <b>Reference</b><br />
<a href="grammar.html" target="main">SQL Grammar</a><br> <a href="grammar.html" target="main">SQL Grammar</a><br />
<a href="functions.html" target="main">Functions</a><br> <a href="functions.html" target="main">Functions</a><br />
<a href="datatypes.html" target="main">Data Types</a><br> <a href="datatypes.html" target="main">Data Types</a><br />
<a href="../javadoc/index.html" target="main">Javadoc JDBC API</a><br> <a href="../javadoc/index.html" target="main">Javadoc JDBC API</a><br />
<a href="../h2.pdf" target="_blank">Documentation as PDF</a><br> <a href="../h2.pdf" target="_blank">Documentation as PDF</a><br />
<br> <br />
<b>Appendix</b><br> <b>Appendix</b><br />
<a href="build.html" target="main">Build</a><br> <a href="build.html" target="main">Build</a><br />
<a href="history.html" target="main">History and Roadmap</a><br> <a href="history.html" target="main">History and Roadmap</a><br />
<a href="faq.html" target="main">FAQ and Known Bugs</a><br> <a href="faq.html" target="main">FAQ and Known Bugs</a><br />
<a href="license.html" target="main">License</a><br> <a href="license.html" target="main">License</a><br />
<br> <br />
</div> </div>
</body></html> </body></html>
...@@ -3,40 +3,40 @@ ...@@ -3,40 +3,40 @@
Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Tutorial Tutorial
</title><link rel="stylesheet" type="text/css" href="stylesheet.css"> </title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<script type="text/javascript" src="navigation.js"></script> <script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();"> </head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv"> <table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<h1>Tutorial</h1> <h1>Tutorial</h1>
<a href="#tutorial_starting_h2_console"> <a href="#tutorial_starting_h2_console">
Starting and Using the H2 Console</a><br> Starting and Using the H2 Console</a><br />
<a href="#connecting_using_jdbc"> <a href="#connecting_using_jdbc">
Connecting to a Database using JDBC</a><br> Connecting to a Database using JDBC</a><br />
<a href="#creating_new_databases"> <a href="#creating_new_databases">
Creating New Databases</a><br> Creating New Databases</a><br />
<a href="#using_server"> <a href="#using_server">
Using the Server</a><br> Using the Server</a><br />
<a href="#using_hibernate"> <a href="#using_hibernate">
Using Hibernate</a><br> Using Hibernate</a><br />
<a href="#web_applications"> <a href="#web_applications">
Using Databases in Web Applications</a><br> Using Databases in Web Applications</a><br />
<a href="#csv"> <a href="#csv">
CSV (Comma Separated Values) Support</a><br> CSV (Comma Separated Values) Support</a><br />
<a href="#upgrade_backup_restore"> <a href="#upgrade_backup_restore">
Upgrade, Backup, and Restore</a><br> Upgrade, Backup, and Restore</a><br />
<a href="#open_office"> <a href="#open_office">
Using OpenOffice Base</a><br> Using OpenOffice Base</a><br />
<br><a name="tutorial_starting_h2_console"></a> <br /><a name="tutorial_starting_h2_console"></a>
<h2>Starting and Using the H2 Console</h2> <h2>Starting and Using the H2 Console</h2>
<p> <p>
This application lets you access a SQL database using a browser interface. This application lets you access a SQL database using a browser interface.
This can be a H2 database, or another database that supports the JDBC API. This can be a H2 database, or another database that supports the JDBC API.
</p> </p>
<img src="console.png" alt="Web Browser - H2 Console Server - H2 Database"> <img src="console.png" alt="Web Browser - H2 Console Server - H2 Database" />
<p> <p>
This is a client / server application, so both a server and a client are required to run it. This is a client / server application, so both a server and a client are required to run it.
</p><p> </p><p>
...@@ -47,9 +47,9 @@ Depending on your platform and environment, there are multiple ways to start the ...@@ -47,9 +47,9 @@ Depending on your platform and environment, there are multiple ways to start the
<td>Windows</td> <td>Windows</td>
<td>1.4 or 1.5</td> <td>1.4 or 1.5</td>
<td> <td>
Click [Start], [All Programs], [H2], and [H2 Console]<br> Click [Start], [All Programs], [H2], and [H2 Console]<br />
If this worked correctly, an icon will be added to the system tray: If this worked correctly, an icon will be added to the system tray:
<img src="h2.png" alt="[H2 icon]"><br> <img src="h2.png" alt="[H2 icon]" /><br />
If you don't get the system tray icon, then maybe Java is not installed correctly (in this case, try another way to start the application). If you don't get the system tray icon, then maybe Java is not installed correctly (in this case, try another way to start the application).
A browser window should open A browser window should open
and point to the Login page (URL: <a href="http://localhost:8082" target="_blank">http://localhost:8082</a>). and point to the Login page (URL: <a href="http://localhost:8082" target="_blank">http://localhost:8082</a>).
...@@ -59,7 +59,7 @@ Depending on your platform and environment, there are multiple ways to start the ...@@ -59,7 +59,7 @@ Depending on your platform and environment, there are multiple ways to start the
<td>Windows</td> <td>Windows</td>
<td>1.4 or 1.5</td> <td>1.4 or 1.5</td>
<td> <td>
Open a file browser, navigate to h2/bin, and double click on h2.bat.<br> Open a file browser, navigate to h2/bin, and double click on h2.bat.<br />
If this worked correctly, an icon will be added to the system tray. If this worked correctly, an icon will be added to the system tray.
If there is a problem, you will see the error message on the console window. If there is a problem, you will see the error message on the console window.
A browser window will open A browser window will open
...@@ -190,7 +190,7 @@ press [Ctrl]+[C] on the console where the server was started (Windows), ...@@ -190,7 +190,7 @@ press [Ctrl]+[C] on the console where the server was started (Windows),
or close the console window. or close the console window.
</p> </p>
<br><a name="connecting_using_jdbc"></a> <br /><a name="connecting_using_jdbc"></a>
<h2>Connecting to a Database using JDBC</h2> <h2>Connecting to a Database using JDBC</h2>
To connect to a database, a Java application first needs to load the database driver, To connect to a database, a Java application first needs to load the database driver,
and then get a connection. A simple way to do that is using the following code: and then get a connection. A simple way to do that is using the following code:
...@@ -214,12 +214,12 @@ to be recognized by this database. The second parameter in the <code>getConnecti ...@@ -214,12 +214,12 @@ to be recognized by this database. The second parameter in the <code>getConnecti
is the user name ('sa' for System Administrator in this example). The third parameter is the password. is the user name ('sa' for System Administrator in this example). The third parameter is the password.
Please note that in this database, user names are not case sensitive, but passwords are case sensitive. Please note that in this database, user names are not case sensitive, but passwords are case sensitive.
<br><a name="creating_new_databases"></a> <br /><a name="creating_new_databases"></a>
<h2>Creating New Databases</h2> <h2>Creating New Databases</h2>
By default, if the database specified in the URL does not yet exist, a new (empty) By default, if the database specified in the URL does not yet exist, a new (empty)
database is created automatically. database is created automatically.
<br><a name="using_server"></a> <br /><a name="using_server"></a>
<h2>Using the Server</h2> <h2>Using the Server</h2>
H2 currently supports three servers: a Web Server, a TCP Server and an ODBC Server. H2 currently supports three servers: a Web Server, a TCP Server and an ODBC Server.
The servers can be started in different ways. The servers can be started in different ways.
...@@ -230,9 +230,9 @@ There currently are a few limitations when using the server or cluster mode: ...@@ -230,9 +230,9 @@ There currently are a few limitations when using the server or cluster mode:
<li>Statement.cancel() is only supported in embedded mode. <li>Statement.cancel() is only supported in embedded mode.
A connection can only execute one operation at a time in server or cluster mode, A connection can only execute one operation at a time in server or cluster mode,
and is blocked until this operation is finished. and is blocked until this operation is finished.
<li>CLOBs and BLOBs are sent to the server in one piece and not as a stream. </li><li>CLOBs and BLOBs are sent to the server in one piece and not as a stream.
That means those objects need to fit in memory when using the server or cluster mode. That means those objects need to fit in memory when using the server or cluster mode.
</ul> </li></ul>
<h3>Starting from Command Line</h3> <h3>Starting from Command Line</h3>
To start the Server from the command line with the default settings, run To start the Server from the command line with the default settings, run
...@@ -278,14 +278,14 @@ This function should be called after all connection to the databases are closed ...@@ -278,14 +278,14 @@ This function should be called after all connection to the databases are closed
to avoid recovery when the databases are opened the next time. to avoid recovery when the databases are opened the next time.
To stop remote server, remote connections must be enabled on the server. To stop remote server, remote connections must be enabled on the server.
<br><a name="using_hibernate"></a> <br /><a name="using_hibernate"></a>
<h2>Using Hibernate</h2> <h2>Using Hibernate</h2>
This database supports Hibernate version 3.1 and newer. You can use the HSQLDB Dialect, This database supports Hibernate version 3.1 and newer. You can use the HSQLDB Dialect,
or the native H2 Dialect that is available in the file src/tools/org/h2/tools/hibernate/H2Dialect.txt. or the native H2 Dialect that is available in the file src/tools/org/h2/tools/hibernate/H2Dialect.txt.
This dialect will be integrated into Hibernate, but until this is done you need to copy the file This dialect will be integrated into Hibernate, but until this is done you need to copy the file
into the folder src\org\hibernate\dialect (Hibernate 3.1), rename it to H2Dialect.java and re-compile hibernate. into the folder src\org\hibernate\dialect (Hibernate 3.1), rename it to H2Dialect.java and re-compile hibernate.
<br><a name="web_applications"></a> <br /><a name="web_applications"></a>
<h2>Using Databases in Web Applications</h2> <h2>Using Databases in Web Applications</h2>
There are multiple ways to access a database from within web There are multiple ways to access a database from within web
applications. Here are some examples if you use Tomcat or JBoss. applications. Here are some examples if you use Tomcat or JBoss.
...@@ -356,7 +356,7 @@ public class DbStarter implements ServletContextListener { ...@@ -356,7 +356,7 @@ public class DbStarter implements ServletContextListener {
} }
</pre> </pre>
<br><a name="csv"></a> <br /><a name="csv"></a>
<h2>CSV (Comma Separated Values) Support</h2> <h2>CSV (Comma Separated Values) Support</h2>
The CSV file support can be used inside the database using the functions CSVREAD and CSVWRITE, The CSV file support can be used inside the database using the functions CSVREAD and CSVWRITE,
and the CSV library can be used outside the database as a standalone tool. and the CSV library can be used outside the database as a standalone tool.
...@@ -404,7 +404,7 @@ while(rs.next()) { ...@@ -404,7 +404,7 @@ while(rs.next()) {
rs.close(); rs.close();
</pre> </pre>
<br><a name="upgrade_backup_restore"></a> <br /><a name="upgrade_backup_restore"></a>
<h2>Upgrade, Backup, and Restore</h2> <h2>Upgrade, Backup, and Restore</h2>
<h3>Database Upgrade</h3> <h3>Database Upgrade</h3>
...@@ -438,19 +438,19 @@ SQL script files may contain references to other script files, in the form of ...@@ -438,19 +438,19 @@ SQL script files may contain references to other script files, in the form of
RUNSCRIPT commands. However, when using the server mode, the references script files RUNSCRIPT commands. However, when using the server mode, the references script files
need to be available on the server side. need to be available on the server side.
<br><a name="open_office"></a> <br /><a name="open_office"></a>
<h2>Using OpenOffice Base</h2> <h2>Using OpenOffice Base</h2>
OpenOffice.org Base supports database access over the JDBC API. To connect to a H2 database OpenOffice.org Base supports database access over the JDBC API. To connect to a H2 database
using OpenOffice Base, you first need to add the JDBC driver to OpenOffice. using OpenOffice Base, you first need to add the JDBC driver to OpenOffice.
The steps to connect to a H2 database are: The steps to connect to a H2 database are:
<ul> <ul>
<li>Stop OpenOffice, including the autostart <li>Stop OpenOffice, including the autostart
<li>Copy h2.jar into the directory &lt;OpenOffice&gt;\program\classes </li><li>Copy h2.jar into the directory &lt;OpenOffice&gt;\program\classes
<li>Start OpenOffice Base </li><li>Start OpenOffice Base
<li>Connect to an existing database, select JDBC, [Next] </li><li>Connect to an existing database, select JDBC, [Next]
<li>Example datasource URL: jdbc:h2:c:/temp/test </li><li>Example datasource URL: jdbc:h2:c:/temp/test
<li>JDBC driver class: org.h2.Driver </li><li>JDBC driver class: org.h2.Driver
</ul> </li></ul>
Now you can access the database stored in the directory C:/temp. Now you can access the database stored in the directory C:/temp.
</div></td></tr></table></body></html> </div></td></tr></table></body></html>
\ No newline at end of file
...@@ -3,9 +3,9 @@ Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http:/ ...@@ -3,9 +3,9 @@ Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http:/
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html><head> <html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>H2 Database Engine</title> <title>H2 Database Engine</title>
<link rel="stylesheet" type="text/css" href="html/stylesheet.css"> <link rel="stylesheet" type="text/css" href="html/stylesheet.css" />
<script type="text/javascript"> <script type="text/javascript">
location.href = 'html/frame.html'; location.href = 'html/frame.html';
</script> </script>
...@@ -18,12 +18,12 @@ Welcome to H2, the free SQL database. The main feature of H2 are: ...@@ -18,12 +18,12 @@ Welcome to H2, the free SQL database. The main feature of H2 are:
</p> </p>
<ul> <ul>
<li>It is free to use for everybody, source code is included <li>It is free to use for everybody, source code is included
<li>Written in Java, but also available as native executable </li><li>Written in Java, but also available as native executable
<li>JDBC and (partial) ODBC API </li><li>JDBC and (partial) ODBC API
<li>Embedded and client/server modes </li><li>Embedded and client/server modes
<li>Clustering is supported </li><li>Clustering is supported
<li>A web client is included </li><li>A web client is included
</ul> </li></ul>
<h2>No Javascript</h2> <h2>No Javascript</h2>
<p> <p>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论