Spring JDBC

最基础的数据库连接JDBC

 Connection conn=null;
	   Statement statement=null;
	   PreparedStatement ps=null;
	   ResultSet rs=null;
        try {
			// 装载数据库的驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 建立数据库连接
			 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jj","root","root");
			
			// 事务处理
			conn.setAutoCommit(false);
			// 创建Statement
			 statement=conn.createStatement();
			// 设置SQL执行的参数
			String sql="insert into user values(null,‘csdn1‘,‘csdn1‘)";
			// 执行对数据库的操作
			statement.execute(sql);
			// 处理执行结果
			// 事务处理
			conn.commit();
			// 处理执行过程中的异常
			// 释放各种资源,关闭数据库连接
			statement.close();
			conn.close();
		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			e.printStackTrace();
		}


Spring  JDBC所需要的jar包:

Spring JDBC

JDBCTemplate是Spring JDBC核心包的核心类。

将JdbcTemplate类作为一个普通Bean交给Spring的IOC容器管理,就可以直接得到该对象的实例进行各种数据库操作(增加、修改、查询和删除)。

1.使用JdbcTemplate进行数据访问: 

初始化JdbcTemplate 
初始化JdbcTemplate很容易,只需要向它的构造方法传入它所使用的DataSource便可以。如果使用Jakarta Commons DBCP,那么初始化代码如下所示:
 

1 BasicDataSource dataSource = new BasicDataSource();
2 dataSource.setDriverClassName("com.mysql.jdbc.Driver");
3 dataSource.setUrl("jdbc:mysql://localhost/mysql?characterEncoding=UTF-8");
4 dataSource.setUsername("root");
5 dataSource.setPassword("root");
6 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

也可以通过无参的构造方法构造JdbcTemplate,然后通过setDataSource(DataSource dataSource)来设置其dataSource。
上述这种方法是通过编码的方式构造JdbcTemplate,如果应用程序使用spring的IOC容器,其初始化工作便可移植到容器的配置文件applicationContext.xml当中:

01 <!-- dataSource -->
02 <bean id="dataSource"
03     class="org.apache.commons.dbcp.BasicDataSource"
04 >
05      
06     <property name="driverClassName">
07         <value>com.mysql.jdbc.Driver</value>
08     </property>
09     <property name="url" value="jdbc:mysql://localhost:3306/jj?characterEncoding=UTF-8" />
10     <property name="username" value="root" />
11     <property name="password" value="root" />

12 </bean>
13 <!-- jdbcTemplate -->
14 <bean id="jdbcTemplate"
15     class="org.springframework.jdbc.core.JdbcTemplate">
16     <property name="dataSource">
17         <ref bean="dataSource" />
18     </property>
19 </bean>

测试代码:
第一种:构建sql语句
ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext.xml");
		 JdbcTemplate jt = (JdbcTemplate) ctx.getBean("jdbcTemplate");
     	 //1.构建sql语句
		 //insert into user(name,pass) values(‘java‘,‘ym‘)
		 String sql="delete from user where id=1";
		
		 jt.execute(sql);

连接数据库后会执行我的sql语句,删除数据库里jj下的表user里面的id=1的数据。

测试代码:
第二种:构建一个带占位符的sql,添加到数据库里
	 String sql = "insert into user(name,pass,sex,age)  values(?,?,?,?)";
		 // 构建参数
		 Object[] sargs = new Object[4];
		 sargs[0] = "xx";
		 sargs[1] = "111";
		 sargs[2] = "nv";
		 sargs[3] = 12;
		 // 构建参数类型
		 int[] argsTye = new int[4];
		 argsTye[0] = Types.VARCHAR;
		 argsTye[1] = Types.VARCHAR;
		 argsTye[2] = Types.CHAR;
		 argsTye[3] = Types.INTEGER;
		
		 jt.update(sql, sargs, argsTye);

测试代码:
查询数据库里面的数据(1)
		 String sql="select *from user";
		 //返回查询List List<Map<String, Object>>
		 List<Map<String, Object>> list=jt.queryForList(sql);
		
		 for(Map map:list){
		 Set keys=map.keySet();
		 Iterator it=keys.iterator();
		     while(it.hasNext()){
		          String key=it.next().toString();
		          System.out.println(key+":"+map.get(key));
		           // System.out.println(map.get(key));
		     }
		 }

运行结果:
Spring JDBC



NamedParameterJdbcTemplate
为了解决“?”占位赋值问题,使用支持命名参数的模板类。
为每个参数定义一个名字,在SQL语句中增加 : 标示。
两种赋值方式:
Map对象赋值 
MapSqlParameterSource实现赋值
 // 占位符的替代 ,使用:id作为占位符
		// 必须使用构造函数注入DataSource
		NamedParameterJdbcTemplate njt = new NamedParameterJdbcTemplate(
				(BasicDataSource) ctx.getBean("dataSource"));
		String sql = "delete from user where id=:id";
		//1.
		Map map = new HashMap();
		map.put("id", 4);
		njt.update(sql, map);
		//2.
		/*MapSqlParameterSource mapSqlParameterSource=new  MapSqlParameterSource("id",new Integer("3"));
		 njt.update(sql, mapSqlParameterSource);*/


1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;

2)delete from user where id=:id:其中“:id”就是命名参数;

用占位符写的删除

//4.删除
		 String sql="delete from user where id=?";
		 Object[] args1=new Object[1];
		 args1[0]=5;
		 int[] argType=new int[1];
		 argType[0]=Types.INTEGER;
		 jt.update(sql, args1, argType);

3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;

//5.更新数据
		 String sql="update user set name=?  where id=?";
		 Object[] args1=new Object[2];
		 args1[0]="spring";
		 args1[1]=8;
		 int[] a=new int[2];
		 a[0]=Types.VARCHAR;
		 a[1]=Types.INTEGER;
		 jt.update(sql, args1, a);


4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;

User.java
package www.csdn.jdbc.model;

public class User {
    private  int id;
    private String name;
    private String pass;
    private String sex;
    private Integer age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
    
}


测试代码:
查询数据库里面的数据(2)
                  String sql="select * from  user"; //封装返回值 
		  RowMapper map=new  RowMapper() {
			
			// 封装为一个自定义对象
			  
			  //回调方法把结果集封装成自定义对象		  
		        @Override
		      public Object mapRow(ResultSet rs, int rownum) throws  SQLException { 
		        	User user=new User(); 
		        	//列号索引 
		        	user.setId(rs.getInt(1));
		            user.setName(rs.getString(2));
		            user.setPass(rs.getString(3));
		            user.setSex(rs.getString(4)); 
		            user.setAge(rs.getInt(5));
		            System.out.println("行号:"+rownum); 
		            return user; 
		        } 
		   };
		   //多条数据查询
		   List<User>  users=jt.query(sql, map);
		   for(User u:users){
			   System.out.println(u.getId()+"=="+u.getName()+u.getPass()+"=="+u.getSex()+"=="+u.getAge());
		   }
}


多条数据查询
Spring JDBC

5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装java.util.Map。

 

 

NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:

1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;

2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

Spring JDBC,布布扣,bubuko.com

Spring JDBC

上一篇:SQL 语法


下一篇:c# 属性