javamysql选择查询

javamysql选择查询,java,sql,Java,Sql,下面是连接器的代码,然后是另一个名为viewHistory的类的代码。现在,我想做的是让用户输入一个学生ID号,然后相关的出勤记录就会出现。不过,它正在编译,但当我键入一个数字以检查它是否显示任何内容时,它会给我一条错误消息。有什么建议吗 public class Connector { Connection con; PreparedStatement stmt; ResultSet rs; Connector() { try{ Class.forName("co

下面是连接器的代码,然后是另一个名为viewHistory的类的代码。现在,我想做的是让用户输入一个学生ID号,然后相关的出勤记录就会出现。不过,它正在编译,但当我键入一个数字以检查它是否显示任何内容时,它会给我一条错误消息。有什么建议吗

public class Connector {
Connection con;
PreparedStatement stmt;
ResultSet rs;

Connector()
{
    try{


        Class.forName("com.mysql.jdbc.Driver");

        con=DriverManager.getConnection("jdbc:mysql://localhost/luxmidatabase","root","");
                    stmt=con.prepareStatement("select * from login where username=? and password=?");
                    }

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

主要问题是提交按钮中的代码。这就是我试图过滤数据的地方

这是错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at AttendanceHistory$2.actionPerformed(AttendanceHistory.java:85)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

您在评论中说,发生错误的那一行是

while ( rs.next() ) {
发生NullPointerException是因为rs为null。我看不到您在代码中的任何地方初始化rs。或许上面的一行应该是:

ResultSet rs = con.stmt.executeQuery(...);
您在哪里声明变量rs

另一个问题:您正在将连接器对象中准备的语句对象与select*from login一起使用。。。SQL。您应该创建一个新语句来执行查询。大概是这样的:

Statement st = con.con.createStatement();
ResultSet rs = st.executeQuery("SELECT StudentID, date from ...");
while (rs.hasNext()) {
    // ...
}

请注意,还应通过对语句和ResultSet对象调用close来正确丢弃它们。最好是在finally块中,这样即使在出现异常的情况下也会发生。

现在总而言之:错误消息是什么?@JacobM我已经提供了上面的错误消息。NullPointerException发生是因为一些不应该为null的null。查看错误消息。它准确地告诉您它发生在哪里:在AttendanceHistory.java的第85行。请看代码的这一部分。@Jesper-您能告诉我哪里可能出错吗?因为这是我在第85行得到的:而rs是下一个{-我真的不明白怎么回事?ResultSet rs=st.executeQuerySELECT StudentID,date FROM Attention,其中StudentID=+textField.getText;将起作用我在connector类中只有ResultSet rs;。我将尝试你提到的方法。@PitaSivam如果你不给它另一个赋值,那么它在第85行中确实将为nullvalue.Hi@Jesper-谢谢。我已经尝试过了。再次编译,但现在出现了一条不同的错误消息,开头是:java.sql.SQLException:没有为参数指定值1@PitaSivam另一个问题是您正在使用在连接器类中准备的语句。您需要为查询创建新语句。我将更新我的回答上面的问题。还有一个问题。其中显示ResultSet rs=st.executeQuerySELECT StudentID,date FROM Attention,其中StudentID=21457;而不是21457,我希望这里有textField.getText-所以是输入到字段中的实际值。我如何在代码中提到这一点?有什么建议吗?
Statement st = con.con.createStatement();
ResultSet rs = st.executeQuery("SELECT StudentID, date from ...");
while (rs.hasNext()) {
    // ...
}