Java 如何将MySQL表的一列的值检索到代码中?

Java 如何将MySQL表的一列的值检索到代码中?,java,mysql,jdbc,Java,Mysql,Jdbc,通过这一点,我试图过滤普通用户点击主页上出现的按钮的能力,同时允许管理员查看并点击它们。 但是在第一次之后,如果它不能正常工作 例外情况是这样说的 public String User; Model.JDBC j=new JDBC(); /** * Creates new form Home_Page */ public Home_Page(String eid) { initComponents(); User=eid; Toolkit t = Toolkit.

通过这一点,我试图过滤普通用户点击主页上出现的按钮的能力,同时允许管理员查看并点击它们。 但是在第一次之后,如果它不能正常工作

例外情况是这样说的

public String User;
Model.JDBC j=new JDBC();
/**
 * Creates new form Home_Page
 */
public Home_Page(String eid) 
{
    initComponents();

    User=eid;
    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension d = t.getScreenSize();
    int w = (int) d.getWidth();
    int h = (int) d.getHeight()-40;
    setBounds(0, 0, w, h);
    jLabel2.setText(new Controler.getDate().date());
    time();
    jLabel3.setText(eid);
    ResultSet rs;

    try 
    {

      rs = j.getData("select eid from user where eid='"+eid+"'");          
      System.out.println(rs.next()+ " rs.next");

      if(rs.next() != true)
      {

            System.out.println("rs.next");
           //until this point it works but gives an exception
           if(rs.getString(3).equals("Admin"))
           {

                System.out.println("if admin");

                home.setEnabled(true);
                job.setEnabled(true);
                employee.setEnabled(true);
                user.setEnabled(true);
                machine.setEnabled(true);
                branch.setEnabled(true);

            }
            else if(rs.getString(3).equals("user"))
            {
                System.out.println("else if");

                home.setEnabled(true);
                job.setEnabled(false);
                employee.setEnabled(false);
                user.setEnabled(false);
                machine.setEnabled(true);
                branch.setEnabled(false);
                System.out.println("user can't see");
            }
            else
            {
                 System.out.println("else");
            }
       }
       else
       {
           System.out.println("outer else executed");
                  }
    } 
    catch (Exception ex) 
    {
        Logger.getLogger(Home_Page.class.getName()).log(Level.SEVERE, null, ex);
    }

}
true rs.next
下一站
模型JDBC@15bc725
工作
2017年3月15日下午3:20:39查看器.Home_页
严重:空
java.sql.SQLException:结果集结束后
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
位于com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
位于com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5773)
位于com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5693)
在Viewer.Home_页面(Home_页面.java:65)
在Viewer.login.loginActionPerformed处(login.java:119)
at Viewer.login.access$000(login.java:18)
在Viewer.login$1.actionPerformed(login.java:70)
在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402)
在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259)
在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6533)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3324)
位于java.awt.Component.processEvent(Component.java:6298)
位于java.awt.Container.processEvent(Container.java:2236)
位于java.awt.Component.dispatchEventImpl(Component.java:4889)
位于java.awt.Container.dispatchEventImpl(Container.java:2294)
位于java.awt.Component.dispatchEvent(Component.java:4711)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4888)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4525)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
位于java.awt.Container.dispatchEventImpl(Container.java:2280)
位于java.awt.Window.dispatchEventImpl(Window.java:2746)
位于java.awt.Component.dispatchEvent(Component.java:4711)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:709)
在java.awt.EventQueue$3.run(EventQueue.java:703)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
在java.awt.EventQueue$4.run(EventQueue.java:731)
在java.awt.EventQueue$4.run(EventQueue.java:729)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

MySQL表名是user,第三列的列名是ulevel,目前在varchar类型下输入的两个值是“user”和“Admin”。你能帮我把这件事整理一下,让ifs让那些按钮不可点击。

你叫两次
rs.next()

如果结果集中只有一条记录,则会导致错误。第二个问题是访问第三列
rs.getString(3)
,并且只选择一条。

调用两次
rs.next()

如果结果集中只有一条记录,则会导致错误。第二个问题是,您访问第三列
rs.getString(3)
,并且只选择一条记录。

您的查询返回
eid
,因此只有一个值,但您选择了rs.getString(3):

相反,您必须使用:

rs = j.getData("select eid from user where eid='"+eid+"'");    
//----------------------^^---------------------------------      
if(rs.getString(3).equals("Admin"))
//--------------^-----------------
建议改为使用此选项,这可能会导致语法错误或

而不是:

if(rs.getString(1).equals("Admin"))
//--------------^-----------------
你必须使用

rs = j.getData("select eid from user where eid='"+eid+"'");
注意

正如@Jens在他的回答中所说,如果您使用两个
r,您将得到一个错误。next()
,但不使用
hasnext
来避免它。这在ResultSet中不存在,因此要避免此错误,您必须在检查后重新执行
result
,如下所示:

rs = j.executeQuery("select eid from user where eid = ?");
rs.setString(1, eid);

您的查询只返回一个值,但您需要rs.getString(3):

相反,您必须使用:

rs = j.getData("select eid from user where eid='"+eid+"'");    
//----------------------^^---------------------------------      
if(rs.getString(3).equals("Admin"))
//--------------^-----------------
建议改为使用此选项,这可能会导致语法错误或

而不是:

if(rs.getString(1).equals("Admin"))
//--------------^-----------------
你必须使用

rs = j.getData("select eid from user where eid='"+eid+"'");
注意

正如@Jens在他的回答中所说,如果您使用两个
r,您将得到一个错误。next()
,但不使用
hasnext
来避免它。这在ResultSet中不存在,因此要避免此错误,您必须在检查后重新执行
result
,如下所示:

rs = j.executeQuery("select eid from user where eid = ?");
rs.setString(1, eid);

只需通过rs.next()方法迭代ResultSet,然后通过任何ResultSet获取程序获取列值。 比如说,

System.out.println("----------->" + (result.next()));
result = preparedStatement.executeQuery();

只需通过rs.next()方法迭代ResultSet,然后通过任何ResultSet获取程序获取列值。 比如说,

System.out.println("----------->" + (result.next()));
result = preparedStatement.executeQuery();

非常感谢你,YCF_L。。。我会试试这个,然后告诉你它对我有用吗……)它起作用了