做了个数据库小程序,有个小问题,郁闷了好几天!请大家帮忙!运行时提示,无效的游标状态,代码如下!import com.sun.rowset.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.sql.rowset.*;
public class ResultSetTable
{
public static void main(String[] args) throws Exception
{
JFrame frame = new ResultSetFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ResultSetFrame extends JFrame
{
public ResultSetFrame() throws Exception
{
setTitle("ResultSet");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
JMenu edit=new JMenu("操作");
menuBar.add(edit);
final JMenuItem addItem=new JMenuItem("添加一行");
final JMenuItem delItem=new JMenuItem("删除一行");
edit.add(addItem);
edit.add(delItem);
try
{
conn = getConnection();
DatabaseMetaData meta=conn.getMetaData();
stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String query="select * from 商品表";
rs=stat.executeQuery(query);
metaData=rs.getMetaData();
try
{
rs.last();
rowCount=rs.getRow();
}
catch(SQLException x)
{
x.printStackTrace();
}
model=new DefaultTableModel(rowCount,metaData.getColumnCount());
rs.first();
for(int i=0;i<rowCount;i++)
{
while (rs.next())
{
for(int j=0;j<model.getColumnCount();j++)
{
model.setValueAt(rs.getString(j+1),i,j);
}
}
}
table=new JTable(model);
add(new JScrollPane(table),"Center");
table.getColumnModel().getColumn(0).setPreferredWidth(10);
table.getColumnModel().getColumn(1).setPreferredWidth(50);
table.getColumnModel().getColumn(2).setPreferredWidth(10);
validate();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
delItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int i=table.getSelectedRow();
try
{
rs.absolute(i+1);
rs.deleteRow();
model.removeRow(i);
}
catch(SQLException x)
{
x.printStackTrace();
}
}
});
addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
try
{
if (conn != null) conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
});
}
public static Connection getConnection()
throws SQLException, IOException
{
String url="jdbc:odbc:hp";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exception e)
{
e.printStackTrace();
}
return DriverManager.getConnection(url);
}
private int rowCount;
private JScrollPane scrollPane;
private DefaultTableModel model;
private ResultSet rs;
private Connection conn;
private Statement stat;
private boolean scrolling;
private JTable table;
private ResultSetMetaData metaData;
private static final int DEFAULT_WIDTH = 500;
private static final int DEFAULT_HEIGHT = 300;
}
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.sql.rowset.*;
public class ResultSetTable
{
public static void main(String[] args) throws Exception
{
JFrame frame = new ResultSetFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class ResultSetFrame extends JFrame
{
public ResultSetFrame() throws Exception
{
setTitle("ResultSet");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
JMenu edit=new JMenu("操作");
menuBar.add(edit);
final JMenuItem addItem=new JMenuItem("添加一行");
final JMenuItem delItem=new JMenuItem("删除一行");
edit.add(addItem);
edit.add(delItem);
try
{
conn = getConnection();
DatabaseMetaData meta=conn.getMetaData();
stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String query="select * from 商品表";
rs=stat.executeQuery(query);
metaData=rs.getMetaData();
try
{
rs.last();
rowCount=rs.getRow();
}
catch(SQLException x)
{
x.printStackTrace();
}
model=new DefaultTableModel(rowCount,metaData.getColumnCount());
rs.first();
for(int i=0;i<rowCount;i++)
{
while (rs.next())
{
for(int j=0;j<model.getColumnCount();j++)
{
model.setValueAt(rs.getString(j+1),i,j);
}
}
}
table=new JTable(model);
add(new JScrollPane(table),"Center");
table.getColumnModel().getColumn(0).setPreferredWidth(10);
table.getColumnModel().getColumn(1).setPreferredWidth(50);
table.getColumnModel().getColumn(2).setPreferredWidth(10);
validate();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
delItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int i=table.getSelectedRow();
try
{
rs.absolute(i+1);
rs.deleteRow();
model.removeRow(i);
}
catch(SQLException x)
{
x.printStackTrace();
}
}
});
addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
try
{
if (conn != null) conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
});
}
public static Connection getConnection()
throws SQLException, IOException
{
String url="jdbc:odbc:hp";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exception e)
{
e.printStackTrace();
}
return DriverManager.getConnection(url);
}
private int rowCount;
private JScrollPane scrollPane;
private DefaultTableModel model;
private ResultSet rs;
private Connection conn;
private Statement stat;
private boolean scrolling;
private JTable table;
private ResultSetMetaData metaData;
private static final int DEFAULT_WIDTH = 500;
private static final int DEFAULT_HEIGHT = 300;
}
结果集的数据不可更新了
我认为问题是出在rs.first(),和rs.last()
我用的SQL SERVER,不是access
======================================
现在的问题是我的数据库里有数据,但是也会提示游标错误