Java按名字set jdbc参数类

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.....


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值