在java中创建了jtable,怎么获取这个表中某行某列的数据(即某单元格的数据int值)??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中创建了jtable,怎么获取这个表中某行某列的数据(即某单元格的数据int值)??相关的知识,希望对你有一定的参考价值。
我的程序是这样的:
JScrollPane BP=new JScrollPane(); Vector M_column=new Vector();
M_column.add("实页号");M_column.add("占用位");M_column.add("程序号");
M_column.add("段页号");M_column.add("使用位");M_column.add("程序优先位"); M_column.add("H");
Vector M_data=new Vector();
for(int i=0;i<5;i++)
Vector M_rowdata=new Vector();
M_rowdata.add(String.valueOf(i));//实页号
M_rowdata.add("1");//占用位
M_model=new DefaultTableModel(M_data,M_column);//创建指定表格模型的表格
JTable M_table=new JTable(M_model);
BP.setViewportView(M_table);
Container c=getContentPane();//创建窗n口
c.add(BP);
.......................后面的是想获取表中某行某列的数据int值
我知道了是用defaulttablemodel的getValueAt方法
本回答被提问者采纳如何使用数组方法通过RMI从数据库的表中获取完整的数据?
【中文标题】如何使用数组方法通过RMI从数据库的表中获取完整的数据?【英文标题】:How to fetch complete data from the database's table through RMI using the array method? 【发布时间】:2022-01-02 13:28:34 【问题描述】:我想通过 RMI 从数据库的表中获取完整的数据。我在 Java 接口中使用了数组方法,并在实现类中实现了该方法。我的意图是通过实现获取数组中的数据,并在客户端通过JTable
显示它。我在数据库中创建了一个单列表。我必须将整个数据从该表获取到客户端。
我附上了我所做的编码。 我已经在我得到的代码部分注释了错误。
界面
public interface Interface extends Remote
public static String[] getArray() throws Remote Exception; // Here it shows missing method
// body or declare abstract
实施
public class TheImplementation extends UnicastRemoteObject implements Interface
public TheImplementation()throws Remote Exception
super();
private static final long serialVersionUID = -3763231206310559L;
Connection con;
PreparedStatement pst;
ResultSet rst;
public static String[] getArray() throws RemoteException
String fruitdetails = null;
try
Connection connection=ConnectionProvider.getConnection();
Statement st=connection.createStatement();
ResultSet rs=st.executeQuery("select *from details");
while(rs.next())
fruitdetails= rs.getString("fruit");
String tbData[]=fruitdetails;
catch (SQLException e)
JOptionPane.showMessageDialog(null, e);
return tbData;// Here it shows error. Cannot find symbol.
// I tried to declare array at top. But, It didn't work.
【问题讨论】:
tbData
是在 while 循环中声明的,所以它的作用域只在 while 循环内。当你编译它时,你的 sql 会抛出一个错误。其他 Interface
不是 Java 对象的好名字。 con
pst
和 rst
已声明但从未使用过。为什么将getArray
作为static
方法,为什么还要麻烦接口它?
连接、语句和结果集永远不会关闭。 JOptionPane 用于服务器端显示错误消息。
参考Java doc for Scope of variables
【参考方案1】:
remote interfaces中的抽象方法不能是静态的,所以需要将接口定义改成如下。
public interface Interface extends java.rmi.Remote
public String[] getArray() throws RemoteException;
远程方法返回的值必须是serializable。 java中的数组是可序列化的,但是数组具有固定的大小,并且由于您正在返回数据库查询的结果,因此您无法知道大小。因此我建议getArray
方法返回一个ArrayList 或更好的CachedRowSet。
public interface Interface extends Remote
public CachedRowSet getArray() throws RemoteException;
由于类TheImplementation
是您的RMI 服务器类,因此最好使用log 异常而不是显示JOptionPane
,并且您应该始终记录stack trace。请注意,远程方法必须声明它们抛出RemoteException
,以便通知RMI 客户端远程方法失败。因此,除了记录异常之外,方法getArray
还可以抛出RemoteException
。
以下代码演示。
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;
public class TheImplementation extends UnicastRemoteObject implements Interface
public TheImplementation() throws RemoteException
super();
private static final long serialVersionUID = -3763231206310559L;
public CachedRowSet getArray() throws RemoteException
try (Connection con = ConnectionProvider.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from details"))
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet fruitDetails = factory.createCachedRowSet();
fruitDetails.populate(rs);
return fruitDetails;
catch (SQLException e)
throw new RemoteException("Method 'getArray()' failed.", e);
请注意,上面的代码还使用了try-with-resources来确保ResultSet
、Statement
和Connection
都是关闭的。
【讨论】:
以上是关于在java中创建了jtable,怎么获取这个表中某行某列的数据(即某单元格的数据int值)??的主要内容,如果未能解决你的问题,请参考以下文章
从java程序中向oracle中插入数据,为啥插入顺序总是不对