JDBC 注册(小白起步1)

这篇博客介绍了使用Java JDBC进行用户信息注册的过程,包括对密码进行MD5加密、数据库连接(Oracle)、定义数据库操作和业务逻辑接口及其实现,以及单元测试和主函数控制台交互的详细步骤。

1.用户信息

import java.io.Serializable;

/**
 * 用户信息类 
 * 和数据库表一一对应
 * @author administrator
 *
 */
public class UserInfo implements Serializable {
	//继承序列化
	//定义属性
	private int uids;
	private String uname;
	private String upwd;
	
	//构造方法,getset
	//2个参数的构造和
	public UserInfo(String uname, String upwd) {
		super();
		this.uname = uname;
		this.upwd = upwd;
	}
	//3个参数的构造
	public UserInfo(int uids, String uname, String upwd) {
		super();
		this.uids = uids;
		this.uname = uname;
		this.upwd = upwd;
	}
	public UserInfo() {
		super();
		// TODO Auto-generated constructor stub
	}
	public int getUids() {
		return uids;
	}
	public void setUids(int uids) {
		this.uids = uids;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}

	
	
}

2.对密码进行MD5加密

import java.security.MessageDigest;

/**
 * 密码加密类
 * 代码网上自己找
 * @author administrator
 *
 */
public class PwdUtils {
		// 密钥
		private static final String KEY = "aishanfjkbakjhghs126@126.com";

		// MD5 加密算法
		public final static String calcMD5(String ss) {
		  
		   String s = ss==null ? "" : ss;
		  
		   char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
				    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
		   try {
		    byte[] strTemp = s.getBytes();
		    MessageDigest mdTemp = MessageDigest.getInstance("MD5");
		    mdTemp.update(strTemp);
		    byte[] md = mdTemp.digest();
		    int j = md.length;
		    char str[] = new char[j * 2];
		    int k = 0;
		    for (int i = 0; i < j; i++) {
		     byte byte0 = md[i];
		     str[k++] = hexDigits[byte0 >>> 4 & 0xf];
		     str[k++] = hexDigits[byte0 & 0xf];
		    }
		    return new String(str);
		   } catch (Exception e) {
		    return null;
		   }
		}

		public static String getKey() {
			return KEY;
		}
		
		

//		//測試加密算法
//		public static void main(String[] args) {
//			System.out.println(calcMD5("我愛放假"));
//			
//		}
//	

}

3.数据库连接(oracle)

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

/**
 * 数据库连接操作
 * @author administrator
 *
 */
public class BaseDao {
	/**
	 * 数据库连接字符串
	 * 127.0.0.1
	 */
	public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	/**
	 * 数据库驱动
	 */
	public static final String CLASSNAME="oracle.jdbc.driver.OracleDriver" ;
	/**
	 * 用户名
	 */
	public static final String UNAME="scott";
	/**
	 * 密码
	 */
	public static final String UPWD="admin";
	
	//获取连接的方法 接口类型的方法
	public Connection openConnections(){
		//定义数据库连接对象
		Connection conn=null;
	
		try {
			//利用反射装载驱动
			Class.forName(CLASSNAME);
			
			//获取数据库连接
			conn=DriverManager.getConnection(URL, UNAME, UPWD);
			System.out.println(" lianjie ok");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	
	
//	
//	//测试上面是否连接上
//	public static void main(String[] args) {
//		new BaseDao().openConnections();
//	}
}

4.定义数据库操作接口

import com.entity.UserInfo;

/**
 * 数据库操作接口
 * @author administrator
 *
 */
public interface UserInfoDao {
	//用户注册(添加信息)
	public boolean addUserInfo(UserInfo userinfo);
}

5.数据库操作接口的实现

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

import Utils.PwdUtils;

import com.dao.BaseDao;
import com.dao.UserInfoDao;
import com.entity.UserInfo;

/**
 * 数据库操作接口的实现类
 * @author administrator
 *
 */
public class UserInfoDaoImpl extends BaseDao implements UserInfoDao {
	//继承BaseDao,实现数据库连接
	/**
	 * 用户信息添加(插入数据)
	 */
	@Override
	public boolean addUserInfo(UserInfo userinfo) {
		// TODO Auto-generated method stub
		boolean flag=false;//标记
		
		//数据库操作任务(DML,DCL语句)
		//语句不能加; ?为占位符,代表用户不确定的输入值
		String sql="INSERT INTO userinfo VALUES(seq_userinfo_uids.nextval,?,?)";
		
		//数据库连接对象
		Connection conn=null;
		//数据库执行者(执行任务)
		PreparedStatement psmt=null;
		
		try {
			//得到数据库连接
		conn=this.openConnections();
			//得到操作对象
			psmt=conn.prepareStatement(sql);
			//处理问号 几个问号,几个set set类型为?该有的类型
			psmt.setString(1, userinfo.getUname());//用户名
			psmt.setString(2, PwdUtils.calcMD5(userinfo.getUpwd()+PwdUtils.getKey()));//密码(添加key加密的)
			
			//执行任务
			int num=psmt.executeUpdate();//增删改都用它
			if(num>0){
				//执行成功
				flag=true;
			}
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//释放资源
			try {
				psmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
		
		return flag;
	}

	
	
}

6.定义业务逻辑接口

import com.entity.UserInfo;
/**
 * 业务逻辑接口
 * @author administrator
 *
 */
public interface UserInfoBiz {
	//添加数据(注册)
	public boolean addUserInfo(UserInfo userinfo);
	
}

7.业务逻辑接口的实现

import com.biz.UserInfoBiz;
import com.dao.UserInfoDao;
import com.dao.impl.UserInfoDaoImpl;
import com.entity.UserInfo;
/**
 * 业务逻辑接口的实现类
 * @author administrator
 *
 */
public class UserInfoBizImpl implements UserInfoBiz{
	//调用Dao,得先定义
	private UserInfoDao udao;

	public UserInfoBizImpl() {
		super();
		// TODO Auto-generated constructor stub
		udao = new UserInfoDaoImpl();
	}

	@Override
	public boolean addUserInfo(UserInfo userinfo) {
		// TODO Auto-generated method stub
		return udao.addUserInfo(userinfo);
	}

}

8.单元测试类

import org.junit.Ignore;
import org.junit.Test;

import Utils.PwdUtils;

import com.dao.UserInfoDao;
import com.dao.impl.UserInfoDaoImpl;
import com.entity.UserInfo;

/**
 * 单元测试类(利用注解)
 * @author administrator
 *
 */
public class TestUserInfo {
	
	//@Test为测试注解
	//@Ignore 为忽略注解
	/**
	 * 该方法测试成功
	 */
	@Ignore
	public void addUser(){
		//面向接口编程
		UserInfoDao udao =new UserInfoDaoImpl();
		//插入数据之前   先定义插入的对象
		//2个参数的构造和3个参数的构造(重载)
		UserInfo userinfo= new UserInfo("admin", "admin");
		
		//插入上面经过处理的对象
		boolean test= udao.addUserInfo(userinfo);
		System.out.println(test);
	}
}

9.主函数控制台输入

import java.util.Scanner;

import com.biz.UserInfoBiz;
import com.biz.impl.UserInfoBizImpl;
import com.entity.UserInfo;

/**
 * 控制台测试
 * @author administrator
 *
 */
public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner input=new Scanner(System.in);
		System.out.println("xingming");
		String uname=input.next();
		
		System.out.println("mima");
		String upwd=input.next();
		
		UserInfoBiz biz=new UserInfoBizImpl();
		//将输入的信息封装成对象类型
		UserInfo userinfo=new UserInfo(uname,upwd);
		boolean test=biz.addUserInfo(userinfo);
		if(test){
		System.out.println("ok");
		}else{
			System.out.println("not ok");
		}
	}

}

具体源代码:(纯手敲的)

链接: 点击打开链接密码: fvii



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值