以下是OutputApplet.java的代码 /* * Copyright 2003 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * Use of this software is authorized pursuant to the terms of the license found at * http://developer.java.sun.com/berkeley_license.html. */ /** * This is a demonstration JDBC applet. * It displays some simple standard output from the Coffee database. */import java.applet.Applet; import java.awt.Graphics; import java.util.Vector; import java.sql.*;public class OutputApplet extends Applet implements Runnable { private Thread worker; private Vector queryResults; private String message = "Initializing"; public synchronized void start() { // Every time "start" is called we create a worker thread to // re-evaluate the database query. if (worker == null) { message = "Connecting to database"; worker = new Thread(this); worker.start(); } } /** * The "run" method is called from the worker thread. Notice that * because this method is doing potentially slow databases accesses * we avoid making it a synchronized method. */ public void run() { // String url = "jdbc:mySubprotocol:myDataSource"; String url = "jdbc:odbc:server1"; String query = "select COF_NAME, PRICE from COFFEES";
try { //Class.forName("myDriver.ClassName"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(Exception ex) { setError("Can't find Database driver class: " + ex); return; } try { Vector results = new Vector(); Connection con = DriverManager.getConnection(url, "sa", ""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { String s = rs.getString("COF_NAME"); float f = rs.getFloat("PRICE"); String text = s + " " + f; results.addElement(text); } stmt.close(); con.close(); setResults(results); } catch(SQLException ex) { setError("SQLException: " + ex); } } /** * The "paint" method is called by AWT when it wants us to * display our current state on the screen. */ public synchronized void paint(Graphics g) { // If there are no results available, display the current message. if (queryResults == null) { g.drawString(message, 5, 50); return; } // Display the results. g.drawString("Prices of coffee per pound: ", 5, 10); int y = 30; java.util.Enumeration enum = queryResults.elements(); while (enum.hasMoreElements()) { String text = (String)enum.nextElement(); g.drawString(text, 5, y); y = y + 15; } } /** * This private method is used to record an error message for * later display. */ private synchronized void setError(String mess) { queryResults = null; message = mess; worker = null; // And ask AWT to repaint this applet. repaint(); } /** * This private method is used to record the results of a query, for * later display. */ private synchronized void setResults(Vector results) { queryResults = results; worker = null; // And ask AWT to repaint this applet. repaint(); } }
环境变量没问题。不用Applet,将Applet程序改用一般程序的执行方式是没有问题,
这说明环境变量设置是正确的。
/*
* Copyright 2003 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
* Use of this software is authorized pursuant to the terms of the license found at
* http://developer.java.sun.com/berkeley_license.html.
*/ /**
* This is a demonstration JDBC applet.
* It displays some simple standard output from the Coffee database.
*/import java.applet.Applet;
import java.awt.Graphics;
import java.util.Vector;
import java.sql.*;public class OutputApplet extends Applet implements Runnable {
private Thread worker;
private Vector queryResults;
private String message = "Initializing"; public synchronized void start() {
// Every time "start" is called we create a worker thread to
// re-evaluate the database query.
if (worker == null) {
message = "Connecting to database";
worker = new Thread(this);
worker.start();
}
} /**
* The "run" method is called from the worker thread. Notice that
* because this method is doing potentially slow databases accesses
* we avoid making it a synchronized method.
*/ public void run() {
// String url = "jdbc:mySubprotocol:myDataSource";
String url = "jdbc:odbc:server1";
String query = "select COF_NAME, PRICE from COFFEES";
try {
//Class.forName("myDriver.ClassName");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch(Exception ex) {
setError("Can't find Database driver class: " + ex);
return;
} try {
Vector results = new Vector();
Connection con = DriverManager.getConnection(url,
"sa", "");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String s = rs.getString("COF_NAME");
float f = rs.getFloat("PRICE");
String text = s + " " + f;
results.addElement(text);
} stmt.close();
con.close(); setResults(results); } catch(SQLException ex) {
setError("SQLException: " + ex);
}
} /**
* The "paint" method is called by AWT when it wants us to
* display our current state on the screen.
*/ public synchronized void paint(Graphics g) {
// If there are no results available, display the current message.
if (queryResults == null) {
g.drawString(message, 5, 50);
return;
} // Display the results.
g.drawString("Prices of coffee per pound: ", 5, 10);
int y = 30;
java.util.Enumeration enum = queryResults.elements();
while (enum.hasMoreElements()) {
String text = (String)enum.nextElement();
g.drawString(text, 5, y);
y = y + 15;
}
} /**
* This private method is used to record an error message for
* later display.
*/ private synchronized void setError(String mess) {
queryResults = null;
message = mess;
worker = null;
// And ask AWT to repaint this applet.
repaint();
} /**
* This private method is used to record the results of a query, for
* later display.
*/ private synchronized void setResults(Vector results) {
queryResults = results;
worker = null;
// And ask AWT to repaint this applet.
repaint();
}
}