Win a copy of 97 Things Every Java Programmer Should Know this week in the Java in General forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Paul Clapham
  • Jeanne Boyarsky
  • Junilu Lacar
  • Henry Wong
  • Ron McLeod
  • Devaka Cooray
  • Tim Cooke
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Frits Walraven
  • Tim Holloway
  • Carey Brown
  • Piet Souris
  • salvin francis
  • fred rosenberger

HSQL Database error

Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Need some help. Using databases for the first time.

I have downloaded the hsql database and they provide a file. When I run this, I get the following exception:

java.lang.ClassNotFoundException: org.hsqldb.jdbc.JDBCDriver

at the line: Class.forName("org.hsqldb.jdbc.JDBCDriver");

Does someone know how to fix this error?

Akshay Jain
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Here is the entire Testdb file:

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
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

// 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
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.
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);

} // 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
// points to next row and returns true
// or false if there is no next row, which breaks the loop
for (;; ) {
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
"CREATE TABLE sample_table ( id INTEGER IDENTITY, str_col VARCHAR(256), num_col INTEGER)");
} catch (SQLException ex2) {

//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
"INSERT INTO sample_table(str_col,num_col) VALUES('Ford', 100)");
"INSERT INTO sample_table(str_col,num_col) VALUES('Toyota', 200)");
"INSERT INTO sample_table(str_col,num_col) VALUES('Honda', 300)");
"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
} catch (SQLException ex3) {
} // main()
} // class Testdb

Here is the exception/stack trace:

java.lang.ClassNotFoundException: org.hsqldb.jdbc.JDBCDriver
at Method)
at java.lang.ClassLoader.loadClass(
at sun.misc.Launcher$AppClassLoader.loadClass(
at java.lang.ClassLoader.loadClass(
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(
at org.hsqldb.sample.Testdb.<init>(
at org.hsqldb.sample.Testdb.main(

Saloon Keeper
Posts: 6454
Android Mac OS X Firefox Browser VI Editor Tomcat Server Safari
  • Likes 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You need to add the HSQLDB jar file to the classpath whenever you intend to use any of its classes.
Ranch Hand
Posts: 754
Eclipse IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This post shows how to join JUnit with HSQLDB, step by step: JUnit with HSQLDB, JPA and Hibernate.

I show the steps to use the HSQLDB with an application.

I hope it helps you.
This. Exactly this. This is what my therapist has been talking about. And now with a tiny ad:
Devious Experiments for a Truly Passive Greenhouse!
    Bookmark Topic Watch Topic
  • New Topic