在Java中,如何通过在数据库得到的结果集得到表的列数和行数?

Python024

在Java中,如何通过在数据库得到的结果集得到表的列数和行数?,第1张

在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.dusd

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

}

}