5
    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レコード追加後のホールド性が欲しいので使わざるを得ません。

4

1 に答える 1

7

一般に、java.lang.UnsupportedOperationException は、実装者がメソッドを実装したくないことを意味します。この場合、Odbc 関係者は createConnection の 3 つの引数のオーバーロードを実装しないことに決めました。おそらく、保持機能をサポートしていないからです。

Java 関係者は Odbc ドライバーを製品品質とは考えていないという話を (どこで?) 聞いたことがあることを覚えています。そのため、mysql データベースなどにアクセスする場合は、ベンダー固有のドライバーを使用することをお勧めします。


ああ、ちなみに、これが使い捨てのコードでない場合は、GUI と SQL を同じクラスに混在させないでください。

于 2012-12-22T06:56:59.247 に答える