Я сгенерировал следующую строку в java:
select * from `levelone_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `changelang_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `leveltwo_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `levelthree_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `sequence_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `search_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W' union select * from `settings_sessions` where user_session_key='-LIi-AlyYC37HfRezq7W'
и затем преобразовал ее в оператор SQL, используя PreparedStatement
.Теперь этот SQL-запрос прекрасно работает в PHPMyAdmin и успешно выдает следующие выходные данные:
Скриншот вывода PHPMyAdmin
Но когда тот же запрос выполняется изнутри Java-программыВыдает следующее исключение:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where user_session_key='-LIi-AlyYC37HfRezq7W'' at line 1
Не совсем уверен, почему это происходит.Справка!
РЕДАКТИРОВАТЬ:
Вот код Java, который фактически генерирует вышеупомянутую строку и выполняет ее как оператор SQL.
Collection<String> activities = Utilities.AppActivities.values();
int no_of_activities = activities.size(), i=0;
query = "";
for(String activity: activities) {
if(i < no_of_activities-1) {
query += "select * from `" + activity + "` where user_session_key='" + session_key + "' union ";
}
else {
query += "select * from `" + activity + "` where user_session_key='" + session_key + "'";
}
i++;
}
System.out.println(query);
stmt = con.prepareStatement(query);
rs = stmt.executeQuery();
duration = 0;
while(rs.next()) {
duration += rs.getInt("duration");
}