这个问题在这里已有答案:
- ResultSet.getString(1) throws java.sql.SQLException: Invalid operation at current cursor position 4个答案
当我尝试将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 回答
首先,你没有"equal"变量的东西 . 你 assign 它 . (等于不是动词!!)
接下来,您误读了异常 . 它说:
你不是“得到一个SQLException” . 并且SQLException不会“出现” .
你实际拥有的是一个编译错误......你指示你的IDE忽略它 . 不要那样做!在尝试运行应用程序之前修复编译错误 .
并且编译错误正在发生,因为您正在调用代码中的一个或多个方法,这些方法被声明为抛出已检查的异常
SQLException
,但是您的代码既不会捕获异常,也不会将其声明为由此代码发生的方法抛出 .在这种特殊情况下,该方法是
actionPerformed
...这需要符合您的匿名类正在实现的ActionListener
接口中指定的签名 . 因此,您必须捕获异常 .现在我可以给你一些代码来复制并粘贴到你的程序中来修复它 . 但我认为如果你阅读Oracle Java Tutorial section on exceptions and exception handling会更好,这样你就可以真正理解这里发生了什么,并了解你需要做些什么来解决它 .