JAVA连接数据库用表格显示数据库中内容的问题
我写了一段JAVA程序,连接数据库,想把数据库中的数据以表格的形式显示,以下是我的代码,但是为什么表格中显示的全是数据中第一行中的数据啊?为什么while循环中的条件rs...
我写了一段JAVA程序,连接数据库,想把数据库中的数据以表格的形式显示,以下是我的代码,但是为什么表格中显示的全是数据中第一行中的数据啊?为什么while循环中的条件rs.next()在下次循环时不指向数据库中下一行数据啊?我的数据库中不只一条数据。数据库中有五条不同的数据,但是执行程序后,表格中有五条数据,全都是数据库中第一行的数据。
请高手指点!最好详细点,谢谢!
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import java.util.Vector;
public class myTable
{
public myTable()
{
JFrame f=new JFrame();
JTable t=new JTable();
DefaultTableModel dt=new DefaultTableModel();
t.setModel(dt);
//以下是连接数据库
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:db1","","");
Statement sta = con.createStatement();
ResultSet rs=sta.executeQuery("select * from goods");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();
int b=1;
//以下是显示数据库中的列名的代码
while(b<=numberOfColumns)
{
dt.addColumn(rsmd.getColumnName(b));
b++;
}
//以下是在表格中显示数据中的内容
Vector newRow=new Vector();
while(rs.next())
{
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
}
catch(Exception e)
{
e.printStackTrace();
}
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("表");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
};});
}
public static void main(String args[])
{
new myTable();
}
} 展开
请高手指点!最好详细点,谢谢!
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import java.util.Vector;
public class myTable
{
public myTable()
{
JFrame f=new JFrame();
JTable t=new JTable();
DefaultTableModel dt=new DefaultTableModel();
t.setModel(dt);
//以下是连接数据库
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:db1","","");
Statement sta = con.createStatement();
ResultSet rs=sta.executeQuery("select * from goods");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();
int b=1;
//以下是显示数据库中的列名的代码
while(b<=numberOfColumns)
{
dt.addColumn(rsmd.getColumnName(b));
b++;
}
//以下是在表格中显示数据中的内容
Vector newRow=new Vector();
while(rs.next())
{
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
}
catch(Exception e)
{
e.printStackTrace();
}
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("表");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
};});
}
public static void main(String args[])
{
new myTable();
}
} 展开
2个回答
展开全部
是不是得把Vector newRow=new Vector()放在循环里面。
while(rs.next())
{
Vector newRow=new Vector();
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
没细看,试一下
while(rs.next())
{
Vector newRow=new Vector();
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
没细看,试一下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的基本上说对了,不过还要改一下
Vector newRow;
while(rs.next())
{
newRow=new Vector();
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
另外,既然不需要线程安全,使用ArrayList比较好。
Vector newRow;
while(rs.next())
{
newRow=new Vector();
int c=1;
while(c<=numberOfColumns)
{
newRow.addElement(rs.getString(c));
c++;
}
dt.addRow(newRow);
}
另外,既然不需要线程安全,使用ArrayList比较好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询