From SQL to Java String and Back
Published: Jun 21, 2019
Updated: May 3, 2021
Updated: May 3, 2021
Manually converting SQL to a Java string, or vice versa, isn’t bad if it’s only a few lines. But when your query is hundreds of lines, that’s no fun. So I wrote Bash scripts to do the heavy lifting. Each script is below, followed by an example usage.
From SQL to Java string #
#!/bin/bash
file="$1"
last_line=$([ -f "$file" ] && wc -l < "$file" | tr -d ' ')
current_line=0
if [ ! -f "$file" ]; then
echo "The specified file does not exist"
exit 1
fi
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
current_line=$(($current_line + 1))
# replace all occurrences of " with \"
line="$(echo "$line" | sed 's#\"#\\\"#g')"
if [[ $current_line -ne $last_line ]]; then
# if not last line, add open/close ", then +
echo "\"$line\" +"
else
# if last line, only add open/close "
echo "\"$line\""
fi
done < "$file"
$ cat file.sql
select 1 as "alias"
from dual
where 1=1
$ ./from_sql_to_java_string.bash file.sql
"select 1 as \"alias\"" +
"from dual" +
"where 1=1"
From Java string to SQL #
#!/bin/bash
file="$1"
if [ ! -f "$file" ]; then
echo "The specified file does not exist"
exit 1
fi
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
# delete first occurrence of +
line="$(echo "$line" | sed 's#\+##')"
# delete first occurrence of "
line="$(echo "$line" | sed 's#\"##')"
# delete last occurrence of "
line="$(echo "$line" | rev | sed 's#\"##' | rev)"
# replace all occurrences of \" with "
line="$(echo "$line" | sed 's#\\\"#\"#g')"
echo "$line"
done < "$file"
$ cat file.java
"select 1 as \"alias\"" +
"from dual" +
"where 1=1"
$ ./from_java_string_to_sql.bash file.java
select 1 as "alias"
from dual
where 1=1