Java 我想在JButton中将数据库值动态显示为test

Java 我想在JButton中将数据库值动态显示为test,java,swing,jbutton,Java,Swing,Jbutton,我正在尝试创建一个菜单(部门/类别)。现在我有了一个网格布局中的按钮列表。当页面加载时,我希望所有这些按钮都具有基于数据库上的值的文本名称 我试图这样做,但它只显示我的数据库中所有按钮的第一项。我所有的按钮都有一个变量名,以菜单开始 import Admin.MySqlConnect; import java.awt.Toolkit; import java.awt.event.WindowEvent; import java.sql.*; import java.sql.Connection;

我正在尝试创建一个菜单(部门/类别)。现在我有了一个网格布局中的按钮列表。当页面加载时,我希望所有这些按钮都具有基于数据库上的值的文本名称

我试图这样做,但它只显示我的数据库中所有按钮的第一项。我所有的按钮都有一个变量名,以菜单开始

import Admin.MySqlConnect;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.sql.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;


public class POS extends javax.swing.JFrame {


    Connection Conn = null;
    PreparedStatement pst= null;
    ResultSet rs= null; 


    /**
     * Creates new form POS
     */
    public POS() {
        initComponents();
        Conn = MySqlConnect.ConnectDB();
        dept_menu();
    }

    public void close(){
        WindowEvent winClosingEvent= new WindowEvent(this,WindowEvent.WINDOW_CLOSING);
        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClosingEvent);

    }
 private void dept_menu(){

    try{


        String Sql="SELECT `dept_name` FROM `department` WHERE 1 " ;
        pst=Conn.prepareStatement(Sql);
        rs=pst.executeQuery();
        if(rs.next()){
        String Add1 = rs.getString("dept_name");
        menu_dept1.setText(Add1);
        String Add2 = rs.getString("dept_name");
        menu_dept2.setText(Add2);
        String Add3 = rs.getString("dept_name");
        menu_dept3.setText(Add3);
        String Add4 = rs.getString("dept_name");
        menu_dept4.setText(Add4);
        String Add5 = rs.getString("dept_name");
        menu_dept5.setText(Add5);
        String Add6 = rs.getString("dept_name");
        menu_dept6.setText(Add6);
        String Add7 = rs.getString("dept_name");
        menu_dept7.setText(Add7);
         String Add8 = rs.getString("dept_name");
        menu_dept8.setText(Add8);
        String Add9 = rs.getString("dept_name");
        menu_dept9.setText(Add9);
        String Add10 = rs.getString("dept_name");
        menu_dept10.setText(Add10);
         String Add11 = rs.getString("dept_name");
        menu_dept11.setText(Add11);
        String Add12 = rs.getString("dept_name");
        menu_dept12.setText(Add12);
        String Add13 = rs.getString("dept_name");
        menu_dept13.setText(Add13);
         String Add14 = rs.getString("dept_name");
        menu_dept14.setText(Add14);
        String Add15 = rs.getString("dept_name");
        menu_dept15.setText(Add15);
        String Add16 = rs.getString("dept_name");
        menu_dept16.setText(Add16);
         String Add17 = rs.getString("dept_name");
        menu_dept17.setText(Add17);
         String Add18 = rs.getString("dept_name");
        menu_dept18.setText(Add18);
         String Add19 = rs.getString("dept_name");
        menu_dept19.setText(Add19);
         String Add20 = rs.getString("dept_name");
        menu_dept20.setText(Add20);
         String Add21 = rs.getString("dept_name");
        menu_dept21.setText(Add21);
         String Add22 = rs.getString("dept_name");
        menu_dept22.setText(Add22);
         String Add23 = rs.getString("dept_name");
        menu_dept23.setText(Add23);
         String Add24 = rs.getString("dept_name");
        menu_dept24.setText(Add24);
         String Add25 = rs.getString("dept_name");
        menu_dept25.setText(Add25);
         String Add26 = rs.getString("dept_name");
        menu_dept26.setText(Add26);
         String Add27 = rs.getString("dept_name");
        menu_dept27.setText(Add27);
         String Add28 = rs.getString("dept_name");
        menu_dept28.setText(Add28);
         String Add29 = rs.getString("dept_name");
        menu_dept29.setText(Add29);
         String Add30 = rs.getString("dept_name");
        menu_dept30.setText(Add30);
        String Add31 = rs.getString("dept_name");
        menu_dept31.setText(Add31);
        String Add32 = rs.getString("dept_name");
        menu_dept32.setText(Add32);



        }
        else{
            JOptionPane.showMessageDialog(null, "No Department found");
        }

        // rs=pst.executeQuery();

    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);

    }
    finally{
        try{
      rs.close();
      pst.close();
    }
        catch(Exception e){
        JOptionPane.showMessageDialog(null,e);
    }
    }
 }

问题在于,您只能从rs(rs.getString(“dept_name”))中获取第一个值,因此它只能从当前行(java文档)中指定列的字段中获取当前字符串值

您需要一种迭代结果集的方法,以便移动到下一行,这样您就不会对不同的add字符串设置相同的值

您应该在(rs.next)时执行if(rs.next()),而不是if(rs.next()),因此类似的操作应该可以:

      //Move your menu depts to some sort of iterable list/map e.g.
  Map<Integer, Object> menuDeptIdMap = new HashMap<>();
  menuDeptIdMap.put(1, menu_dept1);
  menuDeptIdMap.put(2, menu_dept2);
  menuDeptIdMap.put(3, menu_dept3);

  String Sql = "SELECT `dept_name` FROM `department` WHERE 1 ";
  pst = Conn.prepareStatement(Sql);
  rs = pst.executeQuery();

  int index = 0;

  while (rs.next())
  {
    index++;
    String deptName = rs.getString("dept_name");
    menu_dept = menuDeptIdMap.get(index);
    menu_dept.setText(deptName);
  }
//将菜单部分移动到某种可编辑列表/映射,例如。
Map menuDeptIdMap=newhashmap();
menuDeptIdMap.put(1,菜单部门1);
menuDeptIdMap.put(2,菜单部门2);
menuDeptIdMap.put(3,菜单区3);
String Sql=“从'department`WHERE 1'中选择'depart\u name'”;
pst=Conn.prepareStatement(Sql);
rs=pst.executeQuery();
int指数=0;
while(rs.next())
{
索引++;
String deptName=rs.getString(“部门名称”);
menu_dept=menuDeptIdMap.get(索引);
菜单\部门设置文本(部门名称);
}

如果有帮助,请告诉我:)

打印的名称相同,因为您使用的是结果集中的相同名称。您永远不会迭代到下一个集合。如果你想让它们有不同的值,你必须调用rs.next()来获得下一个结果值。如果你看我的If语句(If(rs.next()){….},你能告诉我使用rs.next()的正确方法吗,也许这就是问题所在。我没有试图在评论中解释,而是在帖子中留下了问题。希望这能起作用。P.S.抱歉,回复时间太长了