| /* Copyright (c) 2001-2010, The HSQL Development Group |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * Redistributions of source code must retain the above copyright notice, this |
| * list of conditions and the following disclaimer. |
| * |
| * Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * Neither the name of the HSQL Development Group nor the names of its |
| * contributors may be used to endorse or promote products derived from this |
| * software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, |
| * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| |
| package org.hsqldb.test; |
| |
| import java.io.File; |
| import java.sql.Connection; |
| import java.sql.Driver; |
| import java.sql.DriverManager; |
| import java.sql.PreparedStatement; |
| import java.sql.ResultSet; |
| import java.sql.Statement; |
| import java.util.Properties; |
| |
| /** |
| * <b>Description</b> : HsqldbTestCase |
| * |
| * <p><b>Society</b> : dataXpresso |
| * @since 8 august 2006 |
| * @author Julien Blaize |
| */ |
| public class HsqldbTestCase { |
| |
| /** |
| * Deletes all files and subdirectories under dir. |
| * Returns true if all deletions were successful. |
| * If a deletion fails, the method stops attempting to delete and returns false. |
| */ |
| public static boolean deleteDir(File dir) { |
| |
| if (dir.isDirectory()) { |
| String[] children = dir.list(); |
| |
| for (int i = 0; i < children.length; i++) { |
| boolean success = deleteDir(new File(dir, children[i])); |
| |
| if (!success) { |
| return false; |
| } |
| } |
| } |
| |
| // The directory is now empty so delete it |
| return dir.delete(); |
| } |
| |
| public static void main(String[] args) { |
| |
| Properties props = new Properties(); |
| |
| props.put("user", "sa"); |
| props.put("password", ""); |
| props.put("hsqldb.default_table_type", "cached"); |
| |
| //props.put("hsqldb.cache_size_scale", "12"); |
| props.put("hsqldb.cache_scale", "8"); |
| |
| //props.put("hsqldb.cache_file_scale", "8"); |
| props.put("hsqldb.applog", "0"); |
| props.put("hsqldb.log_size", "200"); |
| props.put("hsqldb.result_memory_rows", "10"); |
| props.put("shutdown", "true"); |
| |
| String url = "jdbc:hsqldb:"; |
| |
| url += "/hsql/statBase/test"; |
| |
| //delete earlier files |
| HsqldbTestCase.deleteDir(new File("/hsql/statBase/")); |
| |
| try { |
| Class clsDriver = Class.forName("org.hsqldb.jdbc.JDBCDriver"); |
| Driver driver = (Driver) clsDriver.newInstance(); |
| |
| DriverManager.registerDriver(driver); |
| |
| Connection con = DriverManager.getConnection(url, props); |
| String createQuery = |
| "drop table test1 if exists;create table test1 (rowNum identity, col1 varchar(50), col2 int, col3 varchar(50))"; |
| Statement st = con.createStatement(); |
| |
| st.execute(createQuery); |
| st.close(); |
| |
| //we try to insert values in batch |
| String insertQuery = |
| "insert into test1 (col1,col2,col3) values (?,?,?)"; |
| PreparedStatement pst = con.prepareStatement(insertQuery); |
| |
| //we insert 1001 |
| for (int i = 0; i < 1001; i++) { |
| pst.setString(1, "string_" + i); |
| pst.setInt(2, i); |
| pst.setString(3, "string2_" + i); |
| pst.addBatch(); |
| |
| if ((i > 0) && (i % 100 == 0)) { |
| pst.executeBatch(); |
| } |
| } |
| |
| pst.close(); |
| |
| //we try to do a select on this statement and to scroll it with the absolute method |
| String selectQuery = "select * from test1"; |
| |
| st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, |
| ResultSet.CONCUR_READ_ONLY); |
| |
| ResultSet scrollableSet = st.executeQuery(selectQuery); |
| |
| scrollableSet.setFetchSize(100); |
| scrollableSet.next(); |
| |
| int tmpIndex = scrollableSet.getInt(3); |
| |
| if (tmpIndex != 0) { |
| System.out.println("index at 0 is !=0"); |
| } |
| |
| //we go from 0 to 1000 with absolute and a gap of 100 |
| for (int i = 0; i <= 1000; i += 100) { |
| scrollableSet.absolute(i + 1); |
| |
| tmpIndex = scrollableSet.getInt(3); |
| |
| System.out.println(tmpIndex); |
| } |
| |
| //we go from 1000 to 0 with absolute and a gap of 100 |
| for (int i = 1000; i > 0; i -= 100) { |
| scrollableSet.relative(-100); |
| |
| tmpIndex = scrollableSet.getInt(3); |
| |
| System.out.println(tmpIndex); |
| } |
| } catch (Exception ex) { |
| ex.printStackTrace(System.out); |
| } |
| } |
| } |