Skip to content

Instantly share code, notes, and snippets.

@isa
Created March 20, 2011 21:47
Show Gist options
  • Select an option

  • Save isa/878708 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown

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