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);