嵌入 jsp 时,数据库值未显示在小程序中
Posted
技术标签:
【中文标题】嵌入 jsp 时,数据库值未显示在小程序中【英文标题】:database values are not showing in applet when embedding on jsp 【发布时间】:2012-02-14 17:49:51 【问题描述】:我的小程序运行良好,并显示了我需要的数据库中的所有数据。但是,问题是当我在 jsp 上嵌入创建的 jar 文件时。它没有显示数据库中的数据。
<applet code="myform.Form" archive="applet.jar" />
applet 在 jsp 页面上运行,但组合框中的项目(来自数据库)无法选择。 jar 文件位于 jsp 页面所在的同一目录中。 提前致谢。
这是我的小程序代码
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
【问题讨论】:
您必须提供更多信息。 另一方面,您可能不希望您的小程序连接到您的数据库(因为任何拥有小程序的人都可以访问其中的密码)。我不知道你的架构是什么,但总比抱歉更安全:) 喜欢什么...告诉我..我会提供所有信息。 我应该如何从我的小程序中的数据库中获取数据,我的意思是,我在哪里犯了错误。请.. @sql_query:一些代码......我们只能猜测出了什么问题。顺便说一句:你怎么知道你的小程序工作正常(第一句话)? 【参考方案1】:在服务器端进行 JDBC 访问并为小程序提供 Web 服务是更好的方法:this thread 很好地涵盖了该主题。
因为 cmets 变得非常拥挤而作为答案发布,但这可能应该作为副本关闭。
【讨论】:
【参考方案2】:可能是您没有随 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 在他们的文档中特别提到可以从 Applets 使用他们的 JDBC 驱动程序。但是他们提到了安全问题等。
ojdbc14.jar
给出的异常可能意味着您正在尝试访问不同的数据库服务器 - 而不是来自一个小程序。如果您从本地文件系统运行小程序,那是非常合乎逻辑的。
为避免此错误,您需要按照他们文档的section 24.2.2 中的说明对您的小程序进行签名。
【讨论】:
你看过浏览器java控制台吗? 在 java 控制台中.. 我收到此消息严重:注册 Oracle JDBC 诊断 MBean 时出错。 java.security.AccessControlException:访问被拒绝(javax.management.MBeanServerPermission createMBeanServer) 您可以尝试将ojdbc6.jar
替换为来自here 的classes14.jar
吗?
我没有找到 classes14.jar。我只找到了 classes12.jar 和 ojdbc14.jar
java.security.AccessControlException: 访问被拒绝 (java.lang.RuntimePermission getClassLoader) 在 java.security.AccessControlContext.checkPermission(Unknown Source) 在 java.security.AccessController.checkPermission(Unknown Source) 在 java .lang.SecurityManager.checkPermission(Unknown Source) at java.lang.ClassLoader.getSystemClassLoader(Unknown Source) at oracle.jdbc.driver.OracleDriver.以上是关于嵌入 jsp 时,数据库值未显示在小程序中的主要内容,如果未能解决你的问题,请参考以下文章