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

一、连接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=“31231415425072309002018-09-12 00:00:00.02018-09-12 00:00:00.02018-09-12 00:00:00.02018-09-12 00:00:00.011112018-09-12 00:00:00.012356内科11231胸内科12414312313陈XX22018-09-12 00:00:00.02018-09-12 00:00:00.0216.002018-09-12 00:00:00.0
” 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); //取的根元素 Element root = doc.getRootElement(); //得到根元素所有子元素的集合 List recordList = root.getChildren(); //获得XML中的命名空间(XML中未定义可不写) Namespace ns = root.getNamespace(); datastr =new StringBuffer(); for(int i=0;i标签 List childElement = et.getChildren(); //遍历中子元素 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^&^ */

你可能感兴趣的:(【数据采集】关于接口中遇到的问题)