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语句时,使用预编译语句和点位符是最佳实践之一。这不仅能够提高代码的安全性,还能增强代码的可读性和可维护性。通过这种方式,可以确保查询的准确性和安全性,从而更好地服务于应用程序的需求。