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 / General / October 2006

Tip: Looking for answers? Try searching our database.

connecting to a database

Thread view: 
Justin - 09 Oct 2006 02:51 GMT
I am designing a medical application, since I am a programming novice,
its a startup company with no capital, and I want to keep it easy to
install at Beta sites, I would like to use an Access Database to store
information.

So I really dont know how this stuff is done, but I was thinking about
having a class devoted to exchanging information between the Java
application and the Access DB.  I envision a class calling a method
inside the databaseClass and passing some parameters like table names
and a DefualtListModel or an ArrayList to deposit information, or a
table name and a query field entry to retrieve information.

However, I have no idea how to set up a connection.  I have spent about
2 hours tonight googling, all I can find are either super small
snippets of code that do me no good, or code that when I cut and paste
into netBeans, lights my screen up red.

So I was wondering if anyone out there had some working code for a
connection to an Access Database that they would be willing to post.
As I've said before, I learn best buy doing, so if I could just get a
start, I could most likely figure everything else on my own.
Arne Vajhøj - 09 Oct 2006 03:11 GMT
> I am designing a medical application, since I am a programming novice,
> its a startup company with no capital, and I want to keep it easy to
[quoted text clipped - 17 lines]
> As I've said before, I learn best buy doing, so if I could just get a
> start, I could most likely figure everything else on my own.

Java + Access = problems

There are no real JDBC driver for MS Access. Only the
JDBC ODBC bridge. And that is not good.

The syntax to connect is:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =
DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Access Driver
(*.mdb)};Dbq=C:\\somedir\\something.mdb;Uid=xxxx;Pwd=yyyy;");

Arne
Lionel - 09 Oct 2006 03:12 GMT
> I am designing a medical application, since I am a programming novice,
> its a startup company with no capital, and I want to keep it easy to
> install at Beta sites, I would like to use an Access Database to store
> information.

I've written a medical application also, I used MySQL to ensure
cross-platform. You can install MySQL using the silent install option
and then do some config automatically to make it easy for the user.
Either way . . .

> So I really dont know how this stuff is done, but I was thinking about
> having a class devoted to exchanging information between the Java
> application and the Access DB.  I envision a class calling a method
> inside the databaseClass and passing some parameters like table names
> and a DefualtListModel or an ArrayList to deposit information, or a
> table name and a query field entry to retrieve information.

I have a Singleton class that acts as an interface to the database. It
provides methods like

public static void addPatient(Patient patient) {...}

That approach is very programmer friendly. There is also hibernate which
is even better. It wasn't around when I started or I didn't know about
it but it's very good.

> However, I have no idea how to set up a connection.  I have spent about
> 2 hours tonight googling, all I can find are either super small
> snippets of code that do me no good,

You're googling skills might be broken as my first result was:
http://www.javaworld.com/javaworld/javaqa/2000-09/03-qa-0922-access.html

You will need to scroll down to the resources section at the bottom.
There are links to a Sun tutorial, if you spend the time with these you
will be able to learn it. Make sure you get the driver or nothing will
work. I can't give detailed info about Access. To make things easy you
probably want to manually create a database first so that you have
something to connect to.

 or code that when I cut and paste
> into netBeans, lights my screen up red.

Well some of the errors would be good to help use help you. It's most
likely because you don't have the correct jar files. These are the
drivers. Please post the error messages here after reading the above.

Lionel.
Justin - 09 Oct 2006 03:32 GMT
I think, on your recommendation, ill just try mySQL.  I am downloading
it now.

I had seen that page, however, this is really the first time I have
written any code since my intro to computer science course I took 4
years ago.  Didnt understand OOP then, it has recently kinda clicked
together, although, when it comes to inputting and outputting, I have
never written any code like that.  So I just see those snippets and it
looks like a foreign language.  I've been spoiled with connecting to
databases from using MS InfoPath.  haha.  Anyways, any chance you could
post that class that interfaces to the databases?

> > I am designing a medical application, since I am a programming novice,
> > its a startup company with no capital, and I want to keep it easy to
[quoted text clipped - 44 lines]
>
> Lionel.
Lionel - 09 Oct 2006 04:05 GMT
> I think, on your recommendation, ill just try mySQL.  I am downloading
> it now.
[quoted text clipped - 7 lines]
> databases from using MS InfoPath.  haha.  Anyways, any chance you could
> post that class that interfaces to the databases?

Drop me an email at the above address but remove the underscore. I'll
see what I can do. I have some constraints regarding what I can release
until we finally release the application under gpl. However, using MySQL
I can provide you with the necessary code and links to the best
resources to get you going. I would strongly suggest you consider
looking into hibernate. Hibernate will hide a lot of the details and
make your databasing experience simpler. Do a google search to find out
more.

Lionel.
Simon Brooke - 09 Oct 2006 12:37 GMT
>> I am designing a medical application, since I am a programming novice,
>> its a startup company with no capital, and I want to keep it easy to
[quoted text clipped - 5 lines]
> and then do some config automatically to make it easy for the user.
> Either way . . .

If you're doing anything serious, I'd question the MySQL decision; it's not
really a very good database. My view is you should write portable ASCII as
close to the ANSI92 spec as possible. I use a C preprocessor file to
generate different SQL syntaxes; it's a working solution, but not a
wonderful one.

Whichever way you're going you should use some sort of a database
abstraction layer to isolate any database engine specific code.

Signature

simon@jasmine.org.uk (Simon Brooke) http://www.jasmine.org.uk/~simon/

       to err is human, to lisp divine
                                ;; attributed to Kim Philby, oddly enough.

Thomas Kellerer - 09 Oct 2006 13:23 GMT
> My view is you should write portable ASCII as
> close to the ANSI92 spec as possible

Can you elaborate what you mean with "portable ASCII" ????

Thomas

Signature

It's not a RootKit - it's a Sony

Furious George - 09 Oct 2006 17:04 GMT
> > My view is you should write portable ASCII as
> > close to the ANSI92 spec as possible
>
> Can you elaborate what you mean with "portable ASCII" ????

I think he means portable SQL.  The more portable the SQL, the easier
it is to change database engines.

> Thomas
Lionel - 09 Oct 2006 22:41 GMT
> I'd question the MySQL decision; it's not
> really a very good database.

Can you elaborate on MySQL not being a good database? Google any many
hundred of other enormous users seem to be very happy with it.

Lionel.
Daniel Dyer - 09 Oct 2006 23:11 GMT
>> I'd question the MySQL decision; it's not
>> really a very good database.
[quoted text clipped - 3 lines]
>
> Lionel.

MySQL is perfectly adequate for many tasks but, because of the licensing,  
I rarely use it.  Specifically, the JDBC driver is GPL, rather than LGPL  
as it used to be, which results in legal ambiguity if you use it for  
commercial development or non-GPL open source development (unless you pay  
for a separate licence).  Bizarrely, I can, without charge, bundle an  
Oracle JDBC driver with my non-GPL application but not a MySQL one.

PostgreSQL is a solid product, better in some respects than MySQL, and the  
licence is much more agreeable to freeloaders like me.

Dan.

Signature

Daniel Dyer
http://www.uncommons.org

Justin - 11 Oct 2006 23:55 GMT
first release is just something to get a small customer base so we can
afford to hire employees who really know how to program, as opposed to
me whos taken one 4 credit course in java.  I think all we need is a
nice Beta version to release to get some cash flow.  Once docs get
their hands on it, they will want it.

So I'm definatly looking for a cheap/free database for short term use
until we have enough capital to build the massive database I have
envisioned.
Daniel Dyer - 12 Oct 2006 00:36 GMT
> first release is just something to get a small customer base so we can
> afford to hire employees who really know how to program, as opposed to
[quoted text clipped - 5 lines]
> until we have enough capital to build the massive database I have
> envisioned.

For ease of install (of your application), an embedded pure Java database,  
such as Derby (http://db.apache.org/derby/) or HSQLDB  
(http://www.hsqldb.org/), would be a good choice.  They will work on any  
platform that your application does.  I don't know which one is best but I  
believe Derby will be included with JavaSE 6.0 when it is released, so it  
might be the obvious choice.

Avoid Access.  If you want something more heavyweight (and separate from  
the application) use PostgreSQL (http://www.postgresql.org).  PostgreSQL  
will probably be sufficient for the massive database that you envisage  
(unless you're talking high-end Oracle "massive").

As for how to connect to the database, you will need to use JDBC, but not  
necessarily directly.  There are sevaral Object-Relational Mapping (ORM)  
tools available for Java that allow you to mostly think in terms of  
objects rather than tables or SQL.  Currently the most popular ORM library  
is Hibernate (http://www.hibernate.org).  Hibernate supports several  
popular RDBMS products including Derby, HSQLDB, PostgreSQL and MySQL.  In  
theory, if you use Hibernate, you should be able to switch databases later  
with a single configuration change (it's never quite that simple, but is  
still reasonably painless).

Dan.

Signature

Daniel Dyer
http://www.uncommons.org

Justin - 12 Oct 2006 02:40 GMT
lol, thanks.  Ya, I'm thinking when this is finished, there will be
10's of thousands of tables.  So I am talking a ton.  But I'm also
thinking of building different applications that share the same
database.  Each application only connecting to the certain tables that
it needs to.  But ya, definatly talking about a massive database.

Thanks for all the input.....
Furious George - 09 Oct 2006 03:38 GMT
> I am designing a medical application, since I am a programming novice,
> its a startup company with no capital, and I want to keep it easy to
> install at Beta sites, I would like to use an Access Database to store
> information.

Please don't do this.  Since you are a novice, you will inevitably make
mistakes.  That is OK unless you are working on highly critical
projects like medical applications.  So please do your learning on
another type of project.

> So I really dont know how this stuff is done, but I was thinking about
> having a class devoted to exchanging information between the Java
[quoted text clipped - 12 lines]
> As I've said before, I learn best buy doing, so if I could just get a
> start, I could most likely figure everything else on my own.

I have created a toy Access Database application.  It does not do
anything great and it does not follow the best programming practices,
but it does include working code for a connection to an Access
database.  To make it work, you must use the ODBC manager to register
the youraccessdb database.

(1) Since your client must also register the database with the ODBC
manager, I do not consider it easy to install.
(2) If you use a properties.txt file like I did, then it would be
trivial for you to upgrade to a real database when you realize that
Access is only appropriate for toy applications (like mine) and
definitely not highly critical applications (like yours).

=====<SimpleDBApplication.java>=====
public class SimpleDBApplication
{
   public static final void main ( final java . lang . String [ ] args
) throws java . lang . Exception
   {
       final java . sql . Connection connection = getConnection ( ) ;
       try
           {
               application ( connection ) ;
           }
       finally
           {
               connection . close ( ) ;
           }
   }

   /**
    * Create a file called properties.txt with driverClassName
(sun.jdbc.odbc.JdbcOdbcDriver) and url (jdbc:odbc:youraccessdb).
    **/
   private static final java . sql . Connection getConnection ( )
throws java . io . IOException , java . lang . ClassNotFoundException ,
java . sql . SQLException , java . lang . InstantiationException , java
. lang . IllegalAccessException
   {
       final java . util . Properties properties = new java . util .
Properties ( ) ;
       final java . lang . Class thisClass = SimpleDBApplication .
class ;
       final java . io . InputStream propertiesStream = thisClass .
getResourceAsStream ( "properties.txt" ) ;
       properties . load ( propertiesStream ) ;
       propertiesStream . close ( ) ;
       final java . lang . String driverClassName = properties .
getProperty (
"driverClassName" ) ;
       final java . lang . Class driverClass = java . lang . Class .
forName (
driverClassName ) ;
       final java . lang . Object driverObject = driverClass .
newInstance ( )
;
       final java . sql . Driver driver = ( java . sql . Driver ) (
driverObject ) ;
       java . sql . DriverManager . registerDriver ( driver ) ;
       final java . lang . String url = properties . getProperty (
"url" ) ;
       final java . sql . Connection connection = java . sql .
DriverManager .
getConnection ( url , properties ) ;
       java . sql . DriverManager . deregisterDriver ( driver ) ;
       return ( connection ) ;
   }

   private static final void application ( final java . sql .
Connection connection ) throws java . sql . SQLException
   {
       final java . sql . DatabaseMetaData metadata = connection .
getMetaData
( ) ;
       final boolean supportsTransactions = metadata .
supportsTransactions ( ) ;
       java . lang . System . out . println (
"supportsTransactions:\t" + supportsTransactions ) ;
       final java . lang . String sqlKeywords = metadata .
getSQLKeywords ( ) ;
       java . lang . System . out . println ( "sqlKeywords:\t" +
sqlKeywords ) ;
       printTypeInfo ( metadata ) ;
   }

   private static final void printTypeInfo ( final java . sql .
DatabaseMetaData metadata ) throws java . sql . SQLException
   {
       final java . sql . ResultSet typeInfo = metadata . getTypeInfo
( ) ;
       try
           {
               printTable ( typeInfo ) ;
           }
       finally
           {
               typeInfo . close ( ) ;
           }
   }

   /**
    * See http://java.sun.com/j2se/1.4.2/docs/api/index.html
    **/
   private static final void printTable ( final java . sql . ResultSet
resultSet ) throws java . sql . SQLException
   {
       final java . sql . ResultSetMetaData metadata = resultSet .
getMetaData
( ) ;
       final int columnCount = metadata . getColumnCount ( ) ;
       while ( resultSet . next ( ) )
           {
               for ( int i = 1 ; i <= columnCount ; i ++ )
                   {
                       final java . lang . Object object = resultSet .
getObject ( i ) ;
                       java . lang . System . out . print ( object +
"\t" ) ;
                   }
               java . lang . System . out . println ( ) ;
           }
   }
}
=====</SimpleDBApplication>=====
=====<properties.txt>=====
driverClassName:sun.jdbc.odbc.JdbcOdbcDriver
url:jdbc:odbc:youraccessdb
=====</properties.txt>=====
Justin - 09 Oct 2006 03:55 GMT
Thanks for the code.  I dont want to give you the wrong impression, I
am under no time constraints.  The company consists of myself and a
surgeon from my day job.  We've built and refined an InfoPath form over
the course of 4 years, and feel that we have out-grown the usefulness
of InfoPath, so I'm attempting to code it up in java.  However,
depending on the performance, we may decide to sell it to other
surgeons.  But thanks again for the code...

> > I am designing a medical application, since I am a programming novice,
> > its a startup company with no capital, and I want to keep it easy to
[quoted text clipped - 151 lines]
> url:jdbc:odbc:youraccessdb
> =====</properties.txt>=====
Ian Wilson - 09 Oct 2006 16:38 GMT
> I am designing a medical application, since I am a programming novice,
> its a startup company with no capital, and I want to keep it easy to
> install at Beta sites, I would like to use an Access Database to store
> information.

I'd consider an embeddable pure-Java DBMS like Derby
http://db.apache.org/derby/

There are many alternatives, some people seem to like
http://www.hsqldb.org/ which has a smaller footprint.

> However, I have no idea how to set up a connection.  I have spent about
> 2 hours tonight googling, all I can find are either super small
> snippets of code that do me no good, or code that when I cut and paste
> into netBeans, lights my screen up red.

Sample source code at
http://db.apache.org/derby/papers/DerbyTut/embedded_intro.html

You'll need to download and install Derby first and tell NetBeans about it.
Ian Wilson - 09 Oct 2006 16:41 GMT
>> code that when I cut and paste
>> into netBeans, lights my screen up red.
>
> You'll need to download and install Derby first and tell NetBeans about it.

http://www.netbeans.org/kb/50/derby-demo.html


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.