Spring JDBC

2014-11-24 00:07:53 · 作者: · 浏览: 0

最基础的数据库连接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包:

\

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

将JdbcTemplate类作为一个普通Bean交给Spring的IOC容器管理,就可以直接得到该对象的实例进行各种数据库操作(增加、修改、查询和删除)。
< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+MS7KudPDSmRiY1RlbXBsYXRlvfjQ0Mr9vt23w87Ko7ogPC9wPgo8cD6z9cq8u69KZGJjVGVtcGxhdGUgPGJyPgqz9cq8u69KZGJjVGVtcGxhdGW63Mjd0tejrNa70OjSqs/yy/y1xLm51Oy3vbeotKvI68v8y/nKudPDtcREYXRhU291cmNlseO/ydLUoaPI57n7yrnTw0pha2FydGEgQ29tbW9ucyBEQkNQo6zEx8O0s/XKvLuvtPrC68jnz8LL+cq+o7ogPGJyPgo8L3A+CgoKCjx0YWJsZT4KPHRib2R5Pgo8dHI+Cjx0ZCBjbGFzcz0="number"> 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当中:

view source print
01
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
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
  
   >
		 List
   
    > 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)); } }
   
  

运行结果: \


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
  
     users=jt.query(sql, map);
		   for(User u:users){
			   System.out.println(u.getId()+"=="+u.getName()+u.getPass()+"=="+u.getSex()+"=="+u.getAge());
		   }
}
  


多条数据查询 n  nブ 抓z  Z  贶{m6       jc    ^ . 队 1  诃 店尧贶z6      椁枝y于  晟u zjej锥 4 诤廿1  诃 店尧贶{       j  6 4 vJ j鼎z撰J q洫  g 川悍 x衅  j鼎z撰J q js擘   霁jg 川悍1  诃 店尧贶z6    妲> z J j鼎z撰J q妗 JavaBean对象,通过JavaBean对象属性来决定命名参数的值。