27. februar 2002 - 17:55
Der er
8 kommentarer
Hvordan kobler man et java program sammen med en Acces-database?
.
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
27. februar 2002 - 20:25
#1
Du bruger denne klasse: og kalder den med: open("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:ODBCNAVN","USERNAME","PASSWORD"); Det med uppercase skal tilpasses dit system. /* * DataBase.java * * Created on 3. december 2000, 21:06 */ import java.sql.*; import disky.database.*; /** * * @author Søren Reinke * @version */ /* * Funder lidt over om database forbindelsen kun skal åbnes ved brug, eller x antal altid skal være åben * og man så bruge den/de som connection pool */ public class DbHandler extends Object { private Connection con=null; /** Creates new DataBase */ public DbHandler() { } public boolean open(String dbDriverName, String dbClassName, String user, String pass) { try { if(con==null) { Class.forName(dbDriverName).newInstance(); con = DriverManager.getConnection(dbClassName, user, pass); } } catch (SQLException e) { e.printStackTrace(System.out); return false; } catch (ClassNotFoundException e) { e.printStackTrace(System.out); return false; } catch (InstantiationException e) { e.printStackTrace(System.out); return false; } catch (IllegalAccessException e) { e.printStackTrace(System.out); return false; } return true; } public void close() { if(con!=null) { try { con.close(); con=null; } catch (SQLException e) { e.printStackTrace(System.out); } } } public int doUpdate(String sql) { if(con!=null) { try { long time=System.currentTimeMillis(); Statement stat=con.createStatement(); System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms "+sql); return stat.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(System.out); } } return 0; } public ResultSet doQuery(String sql) { if(con!=null) { try { long time=System.currentTimeMillis(); Statement stat=con.createStatement(); System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms "+sql); return stat.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(System.out); } } return null; } }
27. februar 2002 - 21:08
#2
hvad er forName?
27. februar 2002 - 21:23
#3
hvad er disky.databse.*?
27. februar 2002 - 21:33
#4
forName er den metoder til at lave dynamisk class loading. Fjern package linien (undskyld)
28. februar 2002 - 01:39
#5
Kan jeg opdatere min database fra mit javaprogram? Når jeg opretter min statement angiver jeg at man skal kunne scrolle og man skal kunne opdatere den på flg måde: Statement stat=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); Men når jeg kører mit java program får jeg flg. fejlmeddelelse: java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY Er det fordi at jeg bare ikke kan opdatere en Acces Database fra et javaprogram?
28. februar 2002 - 07:35
#6
Nej det er fordi at access ikke tillader scrolling, eller at jdbc-odbc driveren ikke tillader det, eller odbc driveren ikke gør. Man kan sagtens opdatere fra Java.
28. februar 2002 - 13:04
#7
Jeg får faktisk allerede en exception når jeg opretter mit resultset: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented Jeg opretter statement på flg måde: Statement stat=con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Men hvis jeg skifter CONCUR_UPDATABLE med CONCUR_READ_ONLY kan jeg sagtens oprette mit resultset - men så kan jeg bare ikke opdatere det. Kan jeg ændre noget i Acces eller i min driver?
28. februar 2002 - 13:12
#8
Har tjekket min driver - der er IKKE noget flueben i "read only"
Kurser inden for grundlæggende programmering