0

我有下面的一段代码。请参见:

Workload workload;
     ArrayList<Workload> workList = null;
     System.out.print("first");
     try{
         System.out.print("first");
         ConnectionFactory myFactory = ConnectionFactory.getFactory();
         Connection conn = myFactory.getConnection();
         int i = 0;


         PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM WORKLOAD WHERE datestart LIKE '? %'");
         PreparedStatement pstmtMember = conn.prepareStatement("SELECT * FROM MEMBER WHERE memberid = ? and deletestatus = 0");
         PreparedStatement pstmtLeader = conn.prepareStatement("SELECT * FROM LEADER WHERE leaderid = ? and deletestatus = 0");
         pstmt.setString(i++, startdate);

         ResultSet rs = pstmt.executeQuery();


         workList = new ArrayList<Workload>();

我的代码问题是,一旦到达 pstmt.setString 部分,它就会“消失”。我放一个LIKE'的原因是什么?%' 是因为我只需要从查询中获取日期。不是整个时间戳。基本上它忽略了像“2012-04-05”这样的日期之后会发生什么。

4

1 回答 1

1

你不能把单引号放在它周围,你只能对待 ? 就像它是一个写在过程中的变量

Like '@yourVar %' 

这相当于你写的。

仅当日期存储在字符字段中时,以下内容才有效

String startDateWithPercent = startdate + " %"    
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM WORKLOAD WHERE datestart LIKE ?");
pstmt.setString(i++, startDateWithPercent);

如果数据库中 datestart 上的数据类型是 datetime,您将需要针对您的数据库平台(这是 sql server)执行类似的操作。只替换那个单独的 prepareStatement 行。

PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM WORKLOAD WHERE CONVERT(datestart,DATE) LIKE ?");
于 2012-05-11T01:32:12.003 回答