我是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" ");
提前感谢您的帮助!
答案 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注入的方法。