首页 文章

如何避免SQLException? [重复]

提问于
浏览
-2

这个问题在这里已有答案:

当我尝试将ResultSet与String变量相等时,这段代码给了我SQLException . 我不能将ResultSet部分放入字符串变量中吗?或代码中的任何错误?而且它也不会从数据库中选择任何结果 . Pl帮忙!

b1.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e)
    {

        String unm = tf1.getText().toString();
        String pwd = tf2.getPassword().toString();

        try{

            Connection con = null;
            Statement stmt = null;
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String cn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=E:/userlogin.accdb";
            con = DriverManager.getConnection(cn,"","");
            stmt = con.createStatement();
            String sql = "select position from userlogin.users where users.username ='"+unm+"' and users.pwd ='"+pwd+"' ";
            ResultSet rs;
            rs = stmt.executeQuery(sql); 

            String position;

            rs.next();                
            position = rs.getString(1);

            if (position.equals("Salesman"))
             {
               frame.setVisible(false);
               Salesman.main(null);
             }

             if (rs == null)
                    {
                        JOptionPane.showOptionDialog(null,
                            "Incorrect Username or Password !",
                            "Error !",
                            JOptionPane.OK_CANCEL_OPTION,
                            JOptionPane.INFORMATION_MESSAGE,
                            null,
                            new String[]{"Ok", "Cancel"}, // this is the array
                            "default");
                    }

                stmt.close();
            }

        catch (HeadlessException err) {
           JOptionPane.showOptionDialog(null,
                            "HeadlessException !",
                            "Error !",
                            JOptionPane.OK_CANCEL_OPTION,
                            JOptionPane.INFORMATION_MESSAGE,
                            null,
                            new String[]{"Ok", "Cancel"}, // this is the array
                            "default");
        }   

        catch (ClassNotFoundException err) {
        JOptionPane.showOptionDialog(null,
                "ClassNotFoundException !",
                "Error !",
                JOptionPane.OK_CANCEL_OPTION,
                JOptionPane.INFORMATION_MESSAGE,
                null,
                new String[]{"Ok", "Cancel"}, // this is the array
                "default");

        } 
         catch (SQLException err) {
            JOptionPane.showOptionDialog(null,
                    "SQLException !",
                    "Error !",
                    JOptionPane.OK_CANCEL_OPTION,
                    JOptionPane.INFORMATION_MESSAGE,
                    null,
                    new String[]{"Ok", "Cancel"}, // this is the array
                    "default");

        } 
        }



});

它说的是:

线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:无法编译的源代码 - 未报告的异常java.sql.SQLException;必须捕获或宣布在javaproject.JavaProject $ 1.actionPerformed(JavaProject.java:65)在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)在javax.swing.AbstractButton中$ Handler.actionPerformed(AbstractButton中被抛出 . java:2341)位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java)的javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)的javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) :252)java.awt.Component.processMouseEvent(Component.java:6505)at java的java.awt.Component.processEvent(Component.java:6270)javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Container.processEvent(Container.java:2229)位于java.awt.Component的java.awt.Component.DatatchEventImpl(Component.java:4861),java.awt.Component的java.awt.Container.dispatchEventImpl(Container.java:2287) . java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)中的dispatchEvent(Component.java:4687)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)在java.awt.Container.dispatchEventImpl(Container.java:2273)在java.awt中 . 位于java.awt.EventQueue.access $ 000的java.awt.Component.dispatchEvent(Component.java:4687)的java.awt.Event上的Window.dispatchEventImpl(Window.java:2719)(EventQueue.java:713) EventQueue.java:104)java.awt.EventQueue $ 3.run(EventQueue.java:672)at java.awt.EventQueue $ 3.run(EventQueue.java:670)at java.security.AccessController.doPrivileged(Native Method)在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87)在java.awt.EventQueue中$ 4.run(EventQueue.java:686)是java .awt.EventQueue $ 4.run(EventQueue.java:684)java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionD) omain.java:76)在java.awt.EventQueue.dispatchEvent(EventQueue.java:683)在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163 )处的java.awt java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) .EventDispatchThread.run(EventDispatchThread.java:97)线程“AWT-EventQueue-0”中的异常java.lang.RuntimeException:无法编译的源代码 - 未报告的异常java.sql.SQLException;必须捕获或宣布在javaproject.JavaProject $ 1.actionPerformed(JavaProject.java:65)在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)在javax.swing.AbstractButton中$ Handler.actionPerformed(AbstractButton中被抛出 . java:2341)位于javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java)的javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)的javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) :252)java.awt.Component.processMouseEvent(Component.java:6505)at java的java.awt.Component.processEvent(Component.java:6270)javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Container.processEvent(Container.java:2229)位于java.awt.Component的java.awt.Component.DatatchEventImpl(Component.java:4861),java.awt.Component的java.awt.Container.dispatchEventImpl(Container.java:2287) . java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)中的dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)at java.awt.Container.dispatchEventImpl(Container.java:2273)at java.awt . 位于java.awt.EventQueue.access $ 000的java.awt.Component.dispatchEvent(Component.java:4687)的java.awt.Event上的Window.dispatchEventImpl(Window.java:2719)(EventQueue.java:713) EventQueue.java:104)java.awt.EventQueue $ 3.run(EventQueue.java:672)at java.awt.EventQueue $ 3.run(EventQueue.java:670)at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87)at atjava.awt.EventQueue中的$ 4.run(EventQueue.java:686)在java.awt.EventQueue中$ 4.run(EventQueue.java:684)在java.security.AccessController.doPrivileged(本机方法)在java.security.ProtectionDomain $ 1位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)的java.awt.EventQueue.dispatchEvent(EventQueue.java:683)中的.doIntersectionPrivilege(ProtectionDomain.java:76)位于java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread . 的java:163)在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)在java.awt.EventDispatchThread.run(EventDispatchThread.java:97)BUILD SUCCESSFUL(总时间:5秒)

1 回答

  • 3

    首先,你没有"equal"变量的东西 . 你 assign 它 . (等于不是动词!!)

    接下来,您误读了异常 . 它说:

    Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: 
        Uncompilable source code - unreported exception java.sql.SQLException; 
        must be caught or declared to be thrown at ...
    

    你不是“得到一个SQLException” . 并且SQLException不会“出现” .

    你实际拥有的是一个编译错误......你指示你的IDE忽略它 . 不要那样做!在尝试运行应用程序之前修复编译错误 .

    并且编译错误正在发生,因为您正在调用代码中的一个或多个方法,这些方法被声明为抛出已检查的异常 SQLException ,但是您的代码既不会捕获异常,也不会将其声明为由此代码发生的方法抛出 .

    在这种特殊情况下,该方法是 actionPerformed ...这需要符合您的匿名类正在实现的 ActionListener 接口中指定的签名 . 因此,您必须捕获异常 .


    现在我可以给你一些代码来复制并粘贴到你的程序中来修复它 . 但我认为如果你阅读Oracle Java Tutorial section on exceptions and exception handling会更好,这样你就可以真正理解这里发生了什么,并了解你需要做些什么来解决它 .

相关问题