精华内容
下载资源
问答
  • 因此企业在不断的发展中,不断的提升自己的安全意识,想要采取一定的加密手段来实现对大量的内部数据文件进行加密处理,从而保证数据文件无论是在内部环境还是外部环境下的使用安全,只要在根源实施数据防泄漏服务,...

    没有哪一家企业想遇到这样的事情:投入资金研发的相关文件以及设计的相关企业发展的商业机密文件被他人窃取?给自身的企业造成数据危机这样的现象存在。因此企业在不断的发展中,不断的提升自己的安全意识,想要采取一定的加密手段来实现对大量的内部数据文件进行加密处理,从而保证数据文件无论是在内部环境还是外部环境下的使用安全,只要在根源实施数据防泄漏服务,才能有效的保证员工电脑上的文件安全。

    正是因为现阶段数据安全对于企业发展的重要性,所以企业尤其重视对于局域网内部环境下员工电子文件的使用安全管控。那么,站在企业的角度,怎么样给电脑上的相关电子文件进行加密?

    由于企业对于安全的要求比较高,所以传统的采用密码、加壳这样的技术手段,无法满足企业对于电子文件的使用安全,以及使用的便捷性的要求。因此需要一款能够顺应时代发展以及企业发展的需求,因此,驱动层透明加密成为企业首选的加密方式,在满足企业安全的需求基础上,不影响员工日常办公。目前国内使用的比较好并且安全性较高的是安秉网盾EDS,采用的是国密级加密标准Windows底层无感知加密技术,能够对多类型的电子文档加密,并且支持自定义需要加密文件的类型,其加密模式主要是在底层,也就是相关的涉密软件在底层开始运行的时候,所新建生成的文件就会被自动强制性加密,一旦经过加密后的文件在公司的局域网环境下能够正常的流通使用,但是如果企业根据自身的需求如果设置了文件只允许在某个部门流通使用,那么如果未获得允许将该部门的文件外发到其他部门,那么文件就会呈现加密状态,无法打开。所以对于企业而言,可以根据自身环境的需求,设置部门加密文件的使用权限问题,规范员工的日常管理,加强企业文件的使用安全,防止数据泄露。

    公司应该如何在不同的部门下去部署电脑文件加密软件?电子文件如何实现在产生的时候就进行加密?

    77df92c992b74092935ff7e35a54e04f.png

    首先,选择一台合适的电脑安装安秉网盾服务器端,然后在需要安装客户端的部门进行安装,然后使其都连接在企业的这个服务器上。

    其次,安装好加密以后,进行服务器的调试策略,然后进行企业的不同部门的涉密策略设置。设置完成以后进入用户管理,对不同部门进行权限设置。

    接下来,完成对密文分级、审批解密、明文邮箱、日志管理等等相关涉密文件的使用管控,然后保存进行策略下发,安装客户端的电脑在接收到命令以后,文件就会在新建产生的那一刻一直处于加密状态,加密后的电子文件能够在指定环境下正常的流通使用,未获得授权允许的情况下脱离环境,文件呈现乱码,无法打开使用。

    308a68b00d1b9a34613982abbd345eb2.png

    最后,企业在选择和使用电脑加密软件的时候,一定要注意的是有关加密策略的设置以及功能、安全等方面的考察不能忽视,作为国内的优秀数据防泄漏厂商,安秉信息,凭借专业的技术良好的售后服务以及技术支持,为互联网不同行业和性质的企业提供全方位一体化的数据安全防护措施!

    展开全文
  • GIMMS NDVI数据R语言时间序列处理分析拿到的GIMMS NDVI数据是ENVI格式(不是NASA的原始数据),要求做时间序列分析,查看变化情况,那么该怎么做呢?R语言读取ENVI数据R语言的raster包可以读取ENVI数据dat文件,两种...

    GIMMS NDVI数据R语言时间序列处理分析

    拿到的GIMMS NDVI数据是ENVI格式(不是NASA的原始数据),要求做时间序列分析,查看变化情况,那么该怎么做呢?

    R语言读取ENVI数据

    R语言的raster包可以读取ENVI数据的dat文件,两种常用的函数,一个是brick,一个是stack

    #在这里说明一下代码中用到的R包
    library(raster)
    library(tidyverse)
    library(tibble)
    library(stringr)
    #读取数据,两种方法
    NDVI_br "GIMMS_NDVI_CMR_1981_2015.dat")
    NDVI_stack "GIMMS_NDVI_CMR_1981_2015.dat")

    读取后查看数据,发现stack是分层的,每一个层里面都有独立的名称等信息,而brick就像它的名字,好像一个砖块,更像一个整体。

    66ec83ec056534ab38c4b8a87faec3d7.png
    stack和brick对比

    仔细查看一下stack,每一层里面有单独的数据,数据中有单独的名称。

    347732f2b97d49bff73daea053c0462e.png
    stack详情
    cf97251175a035810fedc194ad48032d.png
    查看层数据文件名

    R语言时间序列计算

    计算思路

    我采用下面文献5中提到的方法进行计算:

    对15d数据采用平均值方法,计算得到月值数据,月值数据采用最大值合成(Maximum Value Composition,MVC)计算得到1982-2015年年值数据。

    具体数据处理流程如下:

    1. 逐stack layer计算NDVI均值
    2. 计算相同月的NDVI均值,得月值数据
    3. 对月值数据求最大值,计算年值数据

    几个要点:

    • NDVI计算结果转时间序列
    • 月度均值计算
    • 年度求最大值

    逐图层计算均值

    逐stack layer计算NDVI均值,代码如下:

    avgNDVI #逐图层计算均值

    计算结果为一个向量(vector),带有图层的名称信息,也就是时间信息,但是我们需要进行一些格式转换,让R能够从名称中提取出时间。

    68b1c8155edf62206b5598ea6c390b0e.png
    avgNDVI

    时间序列转换

    要想把时间信息提出来,我们得弄一个数据框,让数据框中NDVI值和时间对起来。

    avgNDVIdf #将计算结果转数据框
    avgNDVIdf "Date")   #将行名转为一列
    avgNDVIdf$Date $Date, "X")   #去除X
    avgNDVIdf$Date2 $Date, format = '%Y.%m.%d')

    format内部代码解释:

    • %y:两位数字表示的年份(00-99),不带世纪,例如,数值是18,格式%y,表示2018年
    • %Y:四位数字表示的年份(0000-9999)
    • %m:两位数字的月份,取值范围是01-12,或1-12
    • %d:月份中的天,取值范围是01-31
    • %e:月份中的天,取值范围是1-31
    • %b:缩写的月份(Jan、Feb、Mar等)
    • %B:英语月份全名(January、February 、March等)
    • %a:缩写的星期名(Mon、Tue、Wed、Thur、Fri、Sat、Sun)
    • %A:星期全名

    运行上述代码后,我们实现了NDVI和时间的对应,下图的数据框中:

    • Date列为日期(字符串型),R语言不能识别
    • avgNDVI为计算的各个图层的NDVI均值
    • Date2为日期,R语言可以识别的形式
    00d8c1e0b2300ee79886b983284e5a69.png
    带时间序列的数据框

    月度年度NDVI计算

    时间序列生成后,我们要根据时间序列计算每月均值和每年的最大值了。

    最开始我只是计算了月度均值和年度最大值,数据框中加上了年份和月份,但是由于最后制图会出问题,所以后来又调整代码,将月度和年度调整为了完整的月度和年度的时间序列。

    以下是完整的NDVI年度和月度值计算和时间序列生成代码:

    #月均NDVI和年度每月最大NDVI计算
    avgNDVIdf$Month $Date2)  #提取月信息
    #函数强制转换月份汉语为数字
    numMonthfunction(x) 
      c(一月="01",二月="02",三月="03",四月="04",五月="05",六月="06",七月="07",八月="08",九月="09",十月=10,十一月=11,十二月=12)[tolower(x)]
    avgNDVIdf$Month $Month)
    avgNDVIdf$Year $Date2, format="%Y")  #提取年份信息
    Mon_Mean_NDVI #计算月度均值
    Mon_Mean_NDVI$Date $Year, Mon_Mean_NDVI$Month,"15", sep = "-"), format = "%Y-%m-%d")  #月度15号
    Year_Max_NDVI Year_Max_NDVI$Date $Year, "07""01", sep = "-"), format = "%Y-%m-%d")   #每年7月1日
    17a98e883e10f6a0c05ec5ec2bd944a6.png
    数据计算结果1
    d96e0879713f8b84a4dc65714d8d0849.png
    修改时间序列代码后,添加Date列

    R语言时间序列图

    推荐使用ggplot2进行NDVI时间变化曲线的绘制,代码示例如下:

    p2   labs(x="Year", y="NDVI")+
      theme_bw()+
      geom_smooth()+
      geom_point()
    p2
    4370e15f519946eaab34d9310e0cef3a.png
    ggplot2绘制时间序列变化

    R语言栅格动图

    R语言可以使用raster包中的anmimate函数生成动图,但是我不太清楚如何输出,我是用Screen to GIF软件截得屏

    animate(NDVI_br)

    e9ddf1981239ca5a0e6ad9b6c13c0f95.gif

    NDVI时间序列图

    参考文献

    1. https://www.neonscience.org/dc-raster-time-series-r
    2. https://www.neonscience.org/julian-day-conversion-r
    3. https://www.r-graph-gallery.com/279-plotting-time-series-with-ggplot2.html
    4. https://www.neonscience.org/dc-ndvi-calc-raster-time-series
    5. 王涛,赵元真,王慧,曹亚楠,彭静,曹亚楠.基于GIMMS NDVI的青藏高原植被指数时空变化及其气温降水响应[J].冰川冻土,2020,42(02):641-652.
    6. https://www.cnblogs.com/ljhdo/p/4804113.html
    7. https://www.neonscience.org/dc-convert-date-time-POSIX-r
    8. https://stackoverflow.com/questions/16652199/compute-monthly-averages-from-daily-data
    展开全文
  • 前面已有文章说明了DAT文件的修复方法,但是还有一个可能,就是DAT为0字节的,0字节就代表文件没有任何数据大小,又该如何处理呢? 0字节是相机没有保存视频数据到文件中,拍摄中有可能一直显示在录制的,但是由于...

    前面已有文章说明了DAT文件的修复方法,但是还有一个可能,就是DAT为0字节的,0字节就代表文件没有任何数据大小,又该如何处理呢?

    0字节是相机没有保存视频数据到文件中,拍摄中有可能一直显示在录制的,但是由于异常情况,相机最后并没有将数据保存到文件里面。0字节的文件还是有办法处理的,但是有一个非常重新的前提,就是这个文件之后最好没有再录制其它视频,或者录制的视频很小,否则,后面录制的内容会将之前的视频数据覆盖,造成数据无法挽回。

    所以拍摄中如果出现问题,为了保证视频能够恢复,一定要换一张存储卡再继续录制。

    言归正传,为种0字节的文件又如何恢复呢,首先,得用底层数据软件分析视频数据有没有被覆盖,没被覆盖的,先把视频数据提到出来。然后,根据该相机视频的编码情况,来对提取出来的文件进行完美的编码修复。这样出来的视频就完美了。
    佳能DAT文件数据代码举例:
     

     

    展开全文
  • 前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务。怎么在插入数据的时候生成主键返回值 一、JDBC处理CLOB和BLOB数据 1.1...

    前面大概介绍了JDBC连接数据库的过程,以及怎么操作数据库,今天给大家分享JDBC怎么处理CLOB和BLOB存储图片的事情,以及JDBC怎么去处理事务。怎么在插入数据的时候生成主键返回值

    一、JDBC处理CLOB和BLOB数据

    1.1、JDBC处理CLOB(在MySQL中是TEXT)

      环境:  

    create table tb_clob_test_1(id int,clob_data text);
    前面使用的DButils工具类,用来获取Connection连接和关闭资源。

      1)text类型也可以存储字符串

    public void clobTest_1() {
            Connection conn = null;
            PreparedStatement pstmt = null;
    
            try {
                conn = DBUtils.getConn();
                String sql = "insert into tb_clob_test(clob_data)values(?)";
                pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, "hello world");
                pstmt.execute();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DBUtils.close(null, pstmt, conn);
            }
        }
    clobTest_1()

      2)数据的存入   

      如果数据只有ASCII,即不能有中文字符和特殊字符:
        pstmt.setAsciiStream(1,x); 

      如果数据包含中文字符或者其他特殊字符:
        File file=new File(“xxx”);
        FileReader reader=new FileReader(file);
        pstmt.setCharacterStream(1,reader,file.length());

        pstmt.setCharacterStream(1,new FileReader("D:/java.txt"));
        pstmt.setClob(1,new FileReader("D:/java.txt"));   

        @Test
        public void clobTest_2() {
            Connection conn = null;
            PreparedStatement pstmt = null;
    
            try {
                conn = DBUtils.getConn();
                String sql = "insert into tb_clob_test(clob_data)values(?)";
                pstmt = conn.prepareStatement(sql);
    //            pstmt.setCharacterStream(1,new FileReader("D:/java.txt"));
                pstmt.setClob(1,new FileReader("D:/java.txt"));
                pstmt.execute();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                DBUtils.close(null, pstmt, conn);
            }
        }

      3)数据的获取

        直接拿出字符流   

    public void clobSelectTest_1() {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            PrintWriter writer = null;
            BufferedReader bf = null;
            try {
                conn = DBUtils.getConn();
                String sql = "select * from tb_clob_test where id = 4";
                pstmt = conn.prepareStatement(sql);
                rs = pstmt.executeQuery();
                writer = new PrintWriter("java.txt.bak");
                while(rs.next()){
                    int id = rs.getInt(1);
                    Reader reader = rs.getCharacterStream(2);
                    bf = new BufferedReader(reader);
                    String str = null;
                    while ((str=bf.readLine())!=null){
                        writer.write(str);
                        writer.write("\r\n");
                        writer.flush();
                    }
    
                }
                pstmt.execute();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    writer.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                DBUtils.close(null, pstmt, conn);
            }
        }
    clobSelectTest_1

        先拿出Clob,然后转化成字符流

    resultSet=pstmt.executeQuery();
    while (res.next()) {
            File file = new File("note_bak.txt");
            FileWriter fw = new FileWriter(file);
            Clob clob = resultSet.getClob(2);
            Reader reader = clob.getCharacterStream();
            char[] cs = new char[1024];
            int length = 0;
            while((length = reader.read(cs))!=-1){
                fw.write(cs, 0, length);
                fw.flush();
            }
            fw.close();
            reader.close();
    View Code

    1.2、JDBC处理BLOB 

      环境: 

    create table tb_blob_test_1(id int,blob_data longblob);

      1)存储图片 

    public class BlobDemo_0010 {
    
        @Test
        public void blobInsert_1(){
            Connection conn = null;
            PreparedStatement pstmt = null;
    
            try {
                conn = DBUtils.getConn();
                String sql = "insert into tb_blob_test(blob_data)values(?)";
                pstmt = conn.prepareStatement(sql);
                pstmt.setBinaryStream(1,new FileInputStream("D:/11.jpg"));
                boolean execute = pstmt.execute();
                System.out.println(execute);
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

      方式二: 

    String sql=”insert into tb_blob_test_1(blob_data) values(?)”;
    pstmt=conn.prepareStatement(sql);
    File file=new File(“xxx.jpg”);
    BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
    pstmt.setBlob(2,bis);
    pstmt.execute();

      2)从数据库中读取图片

    public void blobSelect_1(){
            Connection conn = null;
            PreparedStatement pstmt = null;
    
            try {
                conn = DBUtils.getConn();
                String sql = "select * from tb_blob_test where id =1";
                pstmt = conn.prepareStatement(sql);
                ResultSet rs = pstmt.executeQuery();
                rs.next();
                InputStream is = rs.getBinaryStream(2);
                OutputStream os = new FileOutputStream("D:/blob.jpg");
                byte[] bs = new byte[1024];
                int len = -1;
                while ((len=is.read(bs))!=-1){
                    os.write(bs,0,len);
                }
                os.flush();
                os.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    blobSelect_1

    二、JDBC中设置事务的隔离级别

    在JDBC中一些基本的设置事务的操作 

    //MySQL设置事务隔离级别,一般不会再JDBC代码中设置,会直接在MySQL服务器中去设置
    conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
    //在JDBC设置手动提交事务
    conn.setAutoCommit(false);
    //设置回滚点
    sp = conn.setSavepoint();
    //事务回滚
    conn.rollback(sp);

      事务处理具体实例:   

    public void tx_test_1(){
            Connection  conn = null;
            PreparedStatement pstmt =null;
            Savepoint sp = null;
    
            try {
                conn = DBUtils.getConn();
                //MySQL设置事务隔离级别,一般不会再JDBC代码中设置,会直接在MySQL服务器中去设置
                conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
                //在JDBC设置手动提交事务
                conn.setAutoCommit(false);
                //在转账的时候,先判断源账号的余额是否大于转账金额
                //判断之前先查询源账户的余额
                String sql0 = "select balance from tb_account where id =1";
                pstmt = conn.prepareStatement(sql0);
                ResultSet rs = pstmt.executeQuery();
                double balance=0;
                if(rs.next()){
                     balance = rs.getDouble(1);
                }
                //转账金额
                double much = 1000;
                //判断余额是否大于转账金额
                if(balance<much){
                    DBUtils.close(rs,pstmt,conn);
                    return;
                }
    
                sp = conn.setSavepoint();
                //张三的余额减去1000
                String sql1 = "update tb_account set balance=balance-1000 where id=1";
                pstmt = conn.prepareStatement(sql1);
                pstmt.executeUpdate();
                //李四的余额加上1000
                String sql2 = "update tb_account set balance=balance+1000 where id=2";
    //            pstmt.executeUpdate(sql2);这是调用父类的方法一样可以
                pstmt = conn.prepareStatement(sql2);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                try {
    //                conn.rollback();
                    conn.rollback(sp);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }finally {
                try {
                    conn.commit();
                } catch (SQLException e) {
                    try {
                        conn.rollback();
                    } catch (SQLException e1) {
                        e1.printStackTrace();
                    }
                    e.printStackTrace();
                }
                DBUtils.close(null,pstmt,conn);
            }
        }
    tx_test_1

    三、生成主键返回值

      环境:  

    create tb_pserson_1(id int primary key auto_increment,name varchar(20));

      具体步骤: 

    String sql=”insert into tb_pserson_1(name) values(?)”;
    pstmt=conn. prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
    pstmt.executeUpdate();
    resultSet=pstmt. getGeneratedKeys();

      此时的resultSet里面存放的是刚才插入的那条数据的自动生成的ID。

    四、数据库元数据的查看 

     在我们前面使用JDBC来处理数据库的接口主要有三个,即Connection,PreparedStatement和ResultSet这三个,而对于这三个接口,还可以获取不同类型的元数据,通过这些元数据类获得一些数据库的信息。

      元数据(MetaData),即定义数据的数据。打个比方,就好像我们要想搜索一首歌(歌本身是数据),而我们可以通过歌名,作者,专辑等信息来搜索,那么这些歌名,作者,专辑等等就是这首歌的元数据。因此数据库的元数据就是一些注明数据库信息的数据。

      ① 由Connection对象的getMetaData()方法获取的是DatabaseMetaData对象。

      ② 由PreparedStatement对象的getParameterMetaData ()方法获取的是ParameterMetaData对象。

      ③由ResultSet对象的getMetaData()方法获取的是ResultSetMetaData对象。

    4.1、DatabaseMetaData 

    DatabaseMetaData是由Connection对象通过getMetaData方法获取而来,主要封装了是对数据库本身的一些整体综合信息。

      例如数据库的产品名称,数据库的版本号,数据库的URL,是否支持事务等等,能获取的信息比较多,具体可以参考DatabaseMetaData的API文档。

    DatabaseMetaData data = conn.getMetaData(); //查看当前连接中有关MySQL的系统信息,比如版本号,是否支持事务,数据库名字。

    以下有一些关于DatabaseMetaData的常用方法:
    
      ·getDatabaseProductName:获取数据库的产品名称
    
      ·getDatabaseProductName:获取数据库的版本号
    
      ·getUserName:获取数据库的用户名
    
      ·getURL:获取数据库连接的URL
    
      ·getDriverName:获取数据库的驱动名称
    
      ·driverVersion:获取数据库的驱动版本号
    
      ·isReadOnly:查看数据库是否只允许读操作
    
      ·supportsTransactions:查看数据库是否支持事务

    4.2、ParameterMetaData

    ParameterMetaData是由PreparedStatement对象通过getParameterMetaData方法获取而来,主要是针对PreparedStatement对象和其预编译的SQL命令语句提供一些信息,

    比如像”insert into account(id,name,money) values(?,?,?)”这样的预编译SQL语句,ParameterMetaData能提供占位符参数的个数,获取指定位置占位符的SQL类型等等,功能也比较多,这里不列举完,详细请看有关ParameterMetaData的API文档。

      常用方法:

         ·getParameterCount:获取预编译SQL语句中占位符参数的个数

      在我看来,ParameterMetaData对象能用的只有获取参数个数的getParameterCount()方法。

      注意:ParameterMetaData许多方法MySQL并不友好支持,比如像获取指定参数的SQL类型的getParameterType方法,如果数据库驱动连接URL只是简单的“jdbc:mysql://localhost:3306/jdbcdemo”那么MyEclipse会抛出SQLException异常,

        必须要将URL修改为“jdbc:mysql://localhost:3306/jdbcdemo?generateSimpleParameterMetadata=true”才行。但是像getParameterType等等与其他的方法也没多好用,因为如下面的例子,这些方法好像只会将所有的参数认为是字符串(VARCHAR)类型。

    public void testParameterMetaData() throws SQLException {
            Connection conn = null;
            PreparedStatement st = null;
            ResultSet rs = null;
            try{
                conn = JdbcUtils.getConnection();
                String sql = "insert into user(id,name,age) values(?,?,?)";
                st = conn.prepareStatement(sql);
                st.setInt(1, 1);
                st.setString(2, "Ding");
                st.setInt(3, 25);
                
                ParameterMetaData paramMetaData = st.getParameterMetaData();
                //获取参数个数
                int paramCount = paramMetaData.getParameterCount();
                //以字符串形式获取指定参数的SQL类型,这里有问题
                String paramTypeName = paramMetaData.getParameterTypeName(1);
                //返回指定参数的SQL类型,以java.sql.Types类的字段表示,这里有问题
                int paramType = paramMetaData.getParameterType(1);
                //返回指定参数类型的Java完全限定名称,这里有问题
                String paramClassName = paramMetaData.getParameterClassName(1);
                //返回指定参数的模,,这里有问题
                int paramMode = paramMetaData.getParameterMode(1);
                //返回指定参数的列大小,这里有问题
                int precision = paramMetaData.getPrecision(1);
                //返回指定参数的小数点右边的位数,这里有问题
                int scale = paramMetaData.getScale(1);
    }
    testParameterMetaData

      注:完全限定名称,指的是该类型的Java完整名称,包括包名和类型。

      结果:

          

      因为我们的SQL语句为"insert into user(id,name,age) values(?,?,?)",而我们所有利用ParameterMetaData查询的信息除了参数个数以外,都是查询第一个参数的信息,也就是“id”列,而这个“id”列我们创建时是int整型的,

      但是利用ParameterMetaData的查询结果都是显示为字符串类型,因此我对ParameterMetaData的功能产生了怀疑。

      因此在以后使用参数元数据ParameterMetaData尽量只要使用其getParamterCount()方法获取参数个数,对于该对象其他方法请慎用。

    4.3、ResultSetMetaData

      ResultSetMetaData是由ResultSet对象通过getMetaData方法获取而来,主要是针对由数据库执行的SQL脚本命令获取的结果集对象ResultSet中提供的一些信息,

      比如结果集中的列数、指定列的名称、指定列的SQL类型等等,可以说这个是对于框架来说非常重要的一个对象。关于该结果集元数据对象的其他具体功能和方法请查阅有关ResultSetMetaData的API文档。 

    以下有一些关于ResultSetMetaData的常用方法:
    
      ·getColumnCount:获取结果集中列项目的个数
    
      ·getColumnType:获取指定列的SQL类型对应于Java中Types类的字段
    
      ·getColumnTypeName:获取指定列的SQL类型
    
      ·getClassName:获取指定列SQL类型对应于Java中的类型(包名加类名)

     

       实例:

        数据表     

    create table user(
            id int primary key,
            name varchar(40),
            age int
        );
        insert into user(id,name,age) values(1,'Ding',25);
        insert into user(id,name,age) values(2,'LRR',24);
    user

     

        测试

    public void testResultSetMetaData() throws SQLException {
            Connection conn = null;
            PreparedStatement st = null;
            ResultSet rs = null;
            try{
                conn = JdbcUtils.getConnection();
                String sql = "select * from user";
                st = conn.prepareStatement(sql);
                
                rs = st.executeQuery();
                ResultSetMetaData resultMetaData = rs.getMetaData();
                //获取结果集的列数
                int columnCount = resultMetaData.getColumnCount();
                //获取指定列的名称
                String columnName = resultMetaData.getColumnName(1);
                //获取指定列的SQL类型对应于java.sql.Types类的字段
                int columnType = resultMetaData.getColumnType(1);
                //获取指定列的SQL类型
                String columnTypeName = resultMetaData.getColumnTypeName(1);
                //获取指定列SQL类型对应于Java的类型
                String className= resultMetaData.getColumnClassName(1);
                //获取指定列所在的表的名称
                String tableName = resultMetaData.getTableName(1);
    }
    testResultSetMetaData

     

    展开全文
  • 介绍Python pandas包用于数据操作和分析,旨在让您以更直观的方式处理标记或关系数据。基于numpy软件包构建,pandas包括标签,描述性...在本教程中,我们将首先安装pandas,然后让您了解基础数据结构:Series和Dat...
  • 求解答,设计目标是想利用一个按钮,打开一个.dat文件并将其中数据放到数组中,但是现在好像没打开.dat文件,大家能不能帮我看看哪儿有问题,应该怎么改。 运行的结果是:啥也没有输出,也没显示“申请成功”,也没...
  • 处理: 1 请求加上配置 (必须) responseType: 'arraybuffer', 2 得到的后台数据resData转base64 var base64 = btoa( new Uint8Array(resData) .reduce((data, byte) => data + String.fromCharCode(byte), '...
  • if((cfptr=fopen("hardware.dat","wb"))==NULL) { printf("文件不能打开\n"); } else { struct Tools blanktool={0,"",0,0}; int i=0; for(i=0;i;i++) { fwrite(&blanktool,sizeof...
  • 第四个项目比较简单和有趣,因为它的数据集全部都是分类型特征,在这种情况下,我们又应该怎么做呢。在这里给大家分享一个比较好用的模型catboost和对分类型特征处理的编码方式TargetEncoder。在这个项目中可以方便...
  • 在用DSP进行数据处理的时候,需要导入本地的,dat文件,直接使用fopen()函数出了错, ![图片说明] (https://img-ask.csdn.net/upload/201905/23/1558580043_828927.png) _下面是原读取数据的程序截图 !...
  • 今天比较闲,做一个练手的项目,结果在xaml中写了一个用户的数据模板后,在其中的某个Canvas上绑定了一个鼠标左击的事件,结果调试的时候,无论怎么点击都不跳到断点那里,百思不得其解。 之后尝试不绑定事件,直接...
  • 3、盘中发现数据特别卡,有延时现象怎么处理? 通常这个问题是因为当前电脑运行的程序比较多,占用CPU过高。建议保存需要的K线数据够用就行,保存K线数量太多也会影响飞狐交易师运行效率。 4、飞狐交易师非法退出的...
  • 行之间无空行十分重要,如果有空行或者数据集中行末有空格,读取数据时一般会出错,引发[list index out of range]错误。...低出生体重的dat文件从作者源处下载下来,并且将其处理后保存到csv文件中的代码。imp...
  • 具体如下:首先,将原始地面数据和开挖后数据数据的格式都设置为DAT,然后依次输入“点号”、“描述”、“Y坐标”、“X坐标”。接着,将CASS软件打开,点击页面上端的“绘图处理”,在弹出选项中点击“展高程点”。...
  • 在python中使用SVM处理大数据时可能会遇到内存不足的情况,新我们就来看一下如何解决内存不足的问题:我们可以使用python分块读取大数据来避免内存不足,实现代码如下:importpandasaspddefread_dat...
  • 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作同一条数据的同一个字段的话,那...
  • 在python中使用SVM处理大数据时可能会遇到内存不足的情况,新我们就来看一下如何解决内存不足的问题:我们可以使用python分块读取大数据来避免内存不足,实现代码如下:importpandasaspddefread_dat...
  • 我的部分代码(java)如下:怎么处理以后的结果与原来一样啊???? public static void change(String str[]){ // str1=new String[100]; int length=0; char ch;//保存每行的最后一个字符 for(int ...
  • 另外还有部分定义不知道怎么处理(完整描述见附件部分),如果正确写入到图形文件里的话,应该是下图的样子 ![图片说明](https://img-ask.csdn.net/upload/201804/24/1524501224_332027.jpg) 求高手能讲解一下整个...
  • 在常用的数据处理软件Excel中,有一些说明文档中没有但能正常使用的函数,这些Excel函数就是系统隐藏函数。如Datedif、NumberString、DateString等。一、Excel系统隐藏函数:Datedif。功能:以指定的方式计算两个...
  • 汉王人脸识别考勤机软件驱动安装和设置 汉王人脸考勤机不知道数据(txt文件,dat文件)怎么处理? 安装了软件怎么设置?
  • Mathematica12 学习笔记五学习课程学习笔记截图 学习课程 讲师:Douglas J.Tobias 课程内容:学习运用Mathematica...学习了统计学的一些基础知识,怎么处理数据:直方图、概率分布、概率密度分布、均值、方差、标...
  • 这样的方法能实现数据按照所传条件的查询,但对查询得到的数据进行分页控制不知道怎么处理。在多方查找后,找到如下解决办法:  在数据加载时是使用jsp的页面初始化加载来对页面数据进行请求加载的: $(function...
  • 一、sql中要学习的有:存储过程、游标、索引、触发器、事务、分页、数据导入导出、树形数据处理、海量数据查询、视图以及简单的sql语句的编写并思考它的执行效率 二、学习方法: 是什么? 有什么作用? 什么...
  • 分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于...
  • <div><p><strong>Issue</strong>:std::bad_alloc内存溢出 ...需要怎么处理?加到128G?怎么判断内存够不够用?大概要用多少</p><p>该提问来源于开源项目:crownpku/Rasa_NLU_Chi</p></div>
  • 以前总是调用公司前辈...对于写入图像,又这四个部分一点一点的填充,可是就是出不来图像,调了半天,我甚至把四部分分别写到四个DAT文件里,数着偏移地址,对着lena.bmp原图的数据对着看,数据都没偏差,可是怎么就没
  • 1.8 如何在C中实现不透明(抽象)数据类型? 1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗?...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

怎么处理dat数据