Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / Databases / December 2003

Tip: Looking for answers? Try searching our database.

need help using hsqldb

Thread view: 
Mladen Adamovic - 06 Dec 2003 19:49 GMT
I made database photo and put it into /photo dir.
hSQLdb ScriptTool did photo.properties, photo.script and photo.data(0
bytes).

In photo.script I have:
<snip>
CREATE TABLE LOCALIZATION(ID INTEGER NOT NULL PRIMARY KEY,DESCRIPTION
CHAR(50),ENG CHAR(200),GER CHAR(200),FRE CHAR(200),ITA CHAR(200),POR
CHAR(200),SER CHAR(200),SPA CHAR(200))
<snip>
INSERT INTO LOCALIZATION
VALUES(6,'Format','Format','Format','Format','Configurazione','Formato','For
mat','El formato')
<snip>

And I have following problem : In Java I connect to the hsqldb database,
execute simple query select * from localization and
got No data is available (in the ResultSet object).

I did class Problem which is small class representing problem I have, and
when I run it:
C:\photo>java -classpath /hsqldb/lib/hsqldb.jar;. Problem
c:org.hsqldb.jdbcConnection@147c5fc
Exception : No data is available
java.sql.SQLException: No data is available
       at org.hsqldb.Trace.getError(Unknown Source)
       at org.hsqldb.Trace.error(Unknown Source)
       at org.hsqldb.jdbcResultSet.checkAvailable(Unknown Source)
       at org.hsqldb.jdbcResultSet.getColumnInType(Unknown Source)
       at org.hsqldb.jdbcResultSet.getInt(Unknown Source)
       at Problem.init(Problem.java:73)
       at Problem.<init>(Problem.java:55)
       at Problem.main(Problem.java:93)

Now follows Problem.java SOURCE CODE:
---------------------------------------------------------------------<cut
here: Problem.java>
import java.sql.*;
import java.io.*;
import java.util.*;

public class Problem
{
public String SQLServer="hSQLdb";
public String MySqlDriverName="com.mysql.jdbc.Driver";
public String hSQLdbDriverName="org.hsqldb.jdbcDriver";
public String
MySqlDbURL="jdbc:mysql://localhost/photo?user=guest&password=guest";
public String hSQLdbURL="jdbc:hsqldb:/photo/photo";
public String hSQLdbUser="sa";
public String hSQLdbPass="";

  Connection con;
  String mem_id;
  String language;
  Statement selectStmt;
  ResultSet rs;
  int langNo,translLength;
  static String[][] transl=new String[500][10];

public Connection getConnection()
{
 Connection c;
   try
   {

  if(SQLServer.toUpperCase().equals("HSQLDB"))
  {
    Class.forName (hSQLdbDriverName);
    c = DriverManager.getConnection (hSQLdbURL, hSQLdbUser, hSQLdbPass);
   System.out.println("c:"+c);
    return c;
     }
     else
     {
      System.out.println("Error in SQLServer name.");
      System.exit(0);
     }
  }
  catch (Exception e) {
          System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
       e.printStackTrace(); }
 return null;
}

  /**
  * constructor for english language
  */
  public Problem()
  {
     //connect to the database where information of orders are stored
     con=getConnection();
     init();
  }

  void init()
  {
  int no=0;
     translLength=0;
     try
     {
        selectStmt=con.createStatement();
        rs=selectStmt.executeQuery(
              "select id,description,eng,ger,fre,ita,por,ser,spa from
localization");
        do
        {
         //rs.first(); //IF I uncomment this line I GOT
              //Exception : ResultSet was set to forward only

         no=rs.getInt(1); //IN THIS LINE I GOT EXCEPTION
         transl[no][0]=rs.getString(2); //description
         transl[no][1]=rs.getString(3); //english
         transl[no][2]=rs.getString(4); //german
         transl[no][3]=rs.getString(5); //french
         transl[no][4]=rs.getString(6); //italian
         transl[no][5]=rs.getString(7); //portuguese
         transl[no][6]=rs.getString(8); //serbian
         transl[no][7]=rs.getString(9); //spain
         if(no>translLength) translLength=no;

System.err.println(transl[no][0]+transl[no][1]+transl[no][2]+transl[no][3]+
              transl[no][4]+transl[no][5]+transl[no][6]+transl[no][7]);
        } while(rs.next());
     }  catch(Exception e)
        {  System.err.println("Exception : "+e.getMessage());
           e.printStackTrace();
        }
  }
  public static void main(String[] args)
  {
    Problem p=new Problem();
    //p.run();
  }

}

---------------------------------------------------------------------<cut
here: Problem.java>

Please help me.
If somebody want, I can send photo.* database files by email for easier (and
IMHO very easy for experienced hsqldb programers) resolving the problem.
Thanks in advance.
gnazio - 07 Dec 2003 02:45 GMT
[CUT]
> And I have following problem : In Java I connect to the hsqldb database,
> execute simple query select * from localization and
> got No data is available (in the ResultSet object).
[CUT]

I think that this is not an hsqldb problem.
When you get your ResultSet the cursor isn't set on the first row.
The first thing you have to do is to call next() on your ResultSet.
If you use a
do {
...
} while(rs.next());
you'll get an exeception on the firse rs.getXXX because the cursor is
pointing nothing.
Modify your code using a
while(rs.next()) {
...
}
and it'll work.
Mladen Adamovic - 07 Dec 2003 09:20 GMT
Now my program works. Thank to gnazio and Herman Timmermans, for the really
fast help.

> [CUT]
> > And I have following problem : In Java I connect to the hsqldb database,
[quoted text clipped - 16 lines]
> }
> and it'll work.
Herman Timmermans - 07 Dec 2003 06:40 GMT
> I made database photo and put it into /photo dir.
> hSQLdb ScriptTool did photo.properties, photo.script and photo.data(0
[quoted text clipped - 7 lines]
> <snip>
> INSERT INTO LOCALIZATION

VALUES(6,'Format','Format','Format','Format','Configurazione','Formato','For
> mat','El formato')
> <snip>
[quoted text clipped - 105 lines]
>           transl[no][7]=rs.getString(9); //spain
>           if(no>translLength) translLength=no;

System.err.println(transl[no][0]+transl[no][1]+transl[no][2]+transl[no][3]+
>                transl[no][4]+transl[no][5]+transl[no][6]+transl[no][7]);
>          } while(rs.next());
[quoted text clipped - 18 lines]
> (and IMHO very easy for experienced hsqldb programers) resolving the
> problem. Thanks in advance.
**********************************************************
I think you should use rs.next() to position the resultset to the first
record.  So you need to change your code to do something lie
while (rs.next()){
//do something
};

Hope this helps,
Brgds Herman

Signature

Suse Linux Professional 8.1 on Athlon 1.1 Ghz 512 Mb
Anti Spam = remove the "dot" and the "at"
Registered Linux User #264690



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.