|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /*
- @ITMillApache2LicenseForJavaFiles@
- */
-
- package com.itmill.toolkit.demo.util;
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
-
- /**
- * Creates temporary database named toolkit with sample table named employee and
- * populates it with data. By default we use HSQLDB. Ensure that you have
- * hsqldb.jar under WEB-INF/lib directory. Database is will be created into
- * memory.
- *
- * @author IT Mill Ltd.
- *
- */
- public class SampleDatabase {
-
- public static final int ROWCOUNT = 1000;
-
- private Connection connection = null;
-
- private static final String[] firstnames = new String[] { "Amanda",
- "Andrew", "Bill", "Frank", "Matt", "Xavier", "John", "Mary", "Joe",
- "Gloria", "Marcus", "Belinda", "David", "Anthony", "Julian",
- "Paul", "Carrie", "Susan", "Gregg", "Michael", "William", "Ethan",
- "Thomas", "Oscar", "Norman", "Roy", "Sarah", "Jeff", "Jane",
- "Peter", "Marc", "Josie", "Linus" };
-
- private static final String[] lastnames = new String[] { "Torvalds",
- "Smith", "Jones", "Beck", "Burton", "Bell", "Davis", "Burke",
- "Bernard", "Hood", "Scott", "Smith", "Carter", "Roller", "Conrad",
- "Martin", "Fisher", "Martell", "Freeman", "Hackman", "Jones",
- "Harper", "Russek", "Johnson", "Sheridan", "Hill", "Parker",
- "Foster", "Moss", "Fielding" };
-
- private static final String[] titles = new String[] { "Project Manager",
- "Marketing Manager", "Sales Manager", "Sales", "Trainer",
- "Technical Support", "Account Manager", "Customer Support",
- "Testing Engineer", "Software Designer", "Programmer", "Consultant" };
-
- private static final String[] units = new String[] { "Tokyo",
- "Mexico City", "Seoul", "New York", "Sao Paulo", "Bombay", "Delhi",
- "Shanghai", "Los Angeles", "London", "Shanghai", "Sydney",
- "Bangalore", "Hong Kong", "Madrid", "Milano", "Beijing", "Paris",
- "Moscow", "Berlin", "Helsinki" };
-
- /**
- * Create temporary database.
- *
- */
- public SampleDatabase() {
- // connect to SQL database
- connect();
-
- // initialize SQL database
- createTables();
-
- // test by executing sample JDBC query
- testDatabase();
- }
-
- /**
- * Creates sample table named employee and populates it with data.Use the
- * specified database connection.
- *
- * @param connection
- */
- public SampleDatabase(Connection connection) {
- // initialize SQL database
- createTables();
-
- // test by executing sample JDBC query
- testDatabase();
- }
-
- /**
- * Connect to SQL database. In this sample we use HSQLDB and an toolkit
- * named database in implicitly created into system memory.
- *
- */
- private void connect() {
- // use memory-Only Database
- final String url = "jdbc:hsqldb:mem:toolkit";
- try {
- Class.forName("org.hsqldb.jdbcDriver").newInstance();
- connection = DriverManager.getConnection(url, "sa", "");
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * use for SQL commands CREATE, DROP, INSERT and UPDATE
- *
- * @param expression
- * @throws SQLException
- */
- public void update(String expression) throws SQLException {
- Statement st = null;
- st = connection.createStatement();
- final int i = st.executeUpdate(expression);
- if (i == -1) {
- throw new SQLException("Database error : " + expression);
- }
- st.close();
- }
-
- /**
- * Create test table and few rows. Issue note: using capitalized column
- * names as HSQLDB returns column names in capitalized form with this demo.
- *
- */
- private void createTables() {
- try {
- String stmt = null;
- stmt = "CREATE TABLE employee ( ID INTEGER IDENTITY, FIRSTNAME VARCHAR(100), "
- + "LASTNAME VARCHAR(100), TITLE VARCHAR(100), UNIT VARCHAR(100) )";
- update(stmt);
- for (int j = 0; j < ROWCOUNT; j++) {
- stmt = "INSERT INTO employee(FIRSTNAME, LASTNAME, TITLE, UNIT) VALUES ("
- + "'"
- + firstnames[(int) (Math.random() * (firstnames.length - 1))]
- + "',"
- + "'"
- + lastnames[(int) (Math.random() * (lastnames.length - 1))]
- + "',"
- + "'"
- + titles[(int) (Math.random() * (titles.length - 1))]
- + "',"
- + "'"
- + units[(int) (Math.random() * (units.length - 1))]
- + "'" + ")";
- update(stmt);
- }
- } catch (final SQLException e) {
- if (e.toString().indexOf("Table already exists") == -1) {
- throw new RuntimeException(e);
- }
- }
- }
-
- /**
- * Test database connection with simple SELECT command.
- *
- */
- private String testDatabase() {
- String result = null;
- try {
- final Statement stmt = connection.createStatement(
- ResultSet.TYPE_SCROLL_INSENSITIVE,
- ResultSet.CONCUR_UPDATABLE);
- final ResultSet rs = stmt
- .executeQuery("SELECT COUNT(*) FROM employee");
- rs.next();
- result = "rowcount for table test is " + rs.getObject(1).toString();
- stmt.close();
- } catch (final SQLException e) {
- throw new RuntimeException(e);
- }
- return result;
- }
-
- public Connection getConnection() {
- return connection;
- }
-
- }
|