diff options
Diffstat (limited to 'src/com/vaadin/demo/util/SampleDatabase.java')
-rw-r--r-- | src/com/vaadin/demo/util/SampleDatabase.java | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/com/vaadin/demo/util/SampleDatabase.java b/src/com/vaadin/demo/util/SampleDatabase.java new file mode 100644 index 0000000000..e9238d95da --- /dev/null +++ b/src/com/vaadin/demo/util/SampleDatabase.java @@ -0,0 +1,173 @@ +/* +@ITMillApache2LicenseForJavaFiles@ + */ + +package com.vaadin.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; + } + +} |