以下是我的程序,,请指教哈~~
读出来的时候只是重复写了数据库中的最后一条记录import java.io.*;
import java.util.*;
import javax.swing.table.*;
import java.sql.*;class Selector extends AbstractTableModel
{
ConnectDB connect = new ConnectDB();
String sql="select * from T_hsw_sale";
private ResultSet rs = connect.executeQuerySale(sql);
String id;
String name;
String area;
String address;
String price;
String guessName;
String doDate;
Selector()
{
try{
while(rs.next())
{
id=rs.getString(1);
name=rs.getString(2);
area=rs.getString(3);
address=rs.getString(4);
price=rs.getString(5);
guessName=rs.getString(6);
doDate=rs.getString(7);
}
}
catch(SQLException e){
System.out.println(e);
}
connect.close();
} public int getRowCount(){
return Integer.parseInt(this.id);
}
public int getColumnCount(){
return 7;
}
public Object getValueAt(int row, int column){
//这里应该填什么呢?
switch(column)
{
case 0: return id;
case 1: return name;
case 2: return area;
case 3: return address;
case 4: return price;
case 5: return guessName;
case 6: return doDate;
default :return "";
}
}
public String getColumnName(int column){
switch (column)
{
case 0: return "序号";
case 1: return "户型";
case 2: return "面积";
case 3: return "位置";
case 4: return "买卖价";
case 5: return "客户名";
case 6: return "受理日期";
default:return "";
}
}
}
读出来的时候只是重复写了数据库中的最后一条记录import java.io.*;
import java.util.*;
import javax.swing.table.*;
import java.sql.*;class Selector extends AbstractTableModel
{
ConnectDB connect = new ConnectDB();
String sql="select * from T_hsw_sale";
private ResultSet rs = connect.executeQuerySale(sql);
String id;
String name;
String area;
String address;
String price;
String guessName;
String doDate;
Selector()
{
try{
while(rs.next())
{
id=rs.getString(1);
name=rs.getString(2);
area=rs.getString(3);
address=rs.getString(4);
price=rs.getString(5);
guessName=rs.getString(6);
doDate=rs.getString(7);
}
}
catch(SQLException e){
System.out.println(e);
}
connect.close();
} public int getRowCount(){
return Integer.parseInt(this.id);
}
public int getColumnCount(){
return 7;
}
public Object getValueAt(int row, int column){
//这里应该填什么呢?
switch(column)
{
case 0: return id;
case 1: return name;
case 2: return area;
case 3: return address;
case 4: return price;
case 5: return guessName;
case 6: return doDate;
default :return "";
}
}
public String getColumnName(int column){
switch (column)
{
case 0: return "序号";
case 1: return "户型";
case 2: return "面积";
case 3: return "位置";
case 4: return "买卖价";
case 5: return "客户名";
case 6: return "受理日期";
default:return "";
}
}
}
改成这样:
switch(column)
{
case 0: return id;break;
case 1: return name;break;
case 2: return area;break;
case 3: return address;break;
case 4: return price;break;
case 5: return guessName;break;
case 6: return doDate;break;
default :return "";
}
下面的那个也要改:
switch (column)
{
case 0: return "序号";
case 1: return "户型";break;
case 2: return "面积";break;
case 3: return "位置";break;
case 4: return "买卖价";break;
case 5: return "客户名";break;
case 6: return "受理日期";break;
default:return "";
}
你没有写break的话,后面把前面覆盖掉,只会显示最后一条.
我想应该是出现在我做了注释那个地方吧。。就是getValueAt()那里,再仔细看看啊,,谢谢!
楼主想把取出来的数据怎么处理?显示在gui的什么组建里?
trytry.setClassName("org.gjt.mm.mysql.Driver");
trytry.setUrl("jdbc:mysql://0.0.0.0:3306/try?useUnicode=true&characterEncoding=gbk");
trytry.setUid("root");
trytry.setPwd("ga");
trytry.JDBCconnect();
trytry.setExecuteQuery("select * from test2");
trytry.JDBCexecQuery(); String[] columnNames=trytry.conn.getColumnNames();
Object[][] cells = trytry.conn.getValuesOfTable();
final DefaultTableModel tableModel_mx= new DefaultTableModel(cells,columnNames);
final JTable table = new JTable(tableModel_mx);
---------------------------------------------------//trytry.conn.getValueOfTable(): public Object[][] getValuesOfTable(){
Object[][] temp=new Object[this.getRowCount()][this.getColumnCount()];
for(int i=0;i< this.getRowCount(); i++){
for(int j=0;j<this.getColumnCount(); j++){
temp[i][j]=getValueAt(i,j);
}
}
return temp;
}
public Object getValueAt(int aRow, int aColumn) {
Vector row = (Vector)rows.elementAt(aRow);
return row.elementAt(aColumn);
}//rows 是 what:rows = new Vector();
while (resultSet.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= getColumnCount(); i++) {
newRow.addElement(resultSet.getObject(i));
}
rows.addElement(newRow);
}
楼主自己琢磨琢磨,我也是来这里学习的,嘿嘿。
public void displayResultSet(ResultSet rs) throws SQLException {
Vector columnHeads = new Vector();
Vector rows = new Vector();
if (rs.next()) {
try {
// 获取数据库字段的名称
ResultSetMetaData rsmd = rs.getMetaData();
for(int i=1;i<=rsmd.getColumnCount();i++)
columnHeads.addElement(rsmd.getColumnClassName(i)); // 获取数据库中的记录集
do {
rows.addElement(getNextRow(rs, rsmd));
} while (rs.next());
// 在表格中显示查询结果
table = new JTable(rows, columnHeads);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JScrollPane scroller = new JScrollPane(table);
Container container = getContentPane();
//container.remove(2);
container.add(scroller, BorderLayout.CENTER);
container.validate(); // 刷新Table
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
} else {
JOptionPane.showMessageDialog(this, "无数据显示", "信 息",
JOptionPane.INFORMATION_MESSAGE);
}
} public Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)
throws SQLException {
Vector currentRow = new Vector();
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
currentRow.addElement(rs.getString(i));
// 返回一条记录
return currentRow;
}
String id;
String name;
String area;
String address;
String price;
String guessName;
String doDate;
在构造方法中,按记录顺序依次赋值为结果集中的各条记录的1至7字段的值,后面的把前面的覆盖掉了(就是这个地方不对)。
要想解决这个问题,需要把每个字段在各行的返回值都存储起来,换句话说,就是得用Array或者List这些数据结构来存储。返回的时候再根据数据所处行数返回具体某一行的某一列数据。
// TableModel.java
import java.sql.*;
import javax.swing.table.*;public class TableModel extends AbstractTableModel { public String[] columnNames = null;
public Object[][] values = null;
public boolean isInited = false;
/** Creates a new instance of TableModel */
public TableModel() {
isInited = true;
}
public TableModel(String sqlQuery) {
ConnectDB conn = new ConnectDB();
try {
ResultSet rs = conn.executeQuery(sqlQuery);
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
int rows = conn.rowCount(rs); columnNames = new String[cols + 1];
columnNames[0] = "";
for (int i = 0; i < cols; i++){
columnNames[i + 1] = rsmd.getColumnName(i + 1);
}
values = new Object[rows][columnNames.length];
for (int i = 0; i < rows; i++){
rs.next();
for (int j = 0; j < cols + 1; j++) {
if (j == 0) {
values[i][j] = (new Integer(i + 1)).toString() + " ";
} else{
values[i][j] = rs.getObject(j);
if (values[i][j] == null){
values[i][j] = (Object)"";
}
}
}
}
isInited = true;
return;
} catch (SQLException sqle) {
System.out.print(sqle.getMessage());
} catch (NullPointerException npe){
System.out.print(npe.getMessage());
}
isInited = false;
return;
}
public int getRowCount() {
return values.length;
}
public int getColumnCount() {
return values[0].length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return values[rowIndex][columnIndex];
}
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public void setValueAt(int rowIndex, int columnIndex, Object obj) {
values[rowIndex][columnIndex] = obj;
}
}
// ConnectDB.java
import java.net.*;
import java.sql.*;
import java.io.*;
import java.util.*;public class ConnectDB { Connection con;
ResultSet rs;
Statement stmt;
final String filename = "conn.properties";
String IP = "192.168.0.4";
String database = "database";
String username = "sa";
String password = "password";
String url = "jdbc:microsoft:sqlserver://" + IP +
":1433;DatabaseName=" + database;
/** Creates a new instance of ConnectDB */
public ConnectDB() {
} public ResultSet executeQuery(java.lang.String sql) {
rs = null;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(java.lang.ClassNotFoundException e) {
System.out.println("Class not found!!");
System.out.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url, username, password);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}catch(SQLException sqle) {
System.err.println("Unable to connect");
sqle.printStackTrace();
return null;
}
return rs;
} public int executeUpdate(java.lang.String sql) {
int num = 0;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch(java.lang.ClassNotFoundException e) {
System.out.println("Class not Found!!");
System.out.println(e.getMessage());
}
try {
con = DriverManager.getConnection(url,username,password);
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
num = stmt.executeUpdate(sql);
} catch(SQLException sqle) {
System.err.println("Unable to connect");
sqle.printStackTrace();
}
return num;
}
public void close() throws SQLException {
try {
System.out.println("Closing db connection");
rs.close();
stmt.close();
con.close();
} catch(SQLException sqle) {
System.err.println("Unable to disconnect");
sqle.printStackTrace();
}
System.out.println("Closed db connection");
}
public int rowCount(ResultSet rst) {
int rowc = 0;
int rowNum;
try{
rowNum=rst.getRow();
rst.last();
rowc=rst.getRow();
if(rowNum==0) {
rst.beforeFirst();
} else {
rst.absolute(rowNum);
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
return rowc;
}
public static void main(String[] args) throws SQLException {
ConnectDB conn = new ConnectDB();
String sqlQuery = "SELECT * FROM test";
ResultSet rs = conn.executeQuery(sqlQuery);
while (rs.next()) {
System.out.println("" + rs.getRow() + ":\t" + rs.getString(1));
}
rs.close();
}
}