상식
HSQLDB의 가장 큰 특징은 메모리에 데이터베이스를 구축할 수 있다는 것이다. 물론 이 메모리 데이터베이스를 파일에 저장하여 진정한 지속성을 실현할 수 있다.
먼저 보는 것이 즐겁다!
다음은 메모리 데이터베이스에 대한 In-Process 방식의 코드 예입니다.
다음 코드는 hsqldb를 도입해야 합니다.jar 패키지 (hsqldb-2.2.8)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
try {
// HSQLDB JDBC
Class.forName("org.hsqldb.jdbcDriver");
// memdb, sa,
Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:memdb","username","password");
System.out.println("connect to memdb OK");
Statement stat = conn.createStatement();
//
stat.executeUpdate("create table person(NAME VARCHAR(20), AGE INTEGER)");
System.out.println("create TABLE:person OK");
//
stat.executeUpdate("INSERT INTO person VALUES(' ',22)");
stat.executeUpdate("INSERT INTO person VALUES('amos','25')");
System.out.println("insert data into TABLE:person OK!");
conn.close();
// stat.execute("SHUTDOWN");
// System.out.println("SHUTDOWN");
Connection conn2 = DriverManager.getConnection("jdbc:hsqldb:mem:memdb","username","password");
//
PreparedStatement pstmt = conn2.prepareStatement("SELECT * FROM person");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
String s = null;
s = rs.getString(1) + "," + rs.getString(2);
System.out.println(s);
}
System.out.println("select data OK");
} catch (Exception e) {
e.printStackTrace();
}
}
}
The HSQLDB jar package is located in the/lib directory of the ZIP package and contains several components and programs.
• HyperSQL RDBMS Engine (HSQLDB)
• HyperSQL JDBC Driver
• Database Manager (GUI database access tool, with Swing and AWT versions)
• Sql Tool (command line database access tool)
Running Database Access Tools
java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
When a tool is up and running, you can connect to a database (may be a new database) and use SQL commands to access and modify the data.
A HyperSQL Database
Types of catalog data
• mem: stored entirely in RAM - without any persistence beyond the JVM process's life
• file: stored in filesystem files
• res: stored in a Java resource, such as a Jar and always read-only
In-Process Access to Database Catalogs
file:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "SA", "");
혹은
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
mem:
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");
res:
Connection c = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");
The first time in-process connection is made to a database, some general data structures are initialised and a few helper threads are started. After this, creation of connections and calls to JDBC methods of the connections execute as if they are part of the Java application that is making the calls. When the SQL command "SHUTDOWN"is executed, the global structures and helper threads for the database are destroyed.
Note that only one Java process at a time can make in-process connections to a given file: database. However, if the file: database has been made read-only, or if connections are made to a res: database, then it is possible to make inprocess connections from multiple Java processes.
HyperSQL HSQL Server
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
HyperSQL HTTP Server
This method of access is used when the computer hosting the database server is restricted to the HTTP protocol. The only reason for using this method of access is restrictions imposed by firewalls on the client or server machines and it should not be used where there are no such restrictions. The HyperSQL HTTP Server is a special web server that allows JDBC clients to connect via HTTP. The server can also act as a small general-purpose web server for static pages.
org.hsqldb.server.WebServer
HyperSQL HTTP Servlet
The Servlet class, in the HSQLDB jar, should be installed on the application server to provide the
connection. The database is specified using an application server property. Refer to the source file src/org/hsqldb/server/Servlet.java to see the details.
Both HTTP Server and Servlet modes can only be accessed using the JDBC driver at the client end. They do not provide a web front end to the database. The Servlet mode can serve only a single database.
Connecting to a Database Server
A common example is connection to the default port (9001) used for the hsql: protocol on the same machine:
try {
Class.forName("org.hsqldb.jdbc.JDBCDriver" );
} catch (Exception e) {
System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "SA", "");
If the HyperSQL HTTP server is used, the protocol is http: and the URL will be different:
Connection c = DriverManager.getConnection("jdbc:hsqldb:http://localhost/xdb", "SA", "");
Security Considerations
the password for the default system user should be changed from the default empty string
HyperSQL provides two optional security mechanisms. The encrypted SSL protocol , and Access Control Lists .
Both mechanisms can be specified when running the Server or WebServer. On the client, the URL to connect to an SSL server is slightly different:
Java code to connect to the local secure SSL hsql and http Servers
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsqls://localhost/xdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:https://localhost/xdb", "SA", "");
Accessing the Data
A connection should be reused as much as possible and closed only when it is not going to be used again for a long while.
A java.sql.DatabaseMetaData object is used to get metadata for the database.
A java.sql.CallableStatement object is used to execute an SQL CALL statement. The SQL CALL statement may contain parameters, which should be set to new values before each reuse.
A java.sql.Connection object also has some methods for transaction control.
Closing the Database
All databases running in different modes can be closed with the SHUTDOWN command, issued as an SQL statement.
A special form of closing the database is via the SHUTDOWN COMPACT command. This command rewrites the .data file that contains the information stored in CACHED tables and compacts it to its minimum size. This command should be issued periodically, especially when lots of inserts, updates or deletes have been performed on the cached tables. Changes to the structure of the database, such as dropping or modifying populated CACHED tables or indexes also create large amounts of unused file space that can be reclaimed using this command.
Databases are not closed when the last connection to the database is explicitly closed via JDBC. A connection property, shutdown=true, can be specified on the first connection to the database (the connection that opens the database) to force a shutdown when the last connection closes.
specifying a connection property to shutdown the database when the lastconnection is closed
Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb;shutdown=true", "SA", "");
Creating a New Database
When a server instance is started, or when a connection is made to an in-process database, a new, empty database is created if no database exists at the given path.
If no username or password is specified, the default SA user and an empty password are used.
specifying a connection property to disallow creating a new database
Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb;ifexists=true", "SA", "");
Creating and Accessing an Encrypted Database
First, a key must be created for the desired cipher and configuration. This is done by calling the function CRYPT_KEY(, ). If the default provider (the built-in JVM ciphers) is used, then NULL should be specified as the provider. The CRYPT_KEY function returns a hexadecimal key. The function call can be made in any HyperSQL database, so long as the provider class is on the classpath. This key can be used to create a new encrypted database. Calls to this function always return different keys, based on a generated random values.
As an example, a call to CRYPT_KEY('Blowfish', null) returned the string, '604a6105889da65326bf35790a923932'.
To create a new database, the URL below is used:
jdbc:hsqldb:file:;crypt_key=604a6105889da65326bf35790a923932;crypt_type=blowfish
The third property name is crypt_provider. This is specified only when the provider is not the default provider.
HyperSQL works with any symmetric cipher that may be available from the JVM.
The files that are encrypted include the .script, .data, .backup and .log files. The .lobs file is not encrypted by default.
The property crypt_lobs=true must be specified to encrypt the .lobs file.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HSQLDB 설치 및 사용먼저 E:\hsqldbTest 디 렉 터 리 아래 에 두 개의 하위 디 렉 터 리, data 와 lib 디 렉 터 리 를 만 들 고 data 는 데 이 터 를 저장 하 며 lib 는 jar 패 키 지 를 관리 합 니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.