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

被折叠的 条评论
为什么被折叠?



