通过jsp直接操作数据库

来源:互联网 发布:施明德 知乎 编辑:程序博客网 时间:2024/05/17 22:17

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


然而因为这是已经上线正在使用的系统,而实施人员又不懂逻辑。写成一个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 即可。

0 0
原创粉丝点击