Skip to content

Instantly share code, notes, and snippets.

@isa
Created March 20, 2011 21:47
Show Gist options
  • Save isa/878708 to your computer and use it in GitHub Desktop.
Save isa/878708 to your computer and use it in GitHub Desktop.
Demonstrates how you can do multi-line string literals in java.. It's very good especially for unit-testing.
// More info: http://blog.efftinge.de/2008/10/multi-line-string-literals-in-java.html
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MultilineStringDemo {
public static String S() {
StackTraceElement element = new RuntimeException().getStackTrace()[1];
String name = element.getClassName().replace('.', '/') + ".java";
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
String s = convertStreamToString(in, element.getLineNumber());
return s.substring(s.indexOf("/*") + 2, s.indexOf("*/"));
}
private static String convertStreamToString(InputStream is, int lineNum) {
/*
* To convert the InputStream to String we use the
* BufferedReader.readLine() method. We iterate until the BufferedReader
* return null which means there's no more data to read. Each line will
* appended to a StringBuilder and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
int i = 1;
try {
while ((line = reader.readLine()) != null) {
if (i++ >= lineNum) {
sb.append(line + "\n");
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(S(/*
<?xml version="1.0"?>
<root>
<something />
</root>
*/));
}
}
@drinkjava2
Copy link

There is another example use similar way, and to make it run on product server, copy source code to class path and change to ".sql" suffix:
https://github.com/drinkjava2/jSqlBox/blob/master/jsqlbox/src/test/java/test/examples/multipleLineSQL/SqlTemplateDemo.java
`
public class SqlTemplateDemo extends TestBase {

//@formatter:off	
public static class InsertUser extends SqlTemplate {
	public InsertUser(Object name, Object address, Object age){ 
	/* insert into 
	   users 
	   (username, address, age) */ empty(name,address,age);
	/* values  (?,?,?)*/ 
	}
}

public static class FindUsers extends SqlTemplate  {
	public FindUsers(Object name, Object age){ 
	/* select count(*) 
	   from
	   users
	  where */
	/* username=? */empty(name); 
	/* and age>? */empty(age);
	/* order by username */  
	}
}

public static class GetUserCount extends SqlTemplate  {    
    /* select count(*) 
       from users  */    
}   

public static class SqlTemplateEndTag{}

@Test
public void doTest() { 
	Dao.getDefaultContext().setShowSql(true);
	Dao.executeInsert(new InsertUser("Tom","BeiJing",10).toString());
	Dao.executeInsert(new InsertUser("Sam","ShangHai",20).toString());
	Assert.assertEquals((Integer) 1,  Dao.queryForInteger(new FindUsers("Sam",15).toString()));
	Assert.assertEquals((Integer) 2,  Dao.queryForInteger(new GetUserCount().toString())); 
} 	

}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment