昨天刚刚看了JDBC的连接,因为毕设的后端需要用数据库,想试一下如果使用spring里面的容器来管理JDBC会是怎样的效果,也算是对之前的spring学习一个小应用。

首先在lib文件夹下放上spring和JDBC需要的包:

spring每几个小时检验一次程序 spring试验_spring每几个小时检验一次程序


顺带贴上项目文件的结构,其中Add文件用于添加,Delete用于删除,getConnection用于建立JDBC连接:

spring每几个小时检验一次程序 spring试验_sql_02

首先编写建立连接的程序,这个小实验的关键,是让JDBC的关键对象与spring的容器结合,我的设想是因为增删改查都是需要用到connection对象,所以可以将这个对象作为bean,通过注入其他bean的方式,来实现容器的管理,所以获取连接的代码就可以写成下面的样子:

package com.getJDBC;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;

public class getConnection {
	Connection conn;
	public void getConnection() throws ClassNotFoundException, SQLException {
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url = "jdbc:mysql://localhost:3306/db_database10?serverTimezone=GMT%2B8";
		String username = "root";
		String password = "04050907";
		conn = DriverManager.getConnection(url,username,password);
		System.out.println("getting successfully!");
	}
	public void get() throws ClassNotFoundException, SQLException {
	
	}
}

这个连接类是其余类的基础,实例化这个类,再注入到其它的bean里面。
在此基础上就可以编写ADD类了,先上代码:

package com.getJDBC;

import java.sql.PreparedStatement;
import java.sql.SQLException;


public class Add {
	private getConnection con;
	public void setConn(getConnection conn) {
		this.con=conn;
	}
	public void addBook() throws SQLException, ClassNotFoundException {
		String sql = "insert into tb_books(name,price,bookCount,author) values(?,?,?,?)";
		con.getConnection();
		PreparedStatement ps = con.conn.prepareStatement(sql);
		ps.setString(1, "缘之空");
		ps.setInt(2,24);
		ps.setInt(3,23);
		ps.setString(4,"轻之文库");
		int row = ps.executeUpdate();
		ps.close();
		con.conn.close();
		System.out.println("Add successfully!");
	}
}

编写好注入需要的setter方法,之后就可以写添加信息的方法了,这个方法是按照JDBC的要求直接写的。编写完成后一直报错,顺了半天,发现错误在于注入的对象,整个的逻辑是连接对象注入到添加对象,但是一开始我们的连接对象里面的JDBC连接就是个对象,并不是一个一般的变量,所以不能够直接初始化,相当于必须调用一遍连接对象的getConnection方法才能给这个对象初始化,修改了这一点整个程序就可以运行了。删除的代码和这个类似,直接贴代码:

package com.getJDBC;

import java.sql.PreparedStatement;
import java.sql.SQLException;


public class Delete {
	private getConnection con;
	public void setConn(getConnection conn) {
		this.con=conn;
	}
	public void deleteBook() throws SQLException, ClassNotFoundException {
		String sql="delete from tb_books where name=?";
		con.getConnection();
		PreparedStatement ps=con.conn.prepareStatement(sql);
		ps.setString(1,"缘之空" );
		ps.executeUpdate();
		ps.close();
		con.conn.close();
		System.out.println("Delete successfully!");
	}
}

对应的配置文件applicationContext.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <!-- 由 Spring容器创建该类的实例对象 -->
    <bean id="conn" class="com.getJDBC.getConnection" />
    <bean id="add" class="com.getJDBC.Add" >
    	<property name="Conn" ref="conn"/>
    </bean>
    <bean id="del" class="com.getJDBC.Delete" >
    	<property name="Conn" ref="conn"/>
    </bean>
</beans>

之后利用JUnit编写测试代码,首先创建对应的数据库,数据库初试状态如下:

spring每几个小时检验一次程序 spring试验_spring_03


添加的测试代码如下:

package com.getJDBC;

import java.sql.SQLException;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class test {

	@Test
	void test() throws ClassNotFoundException, SQLException{
		// 定义Spring配置文件的路径
        String xmlPath = "com/getJDBC/applicationContext.xml";
        // 初始化Spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                xmlPath);
		Add add = (Add) applicationContext.getBean("add");
        add.addBook();
	}

}

运行后控制台信息和数据库内变化如下,图书信息已经成功添加到数据库中:

spring每几个小时检验一次程序 spring试验_spring_04


spring每几个小时检验一次程序 spring试验_sql_05


之后再使用删除的junit程序,代码如下:

package com.getJDBC;

import java.sql.SQLException;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class test {

	@Test
	void test() throws ClassNotFoundException, SQLException{
		// 定义Spring配置文件的路径
        String xmlPath = "com/getJDBC/applicationContext.xml";
        // 初始化Spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                xmlPath);
        Delete del = (Delete) applicationContext.getBean("del");
        del.deleteBook();
	}

}

运行结果和数据库的变化如下,刚才添加的图书信息已经被成功删除:

spring每几个小时检验一次程序 spring试验_sql_06


spring每几个小时检验一次程序 spring试验_spring_07


至此,这个利用spring和JDBC结合的小实验算是成功了,但是spring本身就提供了用于访问数据库的接口,采用这种办法虽然可行,但是有些多余,也算是对前面spring知识的小应用,明天继续开spring的JDBC操作。