SpringMVC(8):使用JDBC+springmvc 完成useDao的查询和添加用户(小实验)

18/1/9

     jdbc的操作非常简单,springmvc 最初也是直接跟jdbc打交道的。因此,我也做了个小Demo,要求如下:

1、给订单系统增加ConfigManager.java 工具类,来完成数据库配制文件的读取。该类设计为单例,考虑线程;

2、编写Junit测试类,测试查询用户和增加用户信息。

【0】文件结构:


结果是单例的ConfigManager类出现了空指针异常,我会后续跟进。


【1】新建/database.properties文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test/smbms_user
jdbc.username=root
jdbc.password=

【2】新建ConfigManager.java 文件(静态内部类的使用):

package file.InnerClass;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


public class ConfigManager {
	private static ConfigManager singleton;
	private static Properties properties;
	private ConfigManager(){
		//可以添加业务代码--整个系统运行只会执行一次的业务代码操作
		String configFile = "database.properties";
		properties = new Properties();
//		ConfigManager.class.getClassLoader();
//		InputStream is = ClassLoader.getSystemResourceAsStream(configFile);
		InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
		try {
			properties.load(is);
			is.close();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	
	//Inner class
	public static class ConfigManagerHelper{
		private static final ConfigManager INSTANCE = new ConfigManager();
	}
	
	public static ConfigManager getInstance(){
		singleton = ConfigManagerHelper.INSTANCE;
		return singleton;
	}
	
	public static String getValue(String key){
		//API
		return properties.getProperty(key);
	}
}

【3】新建BaseDao.java文件:

package file.InnerClass;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.smbms.entities.User;

public class BaseDao {
	public static Connection getConnection(){
		Connection connection = null;
		ConfigManager.getInstance();
		String driver = ConfigManager.getValue("driver");
		ConfigManager.getInstance();
		String url = ConfigManager.getValue("url");
		ConfigManager.getInstance();
		String username = ConfigManager.getValue("username");
		ConfigManager.getInstance();
		String password = ConfigManager.getValue("password");
		try{
			Class.forName(driver);
			connection = DriverManager.getConnection(url,username,password);
			
		}catch(Exception e){
			e.getMessage();
		}
		return connection;
	}
	
	//连接得到statement
	public static Statement getStatement(Connection conn) throws SQLException{
		return conn.createStatement();
	}

	//返回一个user对象
	public static ArrayList<User> getUseList(ResultSet rs) throws SQLException{
		ArrayList<User> userList = new ArrayList<User>();
		User user = new User();
		while(rs.next()){
			user.setId(rs.getInt(0));
			user.setUserCode(rs.getString(1));
			user.setUserName(rs.getString(2));
			user.setUserPassword(rs.getString(3));
			user.setGender(rs.getInt(4));
			user.setBirthday(rs.getDate(5));
			user.setPhone(rs.getNString(6));
			user.setAddress(rs.getNString(7));
			user.setUserRole(rs.getInt(8));
			user.setCreatedBy(rs.getInt(9));
			user.setCreationDate(rs.getDate(10));
			userList.add(user);
		}
		return userList;
	}
	
	//添加一个user对象
	public static boolean addUser(String sql){
		boolean result =false;
		try {
			BaseDao.getConnection().createStatement().executeQuery(sql);
			result = true;
		} catch (SQLException e) {
			result =false;
			e.printStackTrace();
		}
		return result;
	}
}

【4】新建UserDao.java 文件:

package com.smbms.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.smbms.entities.User;

import file.InnerClass.BaseDao;

public  class UserDao {
	public static ArrayList<User> allUserShow() throws SQLException{
		String sql = "select * from smbms_user";
//		ArrayList<User> allUser = new ArrayList<User>();
		System.out.println(sql);
		ResultSet rs = BaseDao.getConnection().createStatement().executeQuery(sql);
		return BaseDao.getUseList(rs);
	}
	
	public static boolean addNewUser(User user){
		boolean result =false;
		String sql = "insert into smbms_user"
				+ "(userCode,userName,userPassword,gender,birthday,phone,address,userRole,createBy,createDate)"
				+ "values"
				+ "("+user.getUserCode()+","+user.getUserName()+","+
				user.getUserPassword()+","+user.getGender()+","+
				user.getBirthday()+","+user.getPhone()+","+user.getAddress()+","+
				user.getUserRole()+","+user.getCreatedBy()+","+user.getCreationDate()+");";
		System.out.println("***"+sql);
		result = BaseDao.addUser(sql);
		return result;
	}
}

解释:其实就是在BaseDao的基础上,再进行了一次封装。


【5】写个单元测试类:

package com.smbms.dao;

import java.sql.SQLException;
import java.util.ArrayList;

import org.junit.Test;

import com.smbms.entities.User;

public class UserDaoTest {

	@Test
	public void test() throws SQLException {
		UserDao userDao = new UserDao();
		User user = new User();
		user.setUserName("leilaohu");
		System.out.println("addusertest result: "+userDao.addNewUser(user));
		System.out.println("-==============");
		ArrayList<User> userList = new ArrayList<User>();
		userList = userDao.allUserShow();
		for(User u:userList){
			System.out.println(u.toString());
		}
		
	}

}


由于一个Bug还没解决,所以,之后会继续更新。

Log如下:

java.lang.NullPointerException
	at file.InnerClass.BaseDao.addUser(BaseDao.java:63)
	at com.smbms.dao.UserDao.addNewUser(UserDao.java:30)
	at com.smbms.dao.UserDaoTest.test(UserDaoTest.java:17)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值