现在很多项目都是使用 Hibernate 或 mybatis 框架操作数据库,不过一些老项目很多还是使用的 jdbcTemplate 来操作数据库。每个框架有每个框架的优缺点,不做点评,下面看看 jdbcTemplate 的常用功能。
增删改数据
增删改数据都是用的同样的方法
1、插入一行数据
//插入一条数据
String sql="insert into userinfo(userName,sex,age,addr,tel) values (?,?,?,?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"xiaoming","男", 18, "湖北武汉", 66667777});
2、插入多行数据(批量插入)
//批量插入
String sql="insert into userinfo(userName,sex,age,addr,tel) values (?,?,?,?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"admin","男", 25, "江苏南京", 11111111});
batchArgs.add(new Object[]{"lily","女", 20, "江西南昌", 888888888});
batchArgs.add(new Object[]{"john","男", 21, "福建福州", 66666666});
jdbcTemplate.batchUpdate(sql, batchArgs);
3、更新一行数据
跟插入一行数据一样,只是改一下 sql 就行了
//更新一行数据,其实这里不一定更新一行数据,主要取决于 where 后面的条件了,符合条件的数据都会被更新
String sql="update userinfo set age=? where userName=?";
int count= jdbcTemplate.update(sql, new Object[]{20, "xiaoming"});
System.out.println(count);
4、更新多行数据(根据不同的条件)
//批量
String sql="update userinfo set age=? where sex=?";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{20,"男"});
batchArgs.add(new Object[]{18,"女"});
int[] count = jdbcTemplate.batchUpdate(sql, batchArgs);
//这个 count 数组存储的是根据各条件所更新的数据条数
5、删除数据
//删除一条数据(根据 where 也可以删除多条数据)
String sql="delete from userinfo where uid = 1)";
int count= jdbcTemplate.update(sql);
System.out.println(count);
//批量删除
String sql="delete from userinfo where userName=? and sex=?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"admin", "男"});
batchArgs.add(new Object[]{"xiaoyue", "女"});
int[] count = jdbcTemplate.batchUpdate(sql, batchArgs);
//上面这段批量删除执行时报错了,可能删除不能使用这个方法?有知道原因的朋友麻烦留言指点指点
查询数据
1、查询一个数据
String sql="select count(*) from userinfo";
int num = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(num);
String sql2="select userName from userinfo where uid=1";
//查到的数据是什么类型,就用什么类型变量接收
String name = jdbcTemplate.queryForObject(sql2, String.class);
System.out.println(name);
2、查询一行数据(一个对象)
//查询一个对象 a
String sql1="select * from userinfo where uid=?";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
User user= jdbcTemplate.queryForObject(sql1, rowMapper,2);
System.out.println(user);
//查询一个对象 b 同 a,比 a 灵活
String sql="select * from userinfo where uid=1";
User u = jdbcTemplate.queryForObject(sql, new RowMapper<User>(){
public User mapRow(ResultSet rs, int arg1) throws SQLException {
// TODO Auto-generated method stub
User user = new User();
user.setUid(rs.getInt("uid"));
user.setUserName(rs.getString("userName"));
user.setSex(rs.getString("sex"));
return user;
}
});
System.out.println(u);
// c ,该方法返回一个Map<String, Object>,键是该表的列名,值是该列对应的数据
//该方法适用于该表没有于之映射的实体类的情况,取值相对麻烦
String sql = "select * from userinfo where uid = ?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql, new Object[]{1});
Set<String> keyset = map.keySet();
Iterator<String> it = keyset.iterator();
while(it.hasNext()){
Object key = it.next();
System.out.println(key + "====" + map.get(key));
}
3、查询多行数据(对象)
//查询多个对象 a
String sql="select uid,userName,sex,age,addr,tel from userinfo";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
List<User> users= jdbcTemplate.query(sql, rowMapper);
for (User user : users) {
System.out.println(user);
}
//查询多个对象 b 同 a,比 a 灵活
String sql = "select * from userinfo where sex = ?";
List<User> list = new ArrayList<User>();
Object[] param = {"男"};
list = jdbcTemplate.query(sql, param, new RowMapper<User>(){
public User mapRow(ResultSet rs, int arg1) throws SQLException {
// TODO Auto-generated method stub
User u = new User();
u.setUid(rs.getInt("uid"));
u.setUserName(rs.getString("userName"));
return u;
}
});
//for(User u: list){
// System.out.println(u); //获得整个对象
//}
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i).getUid()); //获得该对象的某个属性
}
// c ,该方法返回 List<Map<String, Object>>,键为该表的相应列名,值为对应列的数据。
//该方法适用于该表没有与之映射的实体类的情况,取数据相对麻烦
String sql = "select * from userinfo where sex = ?";
List list = jdbcTemplate.queryForList(sql, new Object[]{"女"});
for(int i = 0; i < list.size(); i++) {
Map map = (Map) list.get(i);
Set keyset = map.keySet();
Iterator it = keyset.iterator();
while(it.hasNext()){
Object key = it.next();
System.out.println(key + "====" + map.get(key));
}
}
jdbcTemplate 的用法还是比较方便、简单。以上用法仅供参考!