hsqldb自带的例子。看看就一切ok了,万事不求人啊。
There is a copy of Testdb.java in the directory src/org/hsqldb/sample of your HSQLDB distribution.
There is a copy of Testdb.java in the directory src/org/hsqldb/sample of your HSQLDB distribution.
java 代码
- 1. /* Copyright (c) 2001-2005, The HSQL Development Group
- 2. * All rights reserved.
- 3. *
- 4. * Redistribution and use in source and binary forms, with or without
- 5. * modification, are permitted provided that the following conditions are met:
- 6. *
- 7. * Redistributions of source code must retain the above copyright notice, this
- 8. * list of conditions and the following disclaimer.
- 9. *
- 10. * Redistributions in binary form must reproduce the above copyright notice,
- 11. * this list of conditions and the following disclaimer in the documentation
- 12. * and/or other materials provided with the distribution.
- 13. *
- 14. * Neither the name of the HSQL Development Group nor the names of its
- 15. * contributors may be used to endorse or promote products derived from this
- 16. * software without specific prior written permission.
- 17. *
- 18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- 19. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- 20. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- 21. * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
- 22. * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- 23. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- 24. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- 25. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- 26. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- 27. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- 28. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- 29. */
ruby 代码
- package org.hsqldb.sample;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- * Title: Testdb
- * Description: simple hello world db example of a
- * standalone persistent db application
- *
- * every time it runs it adds four more rows to sample_table
- * it does a query and prints the results to standard out
- *
- * Author: Karl Meissner karl@meissnersd.com
- */
- public class Testdb {
- Connection conn; //our connnection to the db - presist for life of program
- // we dont want this garbage collected until we are done
- public Testdb(String db_file_name_prefix) throws Exception { // note more general exception
- // Load the HSQL Database Engine JDBC driver
- // hsqldb.jar should be in the class path or made part of the current jar
- Class.forName("org.hsqldb.jdbcDriver");
- // connect to the database. This will load the db files and start the
- // database if it is not alread running.
- // db_file_name_prefix is used to open or create files that hold the state
- // of the db.
- // It can contain directory names relative to the
- // current working directory
- conn = DriverManager.getConnection("jdbc:hsqldb:"
- + db_file_name_prefix, // filenames
- "sa", // username
- ""); // password
- }
- public void shutdown() throws SQLException {
- Statement st = conn.createStatement();
- // db writes out to files and performs clean shuts down
- // otherwise there will be an unclean shutdown
- // when program ends
- st.execute("SHUTDOWN");
- conn.close(); // if there are no other open connection
- }
- //use for SQL command SELECT
- public synchronized void query(String expression) throws SQLException {
- Statement st = null;
- ResultSet rs = null;
- st = conn.createStatement(); // statement objects can be reused with
- // repeated calls to execute but we
- // choose to make a new one each time
- rs = st.executeQuery(expression); // run the query
- // do something with the result set.
- dump(rs);
- st.close(); // NOTE!! if you close a statement the associated ResultSet is
- // closed too
- // so you should copy the contents to some other object.
- // the result set is invalidated also if you recycle an Statement
- // and try to execute some other query before the result set has been
- // completely examined.
- }
- //use for SQL commands CREATE, DROP, INSERT and UPDATE
- public synchronized void update(String expression) throws SQLException {
- Statement st = null;
- st = conn.createStatement(); // statements
- int i = st.executeUpdate(expression); // run the query
- if (i == -1) {
- System.out.println("db error : " + expression);
- }
- st.close();
- } // void update()
- public static void dump(ResultSet rs) throws SQLException {
- // the order of the rows in a cursor
- // are implementation dependent unless you use the SQL ORDER statement
- ResultSetMetaData meta = rs.getMetaData();
- int colmax = meta.getColumnCount();
- int i;
- Object o = null;
- // the result set is a cursor into the data. You can only
- // point to one row at a time
- // assume we are pointing to BEFORE the first row
- // rs.next() points to next row and returns true
- // or false if there is no next row, which breaks the loop
- for (; rs.next(); ) {
- for (i = 0; i < colmax; ++i) {
- o = rs.getObject(i + 1); // Is SQL the first column is indexed
- // with 1 not 0
- System.out.print(o.toString() + " ");
- }
- System.out.println(" ");
- }
- } //void dump( ResultSet rs )
- public static void main(String[] args) {
- Testdb db = null;
- try {
- db = new Testdb("db_file");
- } catch (Exception ex1) {
- ex1.printStackTrace(); // could not start db
- return; // bye bye
- }
- try {
- //make an empty table
- //
- // by declaring the id column IDENTITY, the db will automatically
- // generate unique values for new rows- useful for row keys
- db.update(
- "CREATE TABLE sample_table ( id INTEGER IDENTITY, str_col VARCHAR(256), num_col INTEGER)");
- } catch (SQLException ex2) {
- //ignore
- //ex2.printStackTrace(); // second time we run program
- // should throw execption since table
- // already there
- //
- // this will have no effect on the db
- }
- try {
- // add some rows - will create duplicates if run more then once
- // the id column is automatically generated
- db.update(
- "INSERT INTO sample_table(str_col,num_col) VALUES('Ford', 100)");
- db.update(
- "INSERT INTO sample_table(str_col,num_col) VALUES('Toyota', 200)");
- db.update(
- "INSERT INTO sample_table(str_col,num_col) VALUES('Honda', 300)");
- db.update(
- "INSERT INTO sample_table(str_col,num_col) VALUES('GM', 400)");
- // do a query
- db.query("SELECT * FROM sample_table WHERE num_col < 250");
- // at end of program
- db.shutdown();
- } catch (SQLException ex3) {
- ex3.printStackTrace();
- }
- } // main()
- } // class Testdb