我有一個 SQL 命令將字段更新到表中,并根據“cat file.txt”填充它。這個文件有很多行,我想稍后進入休眠字段,但似乎在從 db hibernate 讀取它之后刪除所有回車。這是我從 shell 腳本(bash)執(zhí)行的腳本: REQUEST_FILE=`cat file.txt` echo "UPDATE table SET request_info='$REQUEST_FILE' WHERE id=1;" > ./after.sql 如果我做 after.sql 的 cat 我得到: UPDATE table SET request_info='1-Start-Env Script for Env 2-insert done 3-update info done 4-all performed correctly' WHERE id=29;這是數據庫表結構:Table: tableColumns:id int(11) AI PK submit_date datetime request_type varchar(45) request_info longtext這是存儲在 db 上的數據,該行如何:# id, submit_date,request_type, request_info'29', '2019-02-11 04:55:21', 'check', '1-Start-Env Script for Env\n2-insert done\n3-update info done\n4-all performed correctly'所以直到這一步我猜一切都很好,因為字段包含'\ n'Hibernate 類是這樣完成的:@Entity@Table(name="table")@NamedQuery(name="Table.findAll", query="SELECT u FROM Table u")public class Table implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private int id; @Column(name="request_info") private String requestInfo; @Column(name="request_type") private String requestType; @Temporal(TemporalType.TIMESTAMP) @Column(name="submit_date") private Date submitDate;當我訪問 requestInfo 變量時,輸出是:1-Start-Env 腳本用于 Env2-insert done3-update info done4-all 執(zhí)行正確此變量用于在單擊 JSF 頁面中的按鈕后創(chuàng)建文件: HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse(); response.reset(); response.setContentType("text/plain"); response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); OutputStream output = response.getOutputStream(); output.write(request.getRequestInfo().getBytes()); output.flush(); output.close();如果我執(zhí)行 System.out 我看到正確的數據,那么我猜是 getBytes 函數沒有返回回車: System.out.println("file content:" +request.getRequestInfo());輸出:file content:1-Start-Env Script for Env 2-insert done 3-update info done 4-all performed correctly你有什么主意嗎?謝謝
1 回答

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
您的問題是換行符。
而不是\n
,\r\n
用于文件中的新行。
但是,這不會解決所有平臺上的問題,只會解決您正在測試的平臺。
有關換行符和不同平臺的更多信息,請參見此處:
https://superuser.com/questions/374028/how-are-n-and-r-handled-differently-on-linux-and-windows
您也可以嘗試以下方法:
output.write(request.getRequestInfo().replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n"));
同樣,您的 servlet 不知道瀏覽器在哪個平臺上(Windows、Mac 或其他),因此除非您要查看用戶代理標頭或其他東西,否則您總是會遇到一個系統(tǒng)或另一個系統(tǒng)的問題。
添加回答
舉報
0/150
提交
取消