美文网首页
【数据采集】关于接口中遇到的问题

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

作者: shallwego_ | 来源:发表于2018-09-17 15:30 被阅读0次

    一、连接SQL Server数据库

    • 连接sql Server数据库需要导入sqljdbc.jar包。
    • 使用com.microsoft.sqlserver.jdbc.SQLServerDriver驱动。
    • 连接数据库url为jdbc:sqlserver:localhost:1433;DatabaseName=student

    二、对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.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。UUID 是指通用唯一识别码(Universally Unique Identifier)。
    • SM4密钥长度为16个字节。

    使用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^&^
    */
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/rtvlnftx.html