Java 我如何将字符串传递给JOptionPane?

Java 我如何将字符串传递给JOptionPane?,java,swing,jtable,joptionpane,Java,Swing,Jtable,Joptionpane,我试图编写一个代码,搜索学生数据库,并在选项窗格中显示搜索结果。最后,我写了以下内容。预期结果是: 名字:“某物” 滚动:“某物” 注册:“某物” 但实际上输出是这样的: 名称:空 滚动:空 注册:空 { JFrame sw=newjframe(“搜索学生信息”);//搜索窗口 JTable稳定; JLabel stfl=newjlabel(“Roll”);//搜索文本字段标签 JTextField stf=newjtextfield(8);//搜索文本字段 JButton sb=新JButt

我试图编写一个代码,搜索学生数据库,并在选项窗格中显示搜索结果。最后,我写了以下内容。预期结果是:

名字:“某物” 滚动:“某物” 注册:“某物”

但实际上输出是这样的:

名称:空 滚动:空 注册:空


{

JFrame sw=newjframe(“搜索学生信息”);//搜索窗口
JTable稳定;
JLabel stfl=newjlabel(“Roll”);//搜索文本字段标签
JTextField stf=newjtextfield(8);//搜索文本字段
JButton sb=新JButton(“搜索”);//搜索按钮
public void exsearch()//执行搜索
{
西南布局(新网格布局(2,2));
软件添加(stfl);
软件添加(stf);
西南加(sb);;
软件设置尺寸(200100);
西南设置位置(100100);
sw.setVisible(真);
sb.addActionListener(新ActionListener()
{
已执行的公共无效操作(操作事件e)
{
String driver=“com.mysql.jdbc.driver”;
String url=“jdbc:mysql://localhost/srsdb";
尝试
{
Class.forName(driver.newInstance();
java.sql.Connection con=DriverManager.getConnection(url,“根”,“根”);
showMessageDialog(null,“已连接”,“连接确认”,JOptionPane.PLAIN\u消息);
String str=“SELECT*FROM students WHERE Roll=“+stf.getText();
java.sql.Statement st=con.createStatement();
java.sql.ResultSet rs=st.executeQuery(str);
rs.first();
int n=rs.getMetaData().getColumnCount();
//字符串[]列名称;
字符串[]属性=新字符串[10];
int j;
while(rs.next())
{

对于(j=0;j,我将使用调试器检查代码的哪一部分被省略。 我所看到的一件非常奇怪的事情是,您跳转到结果集中的第一条记录:

rs.first();
然后在while循环中从所有后续记录中读取数据

 while(rs.next())
 {
    for(j=0; j<3; j++)
    {
        attributes[j] = rs.getString(j);
    }
 }
while(rs.next())
{
对于(j=0;j
  • Class.forName确保驱动程序类位于类路径上,而无需针对类进行编译。它加载类。无需实例化
  • 一份事先准备好的声明最好是反对
  • SQLAPI中的列号是基于1的:1、2、3……有点例外
  • 使用
    first
    时,查询循环如下。我认为您跳过了第一行
  • 不要忘记杂项
    close()
  • 更好的样式是列出列,而不是“*”
  • 因此:

            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/srsdb";
            try
            {
                Class.forName(driver);
    
                Connection con = DriverManager.getConnection(url, "root", "");
                JOptionPane.showMessageDialog(null, "Connected",
                    "Connection Confirmation", JOptionPane.PLAIN_MESSAGE);
    
                String str ="SELECT Name, Registration FROM students WHERE Roll=?";
                PreparedStatement st = con.createPreparedStatement(str);
    
                String roll = stf.getText();
                st.setString(1, roll);
    
                String message = "";
                java.sql.ResultSet rs = st.executeQuery();            
                int recno = 0;    
                if (rs.first()) {
                    do {
                        String name = rs.getString(1);
                        String registration = rs.getString(2);
                        ++recno;
                        message += "- " + recno + " -\nName: " + name
                            + "\nRoll: " + roll
                            + "\nRegistration: " + registration + "\n";
                    } while (rs.next());
                }
                rs.close();
    
                JOptionPane.showMessageDialog(null, message, "Search Result",
                    JOptionPane.PLAIN_MESSAGE);
    

    这可能意味着查询没有返回任何内容。请使用调试器逐行执行代码,并检查查询和结果。或者将日志跟踪添加到代码中。
     while(rs.next())
     {
        for(j=0; j<3; j++)
        {
            attributes[j] = rs.getString(j);
        }
     }
    
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/srsdb";
            try
            {
                Class.forName(driver);
    
                Connection con = DriverManager.getConnection(url, "root", "");
                JOptionPane.showMessageDialog(null, "Connected",
                    "Connection Confirmation", JOptionPane.PLAIN_MESSAGE);
    
                String str ="SELECT Name, Registration FROM students WHERE Roll=?";
                PreparedStatement st = con.createPreparedStatement(str);
    
                String roll = stf.getText();
                st.setString(1, roll);
    
                String message = "";
                java.sql.ResultSet rs = st.executeQuery();            
                int recno = 0;    
                if (rs.first()) {
                    do {
                        String name = rs.getString(1);
                        String registration = rs.getString(2);
                        ++recno;
                        message += "- " + recno + " -\nName: " + name
                            + "\nRoll: " + roll
                            + "\nRegistration: " + registration + "\n";
                    } while (rs.next());
                }
                rs.close();
    
                JOptionPane.showMessageDialog(null, message, "Search Result",
                    JOptionPane.PLAIN_MESSAGE);