我的applet运行良好,显示了我需要的数据库中的所有数据。但是,问题是我将创建的jar文件嵌入到jsp中。它没有显示数据库中的数据。
<applet code="myform.Form" archive="applet.jar" width="600" height="480"/>
applet正在jsp页面上运行,但在组合框中,项目(来自数据库)无法选择。 jar文件位于jsp页面所在的同一目录中。 提前致谢。
这是我的applet代码
package myform;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JComboBox;
public class Form extends javax.swing.JApplet {
/** Initializes the applet Form */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
try {
String connstr="jdbc:oracle:thin:@localhost:1521/XE";
String uname="epolicia";
String pass="admin";
Class.forName("oracle.jdbc.OracleDriver").newInstance();
Connection connect =DriverManager.getConnection(connstr,uname,pass);
// System.out.println("Oracle driver is loaded");
Statement state=connect.createStatement();
ResultSet rs = state.executeQuery("SELECT * FROM ZONE");
while (rs.next()) {
zoneList.addItem(rs.getString(2)+" ("+rs.getString(1)+")");
//System.out.println(rs.getString(1));
}
} catch(Exception ex) {
//list.addItem(ex);
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jTextField1 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
zoneList = new javax.swing.JComboBox();
addDistrict = new javax.swing.JButton();
cancelDistrict = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 12));
jLabel1.setText("District ID :");
jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 12));
jLabel2.setText("District Name :");
jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 12));
jLabel3.setText("Zone :");
addDistrict.setFont(new java.awt.Font("Times New Roman", 1, 12));
addDistrict.setText("Add");
addDistrict.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jLabel5.setText("index: " + zoneList.getSelectedItem());//addDistrictActionPerformed(evt);
}
});
cancelDistrict.setFont(new java.awt.Font("Times New Roman", 1, 12));
cancelDistrict.setText("Cancel");
cancelDistrict.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelDistrictActionPerformed(evt);
}
});
jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 24));
jLabel4.setText("Add New District");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(47, 47, 47)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(jLabel3))
.addGap(28, 28, 28)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
.addComponent(jTextField2)
.addComponent(zoneList, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(101, 101, 101)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(101, 101, 101)
.addComponent(addDistrict)
.addGap(28, 28, 28)
.addComponent(cancelDistrict))
.addGroup(layout.createSequentialGroup()
.addGap(163, 163, 163)
.addComponent(jLabel5)))
.addContainerGap(87, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(jLabel4)
.addGap(36, 36, 36)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(zoneList, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addGap(36, 36, 36)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addDistrict)
.addComponent(cancelDistrict))
.addGap(35, 35, 35)
.addComponent(jLabel5)
.addContainerGap(77, Short.MAX_VALUE))
);
jLabel5.getAccessibleContext().setAccessibleName("lbl");
}// </editor-fold>
private void addDistrictActionPerformed(java.awt.event.ActionEvent evt) {
}
private void cancelDistrictActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
}
// Variables declaration - do not modify
private javax.swing.JButton addDistrict;
private javax.swing.JButton cancelDistrict;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JComboBox zoneList;
// End of variables declaration
}
答案 0 :(得分:2)
在服务器端进行JDBC访问并为applet提供Web服务是更好的方法:this thread很好地涵盖了这个主题。
作为答案发布,因为评论变得非常拥挤,但这应该作为副本关闭。
答案 1 :(得分:0)
是不是您没有与JAR一起部署Oracle JDBC驱动程序?
要包含Oracle驱动程序依赖项,您需要将ojdbc6.jar
(或其他版本)放在服务器上的applet.jar
旁边(如果您在本地运行,则放在本地文件夹中)。
然后,您需要让您的浏览器Java类路径知道它。您可以通过以逗号后的archive
属性添加它来执行此操作:
<applet code="myform.Form" archive="applet.jar,ojdbc6.jar" width="600" height="480"/>
或将其添加到applet.jar
的清单文件中(如果有多个JAR按空格分隔):Class-Path: ojdbc6.jar
修改强>: Oracle在他们的文档中特别提到可以从Applet使用他们的JDBC驱动程序。但他们提到安全问题等。
ojdbc14.jar
给出的异常可能意味着您正在尝试访问其他数据库服务器 - 而不是一个小程序来自。如果您正在从本地文件系统运行applet,这非常合乎逻辑。
要避免此错误,您需要按照其文档section 24.2.2中的说明对您的小程序进行签名。