【mysql+java】捕获数据库中未查到数据进行异常处理
捕获数据库未查到数据异常处理
前言
当用户查数据库中的表单以此验证表单中是否和即将要插入的数据重复,捕获重复的数据以此来统计重复数据的个数。
此次博主要做的就是进行分析获取数据库中的数据查重,捕获异常(自定义异常譬如:将重复的数据作为异常处理),分析这个过程。
准备工作
- 使用的数据库:mysql
- 假设表单名是:
user_list.jsp
- 表单结构如下所示:
思路分析
- 连接数据库
- 进行查表单操作
- 判断自定义异常
- 进行统计异常(这里博主要是统计重复的数据的条数)
- 关闭数据库
流程图分析
代码分析
- 连接数据库
boolean ok=false; //成功操作则此标志转为true
//用于记录查询电话号码是否已经被用过
String s_id="",s_user_name="";
//下面使用JNDI数据库连接池连接到MySQL服务器
Connection my_con=null;
try
{
String my_dbdriver=com_station_datebase_driver; //MYSQL 5.0 用的JDBC驱动
String my_url=com_station_datebase_url; //MYSQL数据库名为dqz_mysql_test
String my_username=com_station_datebase_user; //数据库管理用户
String my_password=com_station_datebase_password; //数据库管理密码
Class.forName(my_dbdriver); //装载驱动程序
my_con=DriverManager.getConnection(my_url,my_username,my_password); //连接数据库
//建立远程视图
Statement my_stmt=my_con.createStatement();
err_code="0x01"; //成功执行到获取了远程视图
String my_sql;
//注意:因为SQL中规定字符串值(String变量或字符串常量)必须用单引号''括起来,
//所以下面的jsp程序中在SQL语句中传递的字符串不能使用双引号,而用了单引号。
//发送并执行SQL
以上是连接数据库主要核心代码示例
- 查询语句
// 查询此用户名称是否存在
my_sql="select id from user_list where user_name='"+in_user_name+"' limit 0,1";
//调试
//System.out.println("my_sql="+my_sql);
ResultSet my_rs=my_stmt.executeQuery(my_sql); //执行查询
err_code="0x02"; //成功执行了查询语句
ok=my_rs.next();
//System.out.println("ok="+ok);
以上代码就是进行数据库查找语句的操作。
- 判别存在重复数据与否
if(ok)
{
my_rs.close(); //关闭结果集
err_code="0x03_user_name"; //成功读取了结果集
throw new Exception("『back::_self』用户名称【"+in_user_name+"】已经被序号注册使用,请查证后重新进行用户注册!");
// 统计重复数据的个数
}
else
{
// 否则可以注册
// 添加新的用户
// my_sql="insert into user_list(user_name,password,tel,email,qq,note) values('"+in_user_name+"','"+in_password+"','"+in_tel+"','"+in_email+"','"+in_qq+"','"+in_note+"')";
my_sql="insert into user_list(user_name,password,tel,email,qq,note,ssjf_id) values('"+in_user_name+"','"+in_password+"','"+in_tel+"','"+in_email+"','"+in_qq+"','"+in_note+"','"+s_ssjf_add_id2+"')";
//调试
//System.out.println("my_sql="+my_sql);
my_stmt.executeUpdate(my_sql); //执行插入语句
err_code="0x06"; //成功执行了插入语句
//写入管理员日志
String login_IP=request.getRemoteAddr(); //获取登陆用户的IP地址
dqz_time t=new dqz_time(); //获取登录时间戳
my_sql="insert into user_log(user_id,user_name,user_ip,log_info,type) values('"+session_user_id+"','"+session_user_name+"','"+login_IP+"','成功添加了用户【"+in_user_name+"】 ,电话号码【"+in_tel+"】','添加用户')";
my_stmt.executeUpdate(my_sql); //执行插入语句
err_code="0x07"; //成功执行了插入语句
//处理成功
ok=true;
}
以上的代码是本文要说明的核心,在下面就是进行一个判断,重点是在为符合查重条件时就统计重复数据的个数,之前老师一直说如果不符合条件就抛出异常呀,老实说,我听懂老师要表达的意思,但是我不理解老师想要实现的方法是怎样的,什么是抛出异常呀?正如同下面代码就是抛出异常同时统计个数。
if(ok)
{
my_rs.close(); //关闭结果集
err_code="0x03_user_name"; //成功读取了结果集
throw new Exception("『back::_self』用户名称【"+in_user_name+"】已经被序号注册使用,请查证后重新进行用户注册!");
// 统计重复数据的个数
i++;//这里我只是做一个演示,以此来统计个数
}
而在符合条件时就执行else{}中的插入语句代码
。
说明
此篇博文重点是在理解捕获异常,统计异常处理,对于用户来说,当然是看到最直观的前台页面显示异常的详细信息,而此次针对博主的需求是在理解这个捕获异常的思路,实现统计异常个数方法。