javajavasql
Ⅰ java.sql.Date和java.util.Date的區別
1) java.sql.Date是java.util.Date的子類,是一個包裝了毫秒值的瘦包裝器,允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。 為了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須通過將時間、分鍾、秒和毫秒設置為與該實例相關的特定時區中的零來「規范化」。 說白了,java.sql.Date就是與資料庫Date相對應的一個類型,而java.util.Date是純java的Date。
2)JAVA里提供的日期和時間類,java.sql.Date和java.sql.Time,只會從資料庫里讀取某部分值,這有時會導致丟失數據。例如一個包含2002/05/22 5:00:57 PM的欄位,讀取日期時得到的是2002/05/22,而讀取時間時得到的是5:00:57 PM. 你需要了解資料庫里存儲時間的精度。有些資料庫,比如MySQL,精度為毫秒,然而另一些資料庫,包括Oracle,存儲SQL DATE類型數據時,毫秒部分的數據是不保存的。以下操作中容易出現不易被發現的BUG:獲得一個JAVA里的日期對象。 從資料庫里讀取日期 試圖比較兩個日期對象是否相等。如果毫秒部分丟失,本來認為相等的兩個日期對象用Equals方法可能返回false。.sql.Timestamp類比java.util.Date類精確度要高。這個類包了一個getTime()方法,但是它不會返回額外精度部分的數據,因此必須使用...
總之,java.util.Date 就是Java的日期對象,而java.sql.Date 是針對SQL語句使用的,只包含日期而沒有時間部分。
Ⅱ java中PreparedStatement執行帶參數的sql語句如何實現模糊查詢
使用Java中的PreparedStatement執行帶參數的SQL語句來實現模糊查詢時,首先需要構建SQL語句。比如,可以使用SQL的LIKE語法進行模糊匹配,示例SQL語句可以寫為:String sql = "select * from article where title like ?";。接著,根據具體的匹配要求設置PreparedStatement的參數。例如,若需要匹配包含特定關鍵字的標題,可以使用如下代碼:preparedStatement.setString(1, "%" + keyword + "%");,其中,keyword表示用戶輸入的關鍵字。
值得注意的是,使用PreparedStatement不僅可以提高代碼的執行效率,還能防止SQL注入攻擊。在設置參數時,確保使用佔位符(如上例中的「?」)來代替直接拼接字元串,以避免SQL注入的風險。這樣,即便用戶輸入了惡意代碼,也不會被執行,從而增強了程序的安全性。
另外,模糊查詢可以通過調整LIKE語句中的通配符來實現不同的匹配效果。例如,若希望匹配以特定關鍵字開頭的標題,可以將LIKE語句修改為:String sql = "select * from article where title like ?";,然後設置參數為:preparedStatement.setString(1, keyword + "%");。同樣地,若希望匹配以特定關鍵字結尾的標題,則可以將LIKE語句修改為:String sql = "select * from article where title like ?";,設置參數為:preparedStatement.setString(1, "%" + keyword);。
綜上所述,通過使用PreparedStatement和SQL的LIKE語法,我們可以方便地實現對資料庫中數據的模糊查詢。這種查詢方式不僅簡單易用,還能有效提高程序的安全性和性能。
Ⅲ java sql 語句 我要寫一個查詢 要求知道 uid pwd 還有rank 。
在編寫Java SQL語句時,為了提高代碼的安全性和可讀性,建議使用預編譯語句中的點位符。例如,原始的SQL語句如下:
String sql = "select*fromt_personwhereuid='?'andpwd='?'andrank='?'"
應修改為:
String sql = "select*fromt_personwhereuid=?andpwd=?andrank=?"
這里的?是一個點位符,表示將來的值會通過預編譯語句的set方法來設置。這樣做可以避免SQL注入攻擊,並且可以更好地處理不同類型的參數。例如,正確的做法是:
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, uid);
pstmt.setString(2, pwd);
pstmt.setString(3, rank);
ResultSet rs = pstmt.executeQuery();
這樣不僅提高了代碼的安全性,還能有效防止SQL注入,同時也能更好地處理不同類型的參數。通過這種方式,可以確保查詢的准確性和安全性。
值得注意的是,使用預編譯語句不僅限於字元串類型,還可以用於其他數據類型,如整數、浮點數等。例如:
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.setDouble(3, salary);
ResultSet rs = pstmt.executeQuery();
這種方法能夠顯著提高代碼的健壯性和安全性。通過這種方式編寫SQL語句,可以避免直接在字元串中拼接變數,從而降低SQL注入的風險。同時,預編譯語句還能夠提高資料庫查詢的性能,因為在資料庫中已經對這些點位符進行了優化處理。
總之,在編寫Java SQL語句時,使用預編譯語句和點位符是最佳實踐之一。這不僅能夠提高代碼的安全性,還能增強代碼的可讀性和可維護性。通過這種方式,可以確保查詢的准確性和安全性,從而更好地服務於應用程序的需求。