程序在 Java 中抛出 java.lang.UnsupportedOperationException

Posted

技术标签:

【中文标题】程序在 Java 中抛出 java.lang.UnsupportedOperationException【英文标题】:The program throws java.lang.UnsupportedOperationException in Java 【发布时间】:2012-12-09 15:35:20 【问题描述】:
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.io.*;

    public class Student3 extends JFrame implements ActionListener
    
    Connection cn;
    Statement st1,st2;
    ResultSet rs;

    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();

    JLabel lblNo = new JLabel("Roll No ");
    JLabel lblName = new JLabel("First Name ");
    JLabel lblCont = new JLabel("Contect no ");
    JLabel lblCity = new JLabel("City ");

    JTextField txtNo = new JTextField(12);
    JTextField txtName = new JTextField(12);
    JTextField txtCont = new JTextField(12);
    JTextField txtCity = new JTextField(12);

    JButton btnFirst = new JButton("First");
    JButton btnNext = new JButton("Next");
    JButton btnPrevious = new JButton("Previous");
    JButton btnLast = new JButton("Last");
    JButton btnAdd = new JButton("Add");
    JButton btnUpdate = new JButton("Update");
    JButton btnDelete = new JButton("Delete");
    JButton btnExit = new JButton("Exit");

        Student3()
        
            try
            
                panel1.setLayout(new GridBagLayout());

                GridBagConstraints c = new GridBagConstraints();

                //c.fill=GridBagConstraints.BOTH;
                c.gridwidth=2;
                c.gridx=0;
                c.gridy=0;
                panel1.add(lblNo,c);

                c.gridx=2;
                c.gridy=0;
                panel1.add(txtNo,c);

                c.gridx=0;
                c.gridy=1;
                panel1.add(lblName,c);

                c.gridx=2;
                c.gridy=1;
                panel1.add(txtName,c);

                c.gridx=0;
                c.gridy=2;
                panel1.add(lblCont,c);

                c.gridx=2;
                c.gridy=2;
                panel1.add(txtCont,c);

                c.gridx=0;
                c.gridy=3;
                panel1.add(lblCity,c);

                c.gridx=2;
                c.gridy=3;
                panel1.add(txtCity,c);

                c.fill=GridBagConstraints.BOTH;
                //c.gridwidth=1;
                c.gridx=0;
                c.gridy=5;
                panel1.add(btnFirst,c);

                c.gridwidth=1;
                c.gridx=2;
                c.gridy=5;
                panel1.add(btnNext,c);

                c.gridx=3;
                c.gridy=5;
                panel1.add(btnPrevious,c);

                c.gridx=4;
                c.gridy=5;
                panel1.add(btnLast,c);

                c.gridwidth=2;
                c.gridx=0;
                c.gridy=6;
                panel1.add(btnAdd,c);

                c.gridwidth=1;
                c.gridx=2;
                c.gridy=6;
                panel1.add(btnUpdate,c);

                c.gridx=3;
                c.gridy=6;
                panel1.add(btnDelete,c);

                c.gridx=4;
                c.gridy=6;
                panel1.add(btnExit,c);

                getContentPane().add(panel1);

                btnFirst. addActionListener(this);
                btnLast. addActionListener(this);
                btnNext. addActionListener(this);
                btnPrevious. addActionListener(this);
                btnAdd. addActionListener(this);
                btnUpdate. addActionListener(this);
                btnDelete. addActionListener(this);
                btnExit. addActionListener(this);

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//Load the JDBC-ODBC bridge driver
                cn = DriverManager.getConnection("jdbc:odbc:STUDENT_DSN");//Connection to database is done

                //st1=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
                st1=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);
                //cn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
                //st1.setFetchSize(25);

                st2=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);


                String query = "select * from Student";         
                rs=st1.executeQuery(query);
                rs.first();
                getRecord();
            
            catch(Exception e)
            
                System.out.println(e);
            
        

        public static void main (String[] args)
        
            Student3 my =new Student3();

            my.setTitle("Java Database Operation..");
            my.setVisible(true);
            my.setResizable(false);
            my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            my.setBounds(200,250,300,175);
        

        void getRecord()
        
            try
            
                txtNo.setText(rs.getObject(1).toString());
                txtName.setText(rs.getObject(2).toString());
                txtCont.setText(rs.getObject(3).toString());
                txtCity.setText(rs.getObject(4).toString());
            
            catch(Exception ex)
            
                System.out.println(ex);
            
        

        public void actionPerformed(ActionEvent e)
           
            try
            

                Object obj = e.getSource();
                if(obj == btnFirst)
                
                    rs.first();
                    getRecord();
                
                if(obj == btnLast)
                
                    rs.last();
                    getRecord();                
                
                if(obj == btnNext)
                
                    rs.next();
                    if(!rs.isAfterLast())
                                   
                        getRecord();
                    
                    else
                    
                        rs.previous();
                    
                
                if(obj == btnPrevious)
                
                    rs.previous();
                    if(!rs.isBeforeFirst())
                                   
                        getRecord();
                    
                    else
                    
                        rs.next();
                    
                
                if(obj == btnAdd)
                
                    String name=txtName.getText();

                    String cont=txtCont.getText();

                    String city=txtCity.getText();


                    String query="insert into Student(sName,sCont,sCity) values ('"+name+"','"+cont+"','"+city+"')" ;
                    st2.executeUpdate(query);

                    query = "select * from Student";            
                    rs=st1.executeQuery(query);

                    rs.last();
                
                if(obj == btnUpdate)
                
                    int no =Integer.parseInt(txtNo.getText());
                    //System.out.println(no);

                    String new_name=txtName.getText();

                    String new_cont=txtCont.getText();

                    String new_city=txtCity.getText();

                    String query="update Student set sName = '"+new_name+"', sCont = '"+new_cont+"' , sCity = '"+new_city+"' where sNo = "+no+" " ;
                    st2.executeUpdate(query);
                
                if(obj == btnDelete)
                
                    int no =Integer.parseInt(txtNo.getText());
                    String query="delete from Student where sNo = "+no+"    " ;
                    st2.executeUpdate(query);
                
                if(obj == btnExit)
                
                    System.exit(0);
                
            
            catch(Exception ex)
            
                System.out.println(ex);
            
        
    

如果我写的是st1=cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);,我会收到异常java.lang.UnsupportedOperationException

我必须使用ResultSet.HOLD_CURSORS_OVER_COMMIT,因为我想在添加新记录后保持能力。

【问题讨论】:

当你将它切换为使用双参数重载和 setHoldability 时会发生什么? 【参考方案1】:

一般来说,java.lang.UnsupportedOperationException 意味着实现者不想实现该方法。在这种情况下,Odbc 人员决定不实现 createConnection 的三参数重载,可能是因为它们不支持可保持性。

我记得曾经听说过(在哪里?)Java 人员不认为 Odbc 驱动程序具有生产质量。因此,如果您要访问 mysql 数据库或其他东西,最好使用供应商特定的驱动程序。


哦,顺便说一下,如果这不是一次性代码,切勿将您的 GUI 和 SQL 混合在同一个类中。

【讨论】:

以上是关于程序在 Java 中抛出 java.lang.UnsupportedOperationException的主要内容,如果未能解决你的问题,请参考以下文章

sql 在简单查询中抛出错误

在java web开发中抛出如下异常,求大神知道!

在 Java 的方法中抛出特定的异常是多余的吗?

你能在 Java 中抛出啥?

为啥我可以在 Java 中抛出 null? [复制]

java中抛出throw关键字是怎么用的? 举例?