嵌入 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 属性来做到这一点:

&lt;applet code="myform.Form" archive="applet.jar,ojdbc6.jar" width="600" height="480"/&gt;

或将其添加到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.(OracleDriver.java:316)

以上是关于嵌入 jsp 时,数据库值未显示在小程序中的主要内容,如果未能解决你的问题,请参考以下文章

值未保存到mysql数据库中

日期时间值未显示在 jQuery 数据表中

在基于 SPRING-BOOT JSP 的 web 应用程序中嵌入 VAADIN UI 的 HTTP 405

GPIO 输出寄存器位值未更新

如何在小程序中嵌入网页或者网站(web-view)?

纬度和经度值未显示在 TextView 中