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。。。我会试试这个,然后告诉你它对我有用吗……)它起作用了