通过jsp直接操作数据库

在数据库中存储有证书和由证书解析出来的主题。但是在程序运行一段时间之后,发现不能兼容某些特别格式的证书。所以就修改了证书的验证方式。但是对于已经存储在数据库中的数据,就需要我们手动提取出证书,然后按照新的解析方式解析出主题后,再将其存储在数据库中。


然而因为这是已经上线正在使用的系统,而实施人员又不懂逻辑。写成一个java类,手动调用太麻烦,所以就考虑将这些逻辑全部写在jsp中,然后直接访问一下这个jsp页面,就会自动调用这些代码执行。


jsp开头文件是:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

引入单个包:

<%@ page import="java.sql.*" %>

引入多个包:与单个包一样,只是用都好隔开就好

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>

或是单独一次import一个包也可:

<%@page import="java.util.Date"%>
<%@page import="java.text.DateFormat"%>




以下是页面操作的完整代码:

<%@page import="java.sql.*" %>
<%@page import="java.util.Date"%>
<%@page import="java.text.DateFormat"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="com.koal.cas.util.CertUtil"%>
<%@page import="com.koal.cas.util.x509.CommonCertificate"%>
<%@page import="com.koal.cas.cert.CertFormat"%>
<%@page import="com.koal.cas.entity.table.EntityCA"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

<%

boolean allUpdateResult = true;
Connection conn = null;
//用于查询
Statement stmtQuery = null;
//用于修改,查询和修改不要混用一个Statement。
Statement stmtUpdate = null;
ResultSet rs = null;

try{
    Class.forName("com.kingbase.Driver").newInstance();

    //首先修改这里的url,user,password
    String url = "jdbc:kingbase://127.0.0.1:54321/ksso_prt";
    String user = "SYSTEM";
    String password = "krms";

    conn = DriverManager.getConnection(url, user, password);
    EntityCA ca = new EntityCA();
    stmtQuery = conn.createStatement();
    stmtUpdate = conn.createStatement();
    rs = stmtQuery.executeQuery("select * from TB_CA");
    while(rs.next()){
        //rs的索引是从 1 开始的,而非我们一般的从 0 开始
        String cert = rs.getString(4);

        //解析出证书的主题,调用的是java类
        String derCert=CertFormat.unFormatCert(cert);
        CommonCertificate commonCert = CertUtil.getX509Cert(derCert);
        String subject=commonCert.getSubject();
        //因为Statement是与ResultSet绑定的。如果在这里还用stmtQuery的话,就会导致 rs 重置为空,就不能在循环读取之后的数据了,所以在嵌套的时候,查询和修改要用两个Statement
        int result = stmtUpdate.executeUpdate("update TB_CA set CA_CERT_SUBJECT='" + subject + "' where CA_CERT = '" + cert + "'");
        if(result < 1){
            allUpdateResult = false;
        }
    }
}finally{

    //可能这种关闭方法大家都会嫌太麻烦,只是在正式商用的系统中,为了绝对的安全可靠而言,又是写法麻烦些也是必要的,一切以稳妥为最高目标
    try{
        if(rs != null)
            rs.close();
    }catch(Exception e){ }

    try{
        if(stmtQuery != null) 
            stmtQuery.close();
    }catch(Exception e){ }

    try{
        if(stmtUpdate != null) 
            stmtUpdate.close();
    }catch(Exception e){ }

    try{
        if(conn != null) 
            conn.close();
    }catch(Exception e){ }

}

//在网页显示一条信息,以表示执行结果
if(allUpdateResult){
    out.println("所有CA主题项修改成功!<br/>");
}else{
    out.println("CA信息修改失败!<br/>");
}

out.println("执行结束!");

%>

执行这个页面的代码方式是:访问一下该页面即可,即在浏览器中输入 http://localhost:8080/test/update.jsp 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值