【问题标题】:Retrieve value from MySql database to Java从 MySql 数据库中检索值到 Java
【发布时间】:2012-01-04 07:22:07
【问题描述】:

我使用以下代码从 MySql 数据库中检索数据。 GContnStr 是我调用连接数据库的连接方法。但是,当我使用此代码时,出现以下异常。我该如何解决这个问题?

package designstudent;

import java.sql.*;
import java.awt.event.*;
import java.beans.EventHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import java.sql.*;
import java.util.ArrayList;
import java.util.jar.Attributes.Name;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import java.util.ArrayList.*;
import java.util.Vector;
import javax.swing.*;
public class combobutton extends javax.swing.JFrame {

     Statement TmpStmnt=null;
     ResultSet TmpDetlRs=null;
     GContnStr GCS=new GContnStr();
     String   GStrSql=null;


      private  String PFldname="StudClass";
      private  String PTName="studentmaster";



       enum options{
           DBTABLE,
           DBQryDef
                  }

     String PoptnStr;

     options val = options.valueOf(PoptnStr);

    public combobutton() throws SQLException {
        combo(PoptnStr, TmpStmnt, TmpDetlRs, GStrSql, PFldname, PTName);
        initComponents();
    }
public void combo(String PoptnStr,Statement TmpStmnt,ResultSet TmpDetlRs,String StrSql,String PFldName,String PTName) throws SQLException
    {
      cbx1.removeAllItems();
      cbx2.removeAllItems();
      cbx3.removeAllItems();
      String DBTABLE = null;
      try{
        switch(val)
              {
          case DBTABLE:
          case DBQryDef:
               if(PoptnStr==DBTABLE)
               {
                   GCS.GContnStr();
                   GStrSql="select '"+ PFldName+"' from '"+PTName+"'";
                   TmpDetlRs=TmpStmnt.executeQuery(GStrSql);
                    while(TmpDetlRs.next())
                    {
                        String TmpOb1=TmpDetlRs.getString("StudClass");
                        System.out.println(TmpOb1);
                    }

               }
      }
        }
      catch(Exception e){
          System.out.println(e);

      }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new combobutton().setVisible(true);

                } catch (SQLException ex) {
                    Logger.getLogger(combobutton.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox cbx1;
    private javax.swing.JComboBox cbx2;
    private javax.swing.JComboBox cbx3;
    // End of variables declaration                   

}

错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Name is null
        at java.lang.Enum.valueOf(Enum.java:236)
        at designstudent.combobutton$options.valueOf(combobutton.java:30)
        at designstudent.combobutton.<init>(combobutton.java:37)
        at designstudent.combobutton$1.run(combobutton.java:122)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:660)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
BUILD SUCCESSFUL (total time: 1 second)

【问题讨论】:

  • 字符串 PoptnStr 为空 (NULL)。初始化它。

标签: java mysql swing


【解决方案1】:

这个问题与数据库无关。你的问题就在这里:

 String PoptnStr; 
 options val = options.valueOf(PoptnStr); 

你创建了你的String,它被初始化为null,然后立即使用它,所以你写了options.valueOf(null);

此外,按照惯例,类名应以大写字母开头(即options 应为Options),实例变量名应为驼峰式(即PoptnStr 应为poptnStr)。

【讨论】:

  • 如果我给 options.valueOf(null);我有同样的异常
  • 当然——那是因为您试图获取对应于null 的枚举值。我告诉过你不要那样做。
  • 我如何在那个 prog 中初始化 DBTABLE 的值
  • 您的代码存在许多问题 - 您有一个与枚举值之一同名的 String。你为什么还要使用枚举?它们用于类似的项目,而不是存储无关数据的地方。
【解决方案2】:

字段的初始化

options val = options.valueOf(PoptnStr);

导致 NPE。在执行此代码时,没有为PoptnStr 分配任何值。将初始化移动到构造函数并确保 PoptnStr 已设置将解决此问题

【讨论】:

    【解决方案3】:

    你可以在初始化 PoptnStr 之后尝试如下

    String PoptnStr = options.DBQryDef.name();
    
    String PoptnStr = options.DBTABLE.name();
    

    并且不明白为什么要为 DBTABLE 和 DBQryDef 打开 val 并与 DBTABLE 空字符串进行比较:

     //assigning the val variable 
        options val = options.valueOf(PoptnStr);
    
     //..... your other code
    
        //And comparing it as below:
       String DBTABLE = null;
          try{
            switch(val)
                  {
              case DBTABLE:
              case DBQryDef:
                   if(PoptnStr==DBTABLE)
                   {
    

    你能详细说明一下吗?

    【讨论】:

      猜你喜欢
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多