來源:賈繼康 發(fā)布時間:2018-11-03 17:06:03 閱讀量:1137
文章目錄
捕獲數(shù)據(jù)庫未查到數(shù)據(jù)異常處理
前言
準(zhǔn)備工作
思路分析
流程圖分析
代碼分析
說明
捕獲數(shù)據(jù)庫未查到數(shù)據(jù)異常處理
前言
當(dāng)用戶查數(shù)據(jù)庫中的表單以此驗(yàn)證表單中是否和即將要插入的數(shù)據(jù)重復(fù),捕獲重復(fù)的數(shù)據(jù)以此來統(tǒng)計重復(fù)數(shù)據(jù)的個數(shù)。
此次博主要做的就是進(jìn)行分析獲取數(shù)據(jù)庫中的數(shù)據(jù)查重,捕獲異常(自定義異常譬如:將重復(fù)的數(shù)據(jù)作為異常處理),分析這個過程。
準(zhǔn)備工作
使用的數(shù)據(jù)庫:mysql
假設(shè)表單名是:user_list.jsp
表單結(jié)構(gòu)如下所示:
思路分析
連接數(shù)據(jù)庫
進(jìn)行查表單操作
判斷自定義異常
進(jìn)行統(tǒng)計異常(這里博主要是統(tǒng)計重復(fù)的數(shù)據(jù)的條數(shù))
關(guān)閉數(shù)據(jù)庫
流程圖分析
代碼分析
連接數(shù)據(jù)庫
boolean ok=false; //成功操作則此標(biāo)志轉(zhuǎn)為true
//用于記錄查詢電話號碼是否已經(jīng)被用過
String s_id="",s_user_name="";
//下面使用JNDI數(shù)據(jù)庫連接池連接到MySQL服務(wù)器
Connection my_con=null;
try
{
String my_dbdriver=com_station_datebase_driver; //MYSQL 5.0 用的JDBC驅(qū)動
String my_url=com_station_datebase_url; //MYSQL數(shù)據(jù)庫名為dqz_mysql_test
String my_username=com_station_datebase_user; //數(shù)據(jù)庫管理用戶
String my_password=com_station_datebase_password; //數(shù)據(jù)庫管理密碼
Class.forName(my_dbdriver); //裝載驅(qū)動程序
my_con=DriverManager.getConnection(my_url,my_username,my_password); //連接數(shù)據(jù)庫
//建立遠(yuǎn)程視圖
Statement my_stmt=my_con.createStatement();
err_code="0x01"; //成功執(zhí)行到獲取了遠(yuǎn)程視圖
String my_sql;
//注意:因?yàn)镾QL中規(guī)定字符串值(String變量或字符串常量)必須用單引號''括起來,
//所以下面的jsp程序中在SQL語句中傳遞的字符串不能使用雙引號,而用了單引號。
//發(fā)送并執(zhí)行SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
以上是連接數(shù)據(jù)庫主要核心代碼示例
查詢語句
// 查詢此用戶名稱是否存在
my_sql="select id from user_list where user_name='"+in_user_name+"' limit 0,1";
//調(diào)試
//System.out.println("my_sql="+my_sql);
ResultSet my_rs=my_stmt.executeQuery(my_sql); //執(zhí)行查詢
err_code="0x02"; //成功執(zhí)行了查詢語句
ok=my_rs.next();
//System.out.println("ok="+ok);
1
2
3
4
5
6
7
8
9
10
11
以上代碼就是進(jìn)行數(shù)據(jù)庫查找語句的操作。
判別存在重復(fù)數(shù)據(jù)與否
if(ok)
{
my_rs.close(); //關(guān)閉結(jié)果集
err_code="0x03_user_name"; //成功讀取了結(jié)果集
throw new Exception("『back::_self』用戶名稱【"+in_user_name+"】已經(jīng)被序號注冊使用,請查證后重新進(jìn)行用戶注冊!");
// 統(tǒng)計重復(fù)數(shù)據(jù)的個數(shù)
}
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+"')";
//調(diào)試
//System.out.println("my_sql="+my_sql);
my_stmt.executeUpdate(my_sql); //執(zhí)行插入語句
err_code="0x06"; //成功執(zhí)行了插入語句
//寫入管理員日志
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); //執(zhí)行插入語句
err_code="0x07"; //成功執(zhí)行了插入語句
//處理成功
ok=true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
以上的代碼是本文要說明的核心,在下面就是進(jìn)行一個判斷,重點(diǎn)是在為符合查重條件時就統(tǒng)計重復(fù)數(shù)據(jù)的個數(shù),之前老師一直說如果不符合條件就拋出異常呀,老實(shí)說,我聽懂老師要表達(dá)的意思,但是我不理解老師想要實(shí)現(xiàn)的方法是怎樣的,什么是拋出異常呀?正如同下面代碼就是拋出異常同時統(tǒng)計個數(shù)。
if(ok)
{
my_rs.close(); //關(guān)閉結(jié)果集
err_code="0x03_user_name"; //成功讀取了結(jié)果集
throw new Exception("『back::_self』用戶名稱【"+in_user_name+"】已經(jīng)被序號注冊使用,請查證后重新進(jìn)行用戶注冊!");
// 統(tǒng)計重復(fù)數(shù)據(jù)的個數(shù)
i++;//這里我只是做一個演示,以此來統(tǒng)計個數(shù)
}
1
2
3
4
5
6
7
8
9
而在符合條件時就執(zhí)行else{}中的插入語句代碼。
---------------------
作者:賈繼康
來源:CSDN
原文:https://blog.csdn.net/Jiajikang_jjk/article/details/83026282
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!