【数据采集】关于接口中遇到的问题

2018-09-17  本文已影响0人  shallwego_

一、连接SQL Server数据库

二、对JDBC执行结果的遍历与判断

--------参考 execute、executeUpdate、executeQuery三者的区别(及返回值)

1、boolean execute(String sql)

允许执行查询语句、更新语句、DDL语句。

返回值为true时,表示执行的是查询语句,可以通过getResultSet方法获取结果;返回值为false时,执行的是更新语句或DDL语句,getUpdateCount方法获取更新的记录数量。

public static void main(String[] args) {  
    Connection conn = null;  
    Statement stm = null;  
    ResultSet rs = null;  
    try {  
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
         conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Test;user=sa;password=sasa");  
         stm = conn.createStatement();  
         boolean ret = stm.execute("select * from stuinfo");  
         if(ret){  
             rs = stm.getResultSet();  
             while(rs.next()){  
                 System.out.println("姓名:"+rs.getString("stuName")+"\t年龄:"+rs.getString("stuScore"));  
             }  
         }  
         ret = stm.execute("update stuinfo set stuScore=62 where stuname='张三'");  
         int count = stm.getUpdateCount();  
         if(!ret){  
             System.out.println(count+"条数据修改成功!");  
         }  
    } catch (ClassNotFoundException e) {  
         e.printStackTrace();  
    } catch (SQLException e) {  
         e.printStackTrace();  
    }    
 }
2、int executeUpdate(String sql)

执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。

返回值是更新的记录数量。0是没有更新,大于0是更新数量。

3、ResultSet executeQuery(String sql)

执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

【execute是executeUpdate与executeQuery的综合。】

三、使用UUID生成SM4密钥

使用UUID生成SM4密钥的代码如下:

UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(0, 16)

四、SM2加密密文byte[]与String转换问题

SM2使用公钥加密后,生成byte[]类型的密文,转换为String类型并不能直接用过toString()方法,应该使用Base64编码后转为String,具体代码如下:

    byte[] encryptKey = new byte[100000];
    String encKey = "";
    try {
        encryptKey = SM2Utils.encrypt(Base64.decode(DataConstant.PUBKS.getBytes()), sm4.getSecretKey().getBytes());
        encKey = new String(Base64.encode(encryptKey));
        System.out.println("SM4加密后密钥:"+encKey);
    } catch (IOException e) {
        e.printStackTrace();
    }

解密时也应先使用Base64解码后,再使用SM2的私钥解密。

    String decKey = new String(SM2Utils.decrypt(Base64.decode(prikS.getBytes()), Base64.decode(encKey.getBytes())));

五、解析XML格式的字符串

需求为解密文件内容后,将数据封装为指定格式。

String xmlDoc=“<table><record><numsourceid>31231415</numsourceid><hospital_code>42507230900</hospital_code><update_time>2018-09-12 00:00:00.0</update_time><create_time>2018-09-12 00:00:00.0</create_time><release_time>2018-09-12 00:00:00.0</release_time><end_time>2018-09-12 00:00:00.0</end_time><ordernumtype>1</ordernumtype><is_special>1</is_special><source_status>1</source_status><is_advantage>1</is_advantage><advantage_abort_time>2018-09-12 00:00:00.0</advantage_abort_time><is_temporary>1</is_temporary><dept1id>2356</dept1id><dept1name>内科</dept1name><dept2id>11231</dept2id><dept2name>胸内科</dept2name><dept_shenkang_id>12414</dept_shenkang_id><doctorid>312313</doctorid><doctor_name>陈XX</doctor_name><doctor_level>2</doctor_level><start_date>2018-09-12 00:00:00.0</start_date><end_date>2018-09-12 00:00:00.0</end_date><schedule_status>2</schedule_status><is_changediagtag>1</is_changediagtag><visit_cost>6.00</visit_cost><schedule_update_time>2018-09-12 00:00:00.0</schedule_update_time></record></table>”

public String xmlElements(String xmlDoc) {

        StringBuffer datastr = null;
        //删除字符串中的换行符
        if (xmlDoc!=null && !xmlDoc.equals("")) {
            Pattern p = Pattern.compile("\r|\n");
            Matcher m = p.matcher(xmlDoc);
            xmlDoc = m.replaceAll("");
        }

        StringReader read = new StringReader(xmlDoc);
        //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
        InputSource source = new InputSource(read);
        //创建一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();
        try {
            //通过输入源构造一个Document
            Document doc = sb.build(source);

            //取的根元素<table>
            Element root = doc.getRootElement();

            //得到根元素所有子元素的集合<record>
            List recordList = root.getChildren();

            //获得XML中的命名空间(XML中未定义可不写)
            Namespace ns = root.getNamespace();

            datastr =new StringBuffer();
           
            for(int i=0;i<recordList.size();i++){
                Element et = (Element) recordList.get(i);//循环依次得到子元素
                //依次获取单个<record>标签
                List childElement = et.getChildren();
                //遍历<record>中子元素
                for (int j = 0; j < childElement.size(); j++) {
                    Element child = (Element)childElement.get(j);
                    String str = child.getText();
                    if(j != childElement.size()-1){
                        str += "!@!";
                    }
                    datastr.append(str);
                }
                datastr.append("^&^");
               
            }
           System.out.println(datastr);
            
        } catch (JDOMException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }    
        return datastr.toString();
    }

/*
输出结果:
31231415!@!42507230900!@!2018-09-12 00:00:00.0!@!2018-09-12 00:00:00.0!@!2018-09-12 00:00:00.0!@!2018-09-12 00:00:00.0!@!1!@!1!@!1!@!1!@!2018-09-12 00:00:00.0!@!1!@!2356!@!内科!@!11231!@!胸内科!@!12414!@!312313!@!陈XX!@!2!@!2018-09-12 00:00:00.0!@!2018-09-12 00:00:00.0!@!2!@!1!@!6.00!@!2018-09-12 00:00:00.0^&^
*/
上一篇下一篇

猜你喜欢

热点阅读