我正在使用Eclipse juno IDE。從服務器發送JPA數據到客戶端?
我有一個客戶端 - 服務器應用程序。在服務器端我有一個實體(遊記) 和我有另一個類處理JPA查詢。我從數據庫中 recieving數據,但是當我試圖把它發送作爲載體,以客戶端我得到的 客戶端的例外,那說:「廣東話投pack.db.Travels到Java。 util.vector」
這裏是我的代碼: 實體:
package pack.db;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Time;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Travels implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name="id")
private int id;
@Column(name="taxi_number")
private String taxiNumber;
@Column(name="travel_date")
private Date travelDate;
@Column(name="travel_time")
private Time travelTime;
@Column(name="cost")
private Double travelCost;
public Travels() {
super();
}
public void setNumber(String number)
{
this.taxiNumber = number;
}
public void setDate(Date date)
{
this.travelDate = date;
}
public void setTime(Time time)
{
this.travelTime = time;
}
public void setCost(Double cost)
{
this.travelCost = cost;
}
}
QueryClass
public Vector retrieveAllTravelsData(Date[] travelDate, Time[] travelTime) {
List<Object[]> allTravels = (List<Object[]>)em.createQuery("SELECT t FROM Travels t WHERE t.travelDate between ?1 and ?2 and " +
"t.travelTime between ?3 and ?4")
.setParameter(1, travelDate[0])
.setParameter(2, travelDate[1])
.setParameter(3, travelTime[0])
.setParameter(4, travelTime[1]).getResultList();
return (Vector) allTravels;
}
所以我想要做的就是發送「allTravels」作爲客戶端的矢量,因爲我需要在客戶端填充JTABLE。所以我試圖將返回數據 從查詢轉換爲OBJECT [](因爲JTABLE的構造函數需要Object [] []用於行)併發送它..但我仍然在客戶端獲得異常說 「不能投pack.db.Travel到java.util.Vector中的」 ..我不認爲我需要添加 旅遊實體在客戶端..所以我怎樣才能將數據發送到客戶端?
更具體。我有這樣的代碼與JDBC implemntation
public Vector retrieveAllTravelsData(Date[] travelDate, Time[] travelTime) {
Vector rows_data = new Vector();
String sql = "SELECT * FROM taxis.travels " + " WHERE travel_date BETWEEN ? AND ? AND travel_time BETWEEN ? AND ?";
try {
statement = (PreparedStatement) connection.prepareStatement(sql);
statement.setDate(1, travelDate[0]);
statement.setDate(2, travelDate[1]);
statement.setTime(3, travelTime[0]);
statement.setTime(4, travelTime[1]);
rs = statement.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int cols_count = meta.getColumnCount();
while (rs.next()) {
Vector record = new Vector();
for (int i = 0; i < cols_count; i++) {
record.add(rs.getString(i+1));
}
rows_data.addElement(record);
}
} catch (SQLException e) {
while (e != null) {
e.printStackTrace();
e = e.getNextException();
}
}
return rows_data;
在這裏,我可以從每列每列數據保存爲一個記錄,然後把它放在向量。那麼JPA如何實現呢?可能嗎?
嗨JB Nizet,我知道該查詢返回的實例旅遊,我只是試圖這種方式來檢查它是否工作,並禁用例外.. 感謝您的迴應,我會嘗試您的建議 – eliorsh
我能夠發送數據到客戶端..但是當客戶端讀取 數據爲 'Vector x =(Vector)from_server.readObject()' 我在客戶端得到一個異常,說:不能從pack.db.Travels轉換爲java.util 。向量。 現在pack.db.Travels是服務器端的一個實體 – eliorsh
您在客戶端獲得的是您在服務器端發送的內容。如果您在服務器端發送List,則客戶端將獲得List 。如果您感到困惑,請向我們展示查詢的更新代碼,在服務器端發送結果的代碼,在客戶端讀取結果的代碼以及異常的完整堆棧跟蹤。 –