在Java中,获得ResultSet的总行数的方法有以下几种。
第一种:利用ResultSet的getRow方法来获得ResultSet的总行数
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE)
ResultSet rset = stmt.executeQuery("select * from yourTableName")
rset.last()
int rowCount = rset.getRow()//获得ResultSet的总行数
第二种:利用循环ResultSet的元素来获得ResultSet的总行数
ResultSet rset = stmt.executeQuery("select * from yourTableName")
int rowCount = 0
while(rset.next()) {
rowCount++}rowCount就是ResultSet的总行数。
(1)首先使用last()方法,将数据库游标定位到记录集的最后一行。
(2)使用getRow()方法,返回记录集最后一行的行索引。该索引就等于记录集所包含记录的个数,也就是记录集的行数。getRow()方法是在JDBC API 2.0中才定义的,在JDBC API 1.0中没有这个方法。
DefaultTableModel是常用的java表格模型。
参考代码:
package com.dusdimport java.awt.BorderLayout
import java.awt.Container
import java.awt.Point
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.InputEvent
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import java.util.Arrays
import java.util.Vector
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JOptionPane
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTable
import javax.swing.JTextField
import javax.swing.ListSelectionModel
import javax.swing.event.TableModelEvent
import javax.swing.event.TableModelListener
import javax.swing.table.DefaultTableModel
import javax.swing.table.JTableHeader
import javax.swing.table.TableColumnModel
/**
* 表格模型事件示例
* <p>
* <li>A component generally gains the focus when the user clicks it,
* or when the user tabs between components, or otherwise interacts
* with a component. A component can also be given the focus programmatically,
* such as when its containing frame or dialog-box is made visible.
* The snippet of the codes below shows how to give a particular component
* the focus every time the window gains the focus.
*
* @author HAN
*
*/
public class TableModel extends JFrame {
/**
*
*/
private static final long serialVersionUID = -8581492063632813033L
public TableModel() {
// TODO Auto-generated constructor stub
final Container container = getContentPane()
Vector<String> tableColumnNames = new Vector<String>()
tableColumnNames.add("A")
tableColumnNames.add("B")
Vector<Vector<String>> tableValues = new Vector<Vector<String>>()
for (int i = 1 i < 5 i++) {
Vector<String> vector = new Vector<String>()
vector.add("A" + i)
vector.add("B" + i)
tableValues.add(vector)
}
final DefaultTableModel defaultTableModel = new DefaultTableModel(
tableValues, tableColumnNames)
final JTable table = new JTable(defaultTableModel)
JScrollPane scrollPane = new JScrollPane()
scrollPane.setViewportView(table)
container.add(scrollPane, BorderLayout.CENTER)
JPanel panel = new JPanel()
container.add(panel, BorderLayout.SOUTH)
JLabel labelA = new JLabel("A: ")
final JTextField textFieldA = new JTextField(15)
JLabel labelB = new JLabel("B: ")
final JTextField textFieldB = new JTextField(15)
JButton buttonAdd = new JButton("添加")
JButton buttonDel = new JButton("删除")
JButton buttonDeselected = new JButton("取消选择")
panel.add(labelA)
panel.add(textFieldA)
panel.add(labelB)
panel.add(textFieldB)
panel.add(buttonAdd)
panel.add(buttonDel)
panel.add(buttonDeselected)
buttonAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int[] selectedRows = table.getSelectedRows() // table
// 默认情况容许多行选择
Vector<String> rowData = new Vector<String>()
rowData.add(textFieldA.getText())
rowData.add(textFieldB.getText())
if (selectedRows.length == 0) {
defaultTableModel.addRow(rowData)
textFieldA.setText(null)
textFieldB.setText(null)
} else if (selectedRows.length == 1) {
// System.out.println(selectedRows[0])
defaultTableModel.insertRow(selectedRows[0] + 1, rowData)
textFieldA.setText(null)
textFieldB.setText(null)
} else {
JOptionPane.showMessageDialog(container,
"Your operation is forbidden", "Warning",
JOptionPane.WARNING_MESSAGE)
}
}
})
buttonDel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int[] selectedRows = table.getSelectedRows() // table
// 默认情况容许多行选择
for (int i = 0 i < selectedRows.length i++) {
// System.out.println(selectedRows[i])
defaultTableModel.removeRow(selectedRows[i] - i)
}
}
})
buttonDeselected.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
table.clearSelection()
}
})
scrollPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// System.out.println("here")
if (e.getClickCount() == 1
&& e.getButton() == MouseEvent.BUTTON1) {
table.clearSelection()
}
}
})
// make the text field focused every time the window is activated
addWindowFocusListener(new WindowAdapter() {
@Override
public void windowGainedFocus(WindowEvent e) {
// TODO Auto-generated method stub
textFieldA.requestFocus()
}
})
// **************************************************************
// This is a standard snippet to realize the desired column selection as in
// Excel
// **************************************************************
// row selection mode
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
// column selection mode
TableColumnModel tableColumnModel = table.getColumnModel()
tableColumnModel.getSelectionModel().setSelectionMode(
ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
// allow the column selection (the row selection is allowed by default)
table.setColumnSelectionAllowed(true)
final JTableHeader tableHeader = table.getTableHeader()
tableHeader.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
// Extended modifiers represent the state of all modal keys,
// such as ALT, CTRL, META.
if (e.getClickCount() == 1
&& e.getButton() == MouseEvent.BUTTON1) {
// Point point = new Point(e.getX(), e.getY())
Point point = new Point(e.getPoint())
int columnNum = tableHeader.columnAtPoint(point)
// System.out.println(columnNum)
int[] selectedColumns = table.getSelectedColumns()
if (selectedColumns.length != 0) {
// System.out.println("here1")
// System.out.println(InputEvent.getModifiersExText(e.getModifiersEx()))
if (e.getModifiersEx() == (InputEvent.CTRL_DOWN_MASK)) {
// System.out.println("ctrl")
if (Arrays.binarySearch(selectedColumns, columnNum) >= 0) {
table.removeColumnSelectionInterval(columnNum,
columnNum)
} else {
table.addColumnSelectionInterval(columnNum,
columnNum)
}
} else if (e.getModifiersEx() == (InputEvent.SHIFT_DOWN_MASK)) {
// System.out.println("shift")
table.setColumnSelectionInterval(
selectedColumns[0], columnNum)
} else {
table.setColumnSelectionInterval(columnNum,
columnNum)
}
} else {
// System.out.println("here2")
table.setColumnSelectionInterval(columnNum, columnNum)
}
table.setRowSelectionInterval(0, table.getRowCount() - 1)
}
}
})
defaultTableModel.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
int type = e.getType()
int firstRow = e.getFirstRow()
// int lastRow = e.getLastRow() // the last row seems to be always equal to the first row
int column = e.getColumn()
switch (type) {
case TableModelEvent.DELETE:
System.out.print("此次事件由 删除 行触发:")
System.out.println("此次删除的是第 " + firstRow + " 行")
break
case TableModelEvent.INSERT:
System.out.print("此次事件由 插入 行触发:")
System.out.println("此次插入的是第 " + firstRow + " 行")
break
case TableModelEvent.UPDATE:
System.out.print("此次事件由 更新 行触发:")
System.out.println("此次更新的是第 " + firstRow + " 行第 " + column + " 列")
break
default:
System.out.println("此次事件由 其他原因 触发")
}
}
})
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TableModel frame = new TableModel()
frame.setTitle("表格模型事件示例")
frame.pack() //Realize the components.
// frame.setBounds(100, 100, 600, 300)
// textFieldA.requestFocus()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setVisible(true) //Display the window.
}
}
java中表格的删除是通过事件监控来实现的,示例代码如下:import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTable
import javax.swing.JTextField
import javax.swing.ListSelectionModel
import javax.swing.table.DefaultTableModel
//维护表格
public class JTableDefaultTableModelTest extends JFrame{
private DefaultTableModel tableModel //表格模型对象
private JTable table
private JTextField aTextField
private JTextField bTextField
public JTableDefaultTableModelTest()
{
super()
setTitle("表格")
setBounds(100,100,500,400)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
String[] columnNames = {"A","B"} //列名
String [][]tableVales={{"A1","B1"},{"A2","B2"},{"A3","B3"},{"A4","B4"},{"A5","B5"}}//数据
tableModel = new DefaultTableModel(tableVales,columnNames)
table = new JTable(tableModel)
JScrollPane scrollPane = new JScrollPane(table) //支持滚动
getContentPane().add(scrollPane,BorderLayout.CENTER)
//jdk1.6
//排序:
//table.setRowSorter(new TableRowSorter(tableModel))
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) //单选
table.addMouseListener(new MouseAdapter(){//鼠标事件
public void mouseClicked(MouseEvent e){
int selectedRow = table.getSelectedRow()//获得选中行索引
Object oa = tableModel.getValueAt(selectedRow, 0)
Object ob = tableModel.getValueAt(selectedRow, 1)
aTextField.setText(oa.toString()) //给文本框赋值
bTextField.setText(ob.toString())
}
})
scrollPane.setViewportView(table)
final JPanel panel = new JPanel()
getContentPane().add(panel,BorderLayout.SOUTH)
panel.add(new JLabel("A: "))
aTextField = new JTextField("A4",10)
panel.add(aTextField)
panel.add(new JLabel("B: "))
bTextField = new JTextField("B4",10)
panel.add(bTextField)
final JButton addButton = new JButton("添加") //添加按钮
addButton.addActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
String []rowValues = {aTextField.getText(),bTextField.getText()}
tableModel.addRow(rowValues) //添加一行
int rowCount = table.getRowCount() +1 //行数加上1
aTextField.setText("A"+rowCount)
bTextField.setText("B"+rowCount)
}
})
panel.add(addButton)
final JButton updateButton = new JButton("修改") //修改按钮
updateButton.addActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
int selectedRow = table.getSelectedRow()//获得选中行的索引
if(selectedRow!= -1) //是否存在选中行
{
//修改指定的值:
tableModel.setValueAt(aTextField.getText(), selectedRow, 0)
tableModel.setValueAt(bTextField.getText(), selectedRow, 1)
//table.setValueAt(arg0, arg1, arg2)
}
}
})
panel.add(updateButton)
final JButton delButton = new JButton("删除")
delButton.addActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
int selectedRow = table.getSelectedRow()//获得选中行的索引
if(selectedRow!=-1) //存在选中行
{
tableModel.removeRow(selectedRow) //删除行
}
}
})
panel.add(delButton)
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JTableDefaultTableModelTest jTableDefaultTableModelTest = new JTableDefaultTableModelTest()
jTableDefaultTableModelTest.setVisible(true)
}
}