亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 11449 | 回復: 4
打印 上一主題 下一主題

如何把java.util.Date對象保存到SQLServer中類型為datetime類型字段中 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-05-25 08:46 |只看該作者 |倒序瀏覽
1. 如何把java.util.Date對象保存到SQLServer中類型為datetime類型字段中去,如果使用java.sql.Date類,那么除了年月日,時分秒都會被去掉.當然可以通過執(zhí)行
insert into table(field) values('yeary-month-day hours:minutes:seconds')
即使用字符串強制執(zhí)行操作,有沒有其它更好的方法?

問題已經解決,總結經驗如下:
我使用的是Spring 提供的JdbcTemplate
我的對象中含有java.sql.Date類型的兩個對象,
數(shù)據(jù)庫使用SQLServer 2000,使用的了Datetime類型的字段
現(xiàn)在要把java.sql.Date類型的userDeviceInfo存入數(shù)據(jù)庫中去,然后再讀出來.






  1. /*class userDeviceInfo原來是一個登陸設備信息類,在這里我只選兩其中兩個成員變量,就能說明問題,這個類使用了java.sql.Date類型的兩個成員變量,提供了相應的setter,getter,供Spring和用戶設置屬性,取得屬性
  2. */

  3. import java.sql.Date;
  4. public class userDeviceInfo
  5. {
  6.         private Date dRegDate;
  7.         private Date dCZDate;

  8.         public void setDRegDate(Date dRegDate)
  9.         {
  10.                 this.dRegDate = dRegDate;
  11.         }

  12.         public void setDCZDate(Date dCZDate)
  13.         {
  14.                 this.dCZDate = dCZDate;
  15.         }

  16.         public Date getDRegDate()
  17.         {
  18.                 return this.dRegDate;
  19.         }


  20.         public Date getDCZDate()
  21.         {
  22.                 return this.dCZDate;
  23.         }
  24. }

  25. /*
  26. 下面是使用Spring JdbcTemplate的插入對象和取得對象的類
  27. */


  28. import java.sql.*;
  29. import javax.sql.DataSource;

  30. import java.util.Date;
  31. import java.util.List;
  32. import org.springframework.jdbc.core.JdbcTemplate;
  33. import org.springframework.jdbc.core.RowCallbackHandler;
  34. import org.springframework.jdbc.core.RowMapper;
  35. import org.springframework.jdbc.core.RowMapperResultReader;

  36. import alarm.userDeviceInfo;

  37. //RowMapper接口負責把ResultSet中的一條記錄映射成一個對象
  38. //為把一條記錄映射成一個對象,我們需要創(chuàng)建這樣的RowMapper
  39. class userDeviceInfoRowMapper implements RowMapper
  40. {
  41.         public Object mapRow(ResultSet rs, int index) throws SQLException
  42.         {
  43.                 userDeviceInfo userobj = new userDeviceInfo();
  44.                 userDeviceInfoDao.ResultToObj(userobj, rs);

  45.                 return userobj;
  46.         }
  47. }

  48. // 實現(xiàn)userDeviceInfo類對象的持久化
  49. public class userDeviceInfoDao
  50. {
  51.         private JdbcTemplate jdbcTemplate;

  52.         private DataSource dataSource;

  53.         public userDeviceInfoDao(DataSource ds)
  54.         {
  55.                 this.dataSource = ds;
  56.                 jdbcTemplate = new JdbcTemplate(this.dataSource);
  57.         }

  58.         // 向數(shù)據(jù)庫是添加一個對象,實現(xiàn)對象持久化,need modity
  59.         public int insertObj(userDeviceInfo userobj) throws SQLException
  60.         {

  61.                 String sql = "insert into UserInfo(
  62.                                 + "dRegDate,dCZDate)"
  63.                                 + " values(?,?)";
  64.                 Object[] params = new Object[] { userobj.getDRegDate(),
  65.                                 userobj.getDCZDate()};

  66.                 int[] types = new int[] {
  67.                         Types.TIMESTAMP,
  68.                         // sqlserver中的datetime對應types.timestamp,java.sql.date
  69.                         // 轉換過程由java.util.date --> java.sql.date
  70.                         Types.TIMESTAMP,
  71.                 };

  72.                 return jdbcTemplate.update(sql, params, types);
  73.         }
  74.         // 根據(jù)UserId得到一個對象
  75.         public userDeviceInfo getObj(String strUserID) throws SQLException
  76.         {
  77.                 String sql = "select * from UserInfo where strUserID = ?";// 創(chuàng)建查詢語句
  78.                 final Object[] params = new Object[] { strUserID };// 創(chuàng)建查詢參數(shù)
  79.                 final userDeviceInfo userobj = new userDeviceInfo();

  80.                 jdbcTemplate.query(sql, params, new RowCallbackHandler() {

  81.                 public void processRow(ResultSet rs) throws SQLException
  82.                 {
  83.                         ResultToObj(userobj, rs);
  84.                 }
  85.                 });

  86.                 return userobj;
  87.         }


  88.         // 把一行記錄轉換成一個對象,為提高代碼重用,寫成一個靜態(tài)函數(shù)
  89.         public static void ResultToObj(userDeviceInfo userobj, ResultSet rs)
  90.                         throws SQLException
  91.         {
  92.         
  93.                 java.sql.Date sqlDate1 = new java.sql.Date(rs.getTimestamp("dCZDate").getTime());  //轉換精要
  94.                 java.sql.Date sqlDate2 = new java.sql.Date(rs.getTimestamp("dRegDate").getTime());  

  95.                 userobj.setDCZDate(sqlDate1);
  96.                
  97.                 userobj.setDRegDate(sqlDate2);

  98.         }
  99. }


  100. //測試用例,我們從userDeviceInfoDao中取得userObj后,怎么樣從java.sql.Date中取得時間呢
  101. test case:

  102.         BeanFactory factory = new XmlBeanFactory(new FileInputStream(//bean工廠,測試bean
  103.                                 "D:\\bin\\JAVA\\Alarm\\WebRoot\\WEB-INF\\Alarm-servlet.xml"));
  104.         userDeviceInfoDao userDao = (userDeviceInfoDao) factory
  105.                                 .getBean("userDeviceInfoDao");

  106.         userDeviceInfo userobj = new userDeviceInfo();
  107.         try
  108.         {
  109.                 userobj = userDao.getObj("admin12");
  110.                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  111.                        //使用SimpleDateFormat
  112.                 String da = sdf.format(userobj.getDRegDate().getTime());//獲取milliseconds,然后轉換
  113.                 System.out.println(userobj.getStrUserID() + ",regtime:" + da);

  114.                 } catch (SQLException e)
  115.                 {
  116.                         System.err.println(e.toString());
  117.                 }
復制代碼


結論:
1.java.sql.Date是含有時分秒,只是這是一種隱含,如果直接調用getDate(),則只會返回年,月,日,獲取時,分,秒的方法是使用java.util.Date,通用getTime(),返回從milliseconds,充當中間橋,進行轉換
2.Spring Types.timestamp可以對應的sqlserver數(shù)據(jù)庫中的datetime,可以把時間寫進去.
3.讀出來的時候,按則第一條原則進行轉換
在網上找了很多資料,轉換都比較復雜,使用jdbcTemplate的代碼看起來很笨拙,其實問題的關鍵是java.sql.Date是否能保存除年月日外的時分秒,只要可以,就能通過中間方法進行存取.

剛剛總結出來的經驗,請多多指教!!!

論壇徽章:
0
2 [報告]
發(fā)表于 2006-05-25 21:30 |只看該作者
弄那么復雜干嘛?
java.sql.Date是繼承自java.util.Date,也就是說,java.util.Date的所有方法java.sql.Date都可以用啊,而且繼承的類可以向上轉換。最簡單的方法,你把程序里面所有的定義java.util.Date都改成java.sql.Date不就行了?

實在需要轉換,參照下例
java.sql.Date sdate = xxxx;
java.util.Date udate = (java.util.Date) sdate;
sdate = new java.sql.Date(udate.getTime());

[ 本帖最后由 perryhg 于 2006-5-25 21:32 編輯 ]

論壇徽章:
0
3 [報告]
發(fā)表于 2006-05-25 21:51 |只看該作者
java.text.*下有個DateFormat
DateFormat df=DateFormat.getDateInstance();
String date=df.format(new java.util.Date());
后面的可以分解new java.util.Date().getTime()
date=yyyy-mm-dd

論壇徽章:
0
4 [報告]
發(fā)表于 2006-05-25 23:12 |只看該作者
問題是我們?yōu)槭裁匆褂眠@種格式呢?
insert into table(field) values('yeary-month-day hours:minutes:seconds')
干嘛不用PreparedStatement ?
insert into table(field) values(?);
java.sql.Date dt = new java.sql.Date(...);
pstmt.setDate(dt);
pstmt.executeUpdate();

Spring不是支持使用preparedstatement的嗎?有簡單的方法不用,干嘛要舍簡就繁地把日期格式轉來轉去呢?

java.sql.Date sdate = new java.sql.Date(...);
JdbcTemplate jt = ...
jt.update("insert into table(field) values(?)", new Object[] {sdate});

論壇徽章:
0
5 [報告]
發(fā)表于 2006-05-28 10:42 |只看該作者
謝謝樓上幾位
JdbcTemplae承擔了資源管理和錯誤處理的重擔,可以使JDBC代碼非常干凈,對于update(String sql,Object[] args,int[] argTypes)提供了類型安全,當參數(shù)為null時,這種形式提供了更好的支持.
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP