MySQL Query基于Java中的用户输入

时间:2014-08-19 00:41:13

标签: java mysql sql user-input

我是SQL和Java的新手,无法找到解决问题的方法。 (最接近的事:MySQL query based on user input) 所以我有一个充满节目/事件的数据库,我希望用户“搜索”某个事件或节目。 用户将输入show / event的名称到GUI,我希望查询返回与用户输入相关的数据。

例如:

用户正在搜索艺术家Zedd;

searchSet = statement.executeQuery("SELECT eventname,date FROM shows WHERE artist LIKE      'zedd' ");

查询是固定的,可以修改查询以搜索用户输入的内容吗?

类似的东西:

String artist = "zeppelin"
searchSet = statement.executeQuery("SELECT eventname,date FROM shows WHERE artist LIKE "artist" ");

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

你应该仔细检查你的节目第二栏。我不确定您是否可以使用名为date的列。无论如何,你当然应该使用PreparedStatement之类的东西,

String sql = "SELECT eventname, eventdate FROM shows WHERE artist LIKE ?";
PreparedStatement ps = null;
ResultSet rs = null;

try {
  ps = conn.prepareStatement(sql);
  ps.setString(1, artist);
  rs = ps.executeQuery();
  while (rs.next()) {
    String eventName = rs.getString("eventname");
    Date eventDate = rs.getDate("eventdate");
    // Use your columns in your row here.
  }
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (rs != null) {
    try {
      rs.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
  if (ps != null) {
    try {
      ps.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}

答案 1 :(得分:0)

这将是这样的:

String artist = "zeppelin"
searchSet = statement.executeQuery("SELECT eventname, date FROM shows WHERE artist LIKE '%" + artist + "%'");

请注意sql通配符字符串'%'

答案 2 :(得分:0)

按照正常的SQL,如果是

,则语句可以正常工作
String artist = "'%zeppelin%'";
searchSet = statement.executeQuery("SELECT eventname,date FROM shows WHERE artist LIKE " +  artist);

字符串需要与%保持一致,并且还要引用。

但是看看preparedStement,它有分别设置每个参数并避免SQL注入的方法。