代码描述:把前台获取的字段作为查询条件,返回符合条件的记录。
1 package com.imooc.dao; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import com.imooc.bean.Message; 12 13 /** 14 * 处理与数据库相关的查询操作 15 * 16 */ 17 public class MessageDao { 18 public List<Message> queryMessageList(String command,String description){ 19 List<Message> messageList = new ArrayList<Message>(); 20 try { 21 Class.forName("com.mysql.jdbc.Driver"); 22 Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message", "root", "admin"); 23 // StringBuilder速度快适合单线程,StringBuffer适合多线程操作大量数据,String每次都是生成新对象,需要垃圾回收。 24 StringBuilder sb = new StringBuilder("select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 "); 25 // String sql = "select ID,COMMAND,DESCRIPTION,CONTENT from message"; 26 List<String> paramList = new ArrayList<String>(); 27 if(null != command && !"".equals(command)){ 28 sb.append(" and COMMAND=?"); 29 paramList.add(command); 30 } 31 if(null != description && !"".equals(description)){ 32 // MySQL中用%表示任意字符,用空格用于连接 33 sb.append(" and DESCRIPTION like '%' ? '%'"); 34 paramList.add(description); 35 } 36 PreparedStatement pstmt = conn.prepareStatement(sb.toString()); 37 for(int i=0;i<paramList.size();i++){ 38 // 给PreparedStatement中预执行SQL语句追加值 39 pstmt.setString(i+1, paramList.get(i)); 40 } 41 ResultSet rs = pstmt.executeQuery(); 42 while(rs.next()){ 43 Message message = new Message(); 44 messageList.add(message);// 这里messageList是个容器,只是对message的引用,所以可以提前放入容器中 45 message.setId(rs.getString("ID")); 46 message.setCommand(rs.getString("COMMAND")); 47 message.setDescription(rs.getString("DESCRIPTION")); 48 message.setContent(rs.getString("CONTENT")); 49 } 50 }catch (ClassNotFoundException e) { 51 e.printStackTrace(); 52 }catch (SQLException e) { 53 e.printStackTrace(); 54 } 55 return messageList; 56 } 57 58 } 59