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.抱歉,回复时间太长了