Java按名字set jdbc参数类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vcshcn/article/details/48243357

PreparedStatement只能按?设置参数,简单写了一个按名字设置参数的类,实际用了PreparedStatement,简单写了,可以扩充,没有测试

public class NamedStatement {

	private Pattern NAME_PARSE = Pattern.compile("(:\\w+)");

	
	private PreparedStatement statement;
	
	private String sql;
	private Map<String, Integer> names;
	
	public NamedStatement(Connection conn, String sql) throws SQLException {
		parse(sql);
		statement = conn.prepareStatement(this.sql);
	}
	
	public void setString(String name, String value) throws SQLException {
		statement.setString(names.get(name), value);
	}

	public void setInt(String name, int value) throws SQLException {
		statement.setInt(names.get(name), value);
	}

	.....
	.....
	
	public void close() throws SQLException {
		statement.close();
		statement = null;
	}
	
	private void parse(String query) {
		int index = 1;
		int pos = 0;
		StringBuilder sb = new StringBuilder();
		
		Matcher matcher = NAME_PARSE.matcher(query);
		while (matcher.find()) {
			String s = matcher.group();
			int start = matcher.start();
			int end = matcher.end();
			
			sb.append(query.substring(pos, start));
			sb.append('?');
			pos = end;
			names.put(s, index++);
		}
		
		sb.append(query.substring(pos, query.length()));
		this.sql = sb.toString();
	}
}


这样使用

String sql = "select * from  table where a=:a and b=:param and c=5

NamedStatement s = new NamedStatement (conn, sql);

s.....



猜你喜欢

转载自blog.csdn.net/vcshcn/article/details/48243357