前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用预编译语句Statement和PreparedStatment

使用预编译语句Statement和PreparedStatment

作者头像
微醺
发布2019-01-16 17:47:09
1.5K0
发布2019-01-16 17:47:09
举报
文章被收录于专栏:有脑子的搬砖工

为什么使用预编译语句

对数据库操作,主要是对sql语句的操作。这里就用到了封装的思想,如果不把它封装成对象,每次进行操作要写好多的执行语句。我们先使用静态语句对象。这里会用到前面写到的jdbc连接数据库,用兴趣的可以去看一下。

代码语言:javascript
复制
public void saveByStatement() throws Exception {
	String sql = "insert into t_student (name,age) values ('AA',11)";
	Connection conn = JdbcUtil.getConn();//获取连接
	Statement st = conn.createStatement();//获取预编译语句
	st.executeUpdate(sql);//执行预编译语句
	JdbcUtil.close(conn,st,null);//释放资源
}
这里的sql语句是写死的,局限性比较小,如果需要换个功能,又要写新的sql语句,重复的代码比较多,我们把sql语句做成模板,只需要设置里面的参数。

public void saveByPreparedStatement()  throws Exception {
String sql = "insert into t_student (name,age) values (?,?)";//这里的问号是参数,后面会给参数进行赋值
Connection conn = JdbcUtil.getConn();//获取连接
PreparedStatement  ps = conn.prepareStatement(sql);//创建预编译语句对象
//执行之前需要给占位符设置值,这里面不是从0开始的,是从1开始的
ps.setString(1,"AA");//设置第一个?的值为AA
ps.setInt(2,12);//设置第二个?的值为12
ps.exexuteUpdate();//执行预编译语句
jdbcUtil.close(conn,ps,null);//释放资源
}  

给占位符赋值

做到这里我们可以抽取出一个方法,把sql语句和占位符参数值当成参数,当我们使用它的时候只需要传一个sql语句,占位符参数就行了。这里又遇到了一个问题,参数不固定怎么办。这里就用到不定参数的传递。原理就是一个数组,循环遍历数组里的数据,把它赋值给占位符。

代码语言:javascript
复制
public static int update(String sql, Object... params) {//sql语句和参数值
		Connection conn = null;
		PreparedStatement ps = null;//因为try只能把他两往上提升
		try {
			conn = JdbcUtil.getConn();//获取连接
			ps = conn.prepareStatement(sql);获取预编译语句对象
			// 设置占位符参数
			for (int index = 0; index < params.length; index++) {
				// setObject方法:第一个参数是第1个?,第二个参数是占位符参数值
				ps.setObject(index + 1, params[index]);
			}
			return ps.executeUpdate();//返回受影响的行数,可以依此判断是否对数据库操作成功
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			JdbcUtil.close(conn, ps, null);//关闭连接
		}
		return 0;
	}

总结

PreparedStatement相比Statement,使用更加灵活,把需要赋值的值用?代替,只需要在后面给占位符进行赋值就行了,这样逻辑跟清晰,代码复用性强。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用预编译语句
  • 给占位符赋值
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档