精华内容
下载资源
问答
  • java生成db文件

    千次阅读 2019-03-26 17:05:20
    工作中遇到一个需求,就是需要把mysql里的一些表数据生成db文件,给客户端使用,客户端使用sqlite数据库; 首先我们需要在项目中添加Sqlite JDBC 依赖 <dependency> <groupId>org.xerial</...

    https://www.cnblogs.com/kanyun/p/9298163.html

    工作中遇到一个需求,就是需要把mysql里的一些表数据生成db文件,给客户端使用,客户端使用sqlite数据库;

    首先我们需要在项目中添加Sqlite JDBC 依赖

    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.23.1</version>
    </dependency>

    生成DB文件工具类

    package cn.kayun.util;
    
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.Statement;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Locale;
    
    /**
     * Created by root on 2018/7/2 0002.
     */
    public class DBUtil {
    
        private static final Logger logger = LoggerFactory.getLogger(DBUtil.class);
        private static Connection connection = null;
        private static Statement statement = null; 
        private static String username = "kanyun";
        private static String password = "kanyun";
    
        /**
         * @describe: 设置连接 * @params: * @Author: Kanyun * @Date: 2018/7/12 9:54
         */
        public static void setConnection() {
            try {
    //            声明驱动类型
                Class.forName("org.sqlite.JDBC");
    //            设置sqlite db文件存放基本目录
                String path = DBUtil.class.getClassLoader().getResource("").getPath();
    //            设置 sqlite文件路径,等同于mysql连接地址(jdbc:mysql://127.0.0.1:3306/test)
                String url = "jdbc:sqlite:" + path + "data.db";
    //            获取连接
                connection = DriverManager.getConnection(url, username, password);
    //            声明
                statement = connection.createStatement();
            } catch (Exception e) {
                throw new RuntimeException("建立Sqlite连接失败");
            }
    
    
        }
    
        /**
         * @describe: 创建表
         * @params: tableName: 要创建的表的名称 className:项目中Pojo的类名(需要注意的是该类名需要加上包名 如 com.xxx.xxx.pojo.xxx)
         * @Author: Kanyun
         * @Date: 2018/7/12 9:56
         */
        public synchronized static void create(String tableName, String className) {
            try {
                statement.executeUpdate("DROP TABLE IF EXISTS " + tableName + ";");
    //            通过反射,获取传入类名的字段信息
                Field[] fields = Class.forName(className).getDeclaredFields();
                StringBuffer sb = new StringBuffer();
                String reg = " ";
                sb.append("create table " + tableName + " (");
                for (Field field : fields) {
    //                设置使用反射时,可以访问私有变量,当pojo的变量设置为private修饰时,isAccessible()得到的值是false,必须要改成true才可以访问
                    field.setAccessible(true);
    //                通过获得的字段,获取字段类型,和字段名,来定义创建表的字段名和字段类型
                    if (field.getType().getName().equals(java.lang.Long.class.getName())) {
                        sb.append(reg + field.getName() + " bigint(20) ");
                    } else if (field.getType().getName().equals(java.lang.String.class.getName())) {
                        sb.append(reg + field.getName() + " varchar(255) ");
                    } else if (field.getType().getName().equals(java.util.Date.class.getName())) {
                        sb.append(reg + field.getName() + " datetime ");
                    } else {
                        sb.append(reg + field.getName() + " int(11) ");
                    }
                    reg = ",";
                }
                sb.append(") ;");
                statement.executeUpdate(sb.toString());
            } catch (Exception e) {
                logger.error("建表失败:" + e);
                throw new RuntimeException("建表失败,表名称:" + tableName);
            }
        }
    
        /**
         * @describe: 表中插入数据
         * @params: tableName:表名 list:待插入的对象集合 需要注意的是插入的对象要跟表名对应
         * @Author: Kanyun
         * @Date: 2018/7/12 10:03
         */
        public synchronized static <T> int insert(String tableName, List<T> list) {
            StringBuffer declaration = new StringBuffer();
            List<String> dataSqlArray = new ArrayList<>();
            int count = 0;
            try {
                list.stream().map(t -> {
                    if (dataSqlArray.size() < 1) {
                        logger.info("定义语句");
                        Field[] fields = t.getClass().getDeclaredFields();
                        declaration.append(" (");
                        String reg = "";
                        for (Field field : fields) {
                            field.setAccessible(true);
                            declaration.append(reg + field.getName());
                            reg = ",";
                        }
                        declaration.append(")");
                    }
                    return t;
                }).forEach((t) -> {
                    Field[] fields = t.getClass().getDeclaredFields();
                    StringBuffer oneData = new StringBuffer();
                    String reg = "";
                    oneData.append(" (");
    
                    for (Field field : fields) {
                        try {
                            field.setAccessible(true);
                            if (null == field.get(t) || "".equals(field.get(t))) {
                                oneData.append(reg + null);
                            } else if (field.getType().getName().equals(java.lang.String.class.getName())) {
    //                            传入的对象中字段是字符串时,插入数据库需要转义单引号
                                oneData.append(reg + "\'" + field.get(t) + "\'");
    //                            传入的对象中字段是日期类型时,先将日期转换为 yyyy-MM-dd 的形式(我这里,传入对象的日期对象格式为:Wed Jul 11 14:34:07 CST 2018),在将其转换成字符串,注意转义单引号
                            } else if (field.getType().getName().equals(java.util.Date.class.getName())) {
                                String dd = field.get(t).toString();
                                SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
                                SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                String date = sdf2.format(sdf1.parse(dd));
                                oneData.append(reg + "\'" + date + "\'");
                            } else {
                                oneData.append(reg + field.get(t));
                            }
                            reg = ",";
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    oneData.append(")");
                    dataSqlArray.add(oneData.toString());
                });
                String dataSql = StringUtils.join(dataSqlArray, ",");
                String retSQL = "INSERT INTO " + tableName + declaration.toString()
                        + " VALUES " + dataSql + ";";
                System.out.println(retSQL);
                PreparedStatement prep = connection.prepareStatement(retSQL);
    //            设置自动提交
                connection.setAutoCommit(true);
                count = prep.executeUpdate();
            } catch (Exception e) {
                logger.error("插入失败:" + e);
                e.printStackTrace();
            }
            return count;
        }
    
        /**
         * @describe: 关闭链接
         * @params:
         * @Author: Kanyun
         * @Date: 2018/7/12 10:11
         */
        public static void endConnection() {
            try {
    
                connection.close();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

     

     

    生成的DB文件在classess目录下.

    需要注意的是,在创建链接的过程中,虽然可以传入用户名,密码,但是使用一些工具(比如Navicat)还是可以查看db文件的内容的,因为免费版的SQLite有一个致命缺点:不支持加密

    如果需要使用sqlite加密,一是数据本身进行加密,也就是往表中插入的数据进行加密,二是可以加密db文件本身

    更多加密方式,参考:https://www.cnblogs.com/ligun123/p/5206942.html

    展开全文
  • java 生成sqliteDB文件

    2016-01-28 16:23:56
    实例代码:package com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Sqlitemain { ...
    实例代码:
    package com.db;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class Sqlitemain {
    
    	public static void main(String[] args) {
    		// load the sqlite-JDBC driver using the current class loader
    //		Class.forName("org.sqlite.JDBC");
    
    		Connection connection = null;
    		try {
    			// create a database connection
    			connection = DriverManager.getConnection("jdbc:sqlite:D:/people1.db");
    			Statement statement = connection.createStatement();
    			statement.setQueryTimeout(30); // set timeout to 30 sec.
    
    			statement.executeUpdate("drop table if exists person");
    			statement.executeUpdate("create table person (id integer, name string)");
    			statement.executeUpdate("insert into person values(1, 'leo')");
    			statement.executeUpdate("insert into person values(2, 'yui')");
    			ResultSet rs = statement.executeQuery("select * from person");
    			while (rs.next()) {
    				// read the result set
    				System.out.println("name = " + rs.getString("name"));
    				System.out.println("id = " + rs.getInt("id"));
    			}
    		} catch (SQLException e) {
    			// if the error message is "out of memory",
    			// it probably means no database file is found
    			System.err.println(e.getMessage());
    		} finally {
    			try {
    				if (connection != null)
    					connection.close();
    			} catch (SQLException e) {
    				// connection close failed.
    				System.err.println(e);
    			}
    		}
    	}
    }
    

    结果:

    name = leo
    id = 1
    name = yui
    id = 2


    jar下载:点击打开链接

    展开全文
  • java生成tfrecord文件

    千次阅读 2018-10-13 00:06:31
    最近在做一个ner识别模型,用算法标注了...前几天看到美团公众号发了一篇文章关于ctr模型,其中有一句话印象深刻用spark生成tfrecord文件,虽然一笔带过,受到启发,既然是jvm系的,java一定可以,然后就查了点资料...

    最近在做一个ner识别模型,用算法标注了一亿出头的数据,刚刚开始用python生成tfrecord文件,这一步非常的费时间,一亿条数据每一千万生成一个文件差不多要两个半小时的时间才能生成完成,左思右想想找一种快的方法,前几天看到美团公众号发了一篇文章关于ctr模型,其中有一句话印象深刻用spark生成tfrecord文件,虽然一笔带过,受到启发,既然是jvm系的,java一定可以,然后就查了点资料,和第一家公司的同事讨论了下,原来确实可以用protobuf来生成java代码,然后通过java代码生成tfrecord文件,在python读取生成的tfrecord文件然后喂给模型,这一步大概由原来的两个半小时变成12分钟,中间的gap可想而知,我估计用c++更快,改天用c++再写一篇,下面看java生成tfrecord的一些步骤:

    前提是电脑上必须装protobuf,我装的是这个版本,关于怎么装我在前面的博客已经提到:

    zhoumeixudeMacBook-Pro:ner zhoumeixu$ protoc --version
    libprotoc 3.5.1
    

     

    首先是官网上下载两个proto文件 ,然后用protobuf生成java代码,地址如下:

    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/example/example.proto

    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/example/feature.proto

    用protobuf生成java代码,这个和thrift是差不多的:

    protoc  --java_out=.  feature.proto 
    protoc  --java_out=.  example.proto 

    不出意外会生成一个org/tensorflow/example的文件夹,里面的代码是,考虑到一个java工程下面去,package几时如下:

    这里是不是非常熟悉,和python里面的生成tfrecord文件所涉及到类是不是都一样,原因就是持久化都是使用的protobuf协议,python也只是一层壳

    在java里面使用还需要添加protobuf java包,pom.xml配置如下:

        <dependency>
    			<groupId>com.google.protobuf</groupId>
    			<artifactId>protobuf-java</artifactId>
    			<version>3.5.1</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    		<dependency>
    			<groupId>com.google.guava</groupId>
    			<artifactId>guava</artifactId>
    			<version>23.6-jre</version>
    		</dependency>

     

    生成tfrecord文件的java代码,主要涉及到两个,一个是重写TFRecordFileWriter、一个是 TFRecordNer,下面看代码:

     

    TFRecordFileWriter:

    package com.xxx.protobuf;
    
    import java.io.BufferedOutputStream;
    import java.io.Closeable;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    
    
    public class TFRecordFileWriter implements Closeable {
      
    /**
     * Implements CRC32-C as defined in: "Optimization of Cyclic Redundancy-CHeck Codes with 24 and 32
     * Parity Bits", IEEE Transactions on Communications 41(6): 883-892 (1993).
     *
     * The implementation of this class has been sourced from the Appendix of RFC 3309, but with masking
     * due to Java not being able to support unsigned types.
     */
    private static class Crc32c {
      private static final int[] CRC_TABLE = {0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4,
          0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, 0x8AD958CF, 0x78B2DBCC, 0x6BE22838,
          0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, 0x105EC76F, 0xE235446C,
          0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, 0x9A879FA0,
          0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
          0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936,
          0xF477EA35, 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D,
          0x8CC531F9, 0x7EAEB2FA, 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE,
          0x05125DAD, 0x1642AE59, 0xE4292D5A, 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A,
          0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, 0x417B1DBC, 0xB3109EBF, 0xA0406D4B,
          0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, 0xCBA24573, 0x39C9C670,
          0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, 0x5125DAD3,
          0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
          0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4,
          0x0F36E6F7, 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E,
          0x4767748A, 0xB50CF789, 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2,
          0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9,
          0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35,
          0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, 0x82F63B78, 0x709DB87B,
          0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, 0x082F63B7,
          0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
          0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF,
          0x466298FC, 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4,
          0x3ED04330, 0xCCBBC033, 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9,
          0x97BAA1BA, 0x84EA524E, 0x7681D14D, 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D,
          0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, 0xB21572C9, 0x407EF1CA, 0x532E023E,
          0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, 0x38CC2A06, 0xCAA7A905,
          0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 0xC38D26C4,
          0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
          0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3,
          0x9D9E1AE0, 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7,
          0xF5720643, 0x07198540, 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B,
          0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE,
          0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, 0x69E9F0D5, 0x9B8273D6, 0x88D28022,
          0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, 0xF36E6F75, 0x0105EC76,
          0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 0x79B737BA,
          0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351,};
    
      private static final long LONG_MASK = 0xFFFFFFFFL;
      private static final int BYTE_MASK = 0xFF;
    
      private int crc = ~0;
    
      public void update(int b) {
        crc = crc32c(crc, b);
      }
    
      public void update(byte[] buffer, int offset, int length) {
        for (int i = offset; i < offset + length; i++) {
          crc = crc32c(crc, buffer[i]);
        }
      }
    
      public long getValue() {
        return (crc ^ LONG_MASK) & LONG_MASK;
      }
    
      public void reset() {
        crc = ~0;
      }
    
      private static int crc32c(int crc, int b) {
        return crc >>> 8 ^ CRC_TABLE[(crc ^ b & BYTE_MASK) & BYTE_MASK];
      }
    }
    
      static public final void writeLong(BufferedOutputStream out, long v, byte[] writeBuffer)
          throws IOException {
        writeBuffer[7] = (byte) (v >>> 56);
        writeBuffer[6] = (byte) (v >>> 48);
        writeBuffer[5] = (byte) (v >>> 40);
        writeBuffer[4] = (byte) (v >>> 32);
        writeBuffer[3] = (byte) (v >>> 24);
        writeBuffer[2] = (byte) (v >>> 16);
        writeBuffer[1] = (byte) (v >>> 8);
        writeBuffer[0] = (byte) (v >>> 0);
        out.write(writeBuffer, 0, 8);
      }
    
      static public final void writeInt(BufferedOutputStream out, int v, byte[] writeBuffer)
          throws IOException {
        writeBuffer[3] = (byte) (v >>> 24);
        writeBuffer[2] = (byte) (v >>> 16);
        writeBuffer[1] = (byte) (v >>> 8);
        writeBuffer[0] = (byte) (v >>> 0);
        out.write(writeBuffer, 0, 4);
      }
    
      private final BufferedOutputStream out;
    
      TFRecordFileWriter(Path p) throws IOException {
        out = new BufferedOutputStream(Files.newOutputStream(p));
      }
      
      
    
      TFRecordFileWriter(String path) throws IOException {
        out = new BufferedOutputStream(new FileOutputStream(path));
      }
    
      void writeExample(org.tensorflow.example.Example example) throws IOException {
        byte[] writeBuffer = new byte[8];
        int len = example.getSerializedSize();
        writeLong(out, len, writeBuffer);
        int crc = TFRecordFileWriter.MaskCrc(writeBuffer, 8);
        writeInt(out, crc, writeBuffer);
        byte[] body = example.toByteArray();
        out.write(body);
        crc = TFRecordFileWriter.MaskCrc(body, body.length);
        writeInt(out, crc, writeBuffer);
      }
    
      private static final long kMaskDelta = 0xa282ead8;
    
      private static int MaskCrc(byte[] buffer, int length) {
        Crc32c c1 = new Crc32c();
        c1.update(buffer, 0, length);
        long crc = c1.getValue();
        // Rotate right by 15 bits and add a constant.
        long l = (((crc >> 15) | (crc << 17)) + kMaskDelta) & 0xFFFFFFFF;
        return (int) l;
      }
    
      public void close() throws IOException {
        if (out != null)
          out.close();
      }
    
    }

    TFRecordNer:

    package com.xxx.protobuf;
    
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.tensorflow.example.Example;
    import org.tensorflow.example.Feature;
    import org.tensorflow.example.Features;
    import org.tensorflow.example.Int64List;
    
    import com.google.common.primitives.Longs;
    
    public class TFRecordNer {
    	public static void main(String[] args) {
    		String inputpath = "/Users/zhoumeixu/Desktop/all.txt";
    		String outputpath = "/Users/zhoumeixu/Desktop/ner/tfner.records-%s";
    		
    		transCorpus(inputpath,outputpath);
    		
    		
    	}
    	
    	
    	
    
    	public static void transCorpus(String inputpath, String outputpath) {
    		BufferedReader br = null;
    		TFRecordFileWriter tw = null;
    		
    		int max = 10000000;
    		int cn = 1;
    		int iter = 1;
    		Map<String, Integer> mapinput = getDict("file/nerinput.txt");
    		Map<String, Integer> mapoutput = getDict("file/neroutput.txt");
    
    		try {
    			br = new BufferedReader(new InputStreamReader(new FileInputStream(inputpath)));
    			tw = new TFRecordFileWriter(String.format(outputpath, 0));
    
    			String line = br.readLine();
    			long count=0l;
    
    			while (line != null) {
    				String[] lines = line.split("\t");
    				count++;
    
    				if (lines.length == 2) {
    
    					String[] inputs = lines[0].split("\\|");
    					String[] outputs = lines[1].split("\\|");
    
    				if (inputs.length == outputs.length) {
    					
    						long[] inputarr = new long[80];
    
    						long[] inputlabel = new long[80];
    						Arrays.fill(inputlabel, 8);
    						
    						
    						cn++;
    						if (cn > max) {
    							tw.close();//这里一定需要
    							tw = new TFRecordFileWriter(String.format(outputpath, iter));
    							iter++;
    							cn = 1;
    
    						}
    						
    						int len=inputs.length>80?80:inputs.length;
    
    						for(int i=0;i<len;i++) {
    							if (inputs[i] == " ") {
    								inputarr[i]=mapinput.get("blank");
    							} else {
    								inputarr[i]=mapinput.getOrDefault(inputs[i], 1);
    							}
    							
    							inputlabel[i]=mapoutput.getOrDefault(outputs[i], 8);
    						}
    						
    						List<Long> inputlist =Longs.asList(inputarr);
    						List<Long> labellist =Longs.asList(inputlabel);
    						
    						
    						
    						Example.Builder build = Example.newBuilder();
    						Feature.Builder input = Feature.newBuilder();
    						Feature.Builder label = Feature.newBuilder();
    
    						Int64List.Builder listinput = Int64List.newBuilder();
    
    						listinput.addAllValue(inputlist);
    						input.setInt64List(listinput);
    
    						Int64List.Builder listoutput = Int64List.newBuilder();
    						listoutput.addAllValue(labellist);
    						label.setInt64List(listoutput);
    
    						Features.Builder features = Features.newBuilder();
    						features.putFeature("input", input.build());
    						features.putFeature("label", label.build());
    
    						build.setFeatures(features);
    						
    						tw.writeExample(build.build());
    						
    
    						if (Math.random() < 0.000001) {
    							System.out.println("count is:" + count+"  cn is:"+cn);
    						}
    					}else {
    						// System.out.println(line);
    					}
    				} 
    
    				line = br.readLine();
    
    			}
    			br.close();
    			tw.close();
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    	
    
    	public static Map<String, Integer> getDict(String path) {
    		BufferedReader br = null;
    		Map<String, Integer> map = new HashMap<String, Integer>();
    		int i = 0;
    
    		try {
    			br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
    
    			String line = br.readLine();
    			while (line != null) {
    
    				map.put(line, i++);
    
    				line = br.readLine();
    
    			}
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return map;
    
    	}
    
    }
    

     

     

    生成tfrecord文件python读取:

    
    import  tensorflow  as tf
    
    def read_and_decode(filename_queue):
        reader = tf.TFRecordReader()
        _, serialized_example = reader.read(filename_queue)
        features = tf.parse_single_example(serialized_example, features={
            "input": tf.FixedLenFeature([80], tf.int64),
            "label": tf.FixedLenFeature([80], tf.int64)
        })
    
        x = tf.cast(features["input"], tf.int32)
        y = tf.cast(features["label"], tf.int32)
    
        return x, y
    
    
    
    
    
    def inputs(file, batch_size, num_epochs):
        if not num_epochs:
            num_epochs = None
        filename_queue = tf.train.string_input_producer(file)
        feature, label = read_and_decode(filename_queue)
        x, y = tf.train.shuffle_batch([feature, label], batch_size=batch_size, capacity=8888, min_after_dequeue=8887)
    
        return x, y
    
    if __name__=="__main__":
        sess = tf.Session()
        files = tf.train.match_filenames_once("/Users/zhoumeixu/Desktop/ner/tfner.records-*")
        x, y = inputs(files, 1, 11)
        sess.run(tf.global_variables_initializer())
        sess.run(tf.local_variables_initializer())
        print(sess.run(files))
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord, sess=sess)
        for i in range(10):
           x_result,y_result= sess.run([x,y])
           print(x_result,y_result)
    
        coord.request_stop()
        coord.join(threads)
        sess.close()

     

    结果:

    b'/Users/zhoumeixu/Desktop/ner/tfner.records-6'
     b'/Users/zhoumeixu/Desktop/ner/tfner.records-7'
     b'/Users/zhoumeixu/Desktop/ner/tfner.records-8'
     b'/Users/zhoumeixu/Desktop/ner/tfner.records-9']
    [[ 9157 11163 16887   611 18227   329 11772   258 19841 11163   589 16169
      19681  9956 13159  2257 18369 11586  4867  9922    48     0     0     0
          0     0     0     0     0     0     0     0     0     0     0     0
          0     0     0     0     0     0     0     0     0

    展开全文
  • Java生成xml文件的四种方式

    万次阅读 多人点赞 2017-10-28 19:33:56
    上一篇文章写了xml文件4种读取方式,本篇文章将简介使用四种方式对xml进行写入。

    绪论

    上一篇文章写了xml文件4种读取方式,本篇文章将简介使用四种方式对xml进行写入。

    一、Dom写入

    import java.io.File;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    import org.junit.Test;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    
    public class DomXml {
    
    	@Test
    	public void test(){
    		Long start = System.currentTimeMillis();
    		createXml();
    		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
    	}
    
    	/**
    	 * 生成xml方法
    	 */
    	public static void createXml(){
    		try {
    			// 创建解析器工厂			
    			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder db = factory.newDocumentBuilder();
    			Document document = db.newDocument();
    			// 不显示standalone="no"
    			document.setXmlStandalone(true);
    			Element bookstore = document.createElement("bookstore");
    			// 向bookstore根节点中添加子节点book
    			Element book = document.createElement("book");
    			
    			Element name = document.createElement("name");
    			// 不显示内容 name.setNodeValue("不好使");
    			name.setTextContent("雷神");
    			book.appendChild(name);
    			// 为book节点添加属性
    			book.setAttribute("id", "1");
    			// 将book节点添加到bookstore根节点中
    			bookstore.appendChild(book);
    			// 将bookstore节点(已包含book)添加到dom树中
    			document.appendChild(bookstore);
    			
    			// 创建TransformerFactory对象
    			TransformerFactory tff = TransformerFactory.newInstance();
    			// 创建 Transformer对象
    			Transformer tf = tff.newTransformer();
    			
    			// 输出内容是否使用换行
    			tf.setOutputProperty(OutputKeys.INDENT, "yes");
    			// 创建xml文件并写入内容
    			tf.transform(new DOMSource(document), new StreamResult(new File("book1.xml")));
    			System.out.println("生成book1.xml成功");
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.out.println("生成book1.xml失败");
    		}		
    	}
    }
    
    

    生成结果:
    这里写图片描述

    二、Dom4j写入

    import java.io.File;
    import java.io.FileOutputStream;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import org.junit.Test;
    
    public class Dom4jXml {
    
    	@Test
    	public void test(){
    		Long start = System.currentTimeMillis();
    		createXml();
    		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
    	}
    
    	/**
    	 * 生成xml方法
    	 */
    	public static void createXml(){
    		try {
    			// 1、创建document对象
    			Document document = DocumentHelper.createDocument();
    			// 2、创建根节点rss
    			Element rss = document.addElement("rss");
    			// 3、向rss节点添加version属性
    			rss.addAttribute("version", "2.0");
    			// 4、生成子节点及子节点内容
    			Element channel = rss.addElement("channel");
    			Element title = channel.addElement("title");
    			title.setText("国内最新新闻");
    			// 5、设置生成xml的格式
    			OutputFormat format = OutputFormat.createPrettyPrint();
    			// 设置编码格式
    			format.setEncoding("UTF-8");
    			
    			
    			// 6、生成xml文件			
    			File file = new File("rss.xml");
    			XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
    			// 设置是否转义,默认使用转义字符
    			writer.setEscapeText(false);
    			writer.write(document);
    			writer.close();
    			System.out.println("生成rss.xml成功");
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.out.println("生成rss.xml失败");
    		}
    	}
    }
    
    

    生成结果:
    这里写图片描述

    三、jDom写入

    import java.io.File;
    import java.io.FileOutputStream;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.Format;
    import org.jdom.output.XMLOutputter;
    import org.junit.Test;
    
    public class JDomXml {
    	
    	@Test
    	public void test(){
    		Long start = System.currentTimeMillis();
    		createXml();
    		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
    	}
    
    	/**
    	 * 生成xml方法
    	 */
    	public static void createXml(){
    		try {
    			// 1、生成一个根节点
    			Element rss = new Element("rss");
    			// 2、为节点添加属性
    			rss.setAttribute("version", "2.0");			
    			// 3、生成一个document对象
    			Document document = new Document(rss);
    			
    			Element channel = new Element("channel");
    			rss.addContent(channel);
    			Element title = new Element("title");
    			title.setText("国内最新新闻");
    			channel.addContent(title);
    						
    			Format format = Format.getCompactFormat();
    			// 设置换行Tab或空格
    			format.setIndent("	");
    			format.setEncoding("UTF-8");
    						
    			// 4、创建XMLOutputter的对象
    			XMLOutputter outputer = new XMLOutputter(format);
    			// 5、利用outputer将document转换成xml文档
    			File file = new File("rssNew.xml");
    			outputer.output(document, new FileOutputStream(file));
    
    			System.out.println("生成rssNew.xml成功");
    		} catch (Exception e) {
    			System.out.println("生成rssNew.xml失败");
    		}
    	}
    	
    }
    
    

    生成结果:
    这里写图片描述

    四、Sax写入

    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Result;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.sax.SAXTransformerFactory;
    import javax.xml.transform.sax.TransformerHandler;
    import javax.xml.transform.stream.StreamResult;
    
    import org.junit.Test;
    import org.xml.sax.helpers.AttributesImpl;
    
    public class SaxXml {
    
    	@Test
    	public void test(){
    		List<Book> bList = new ArrayList<Book>();
    		Book b = new Book();
    		b.setName("冰与火之歌");
    		b.setAuthor("乔治马丁");
    		b.setId("1");
    		b.setLanguage("English");
    		b.setPrice("86");
    		b.setYear("2014");
    		bList.add(b);
    		Long start = System.currentTimeMillis();
    		createXml(bList);
    		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
    	}
    
    	// 生成xml
    	public static void createXml(List<Book> bList){		
    		// 1、创建一个SAXTransformerFactory类的对象
    		SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
    		
    		try {
    			// 2、通过SAXTransformerFactory创建一个TransformerHandler的对象
    			TransformerHandler handler = tff.newTransformerHandler();
    			// 3、通过handler创建一个Transformer对象
    			Transformer tr = handler.getTransformer();
    			// 4、通过Transformer对象对生成的xml文件进行设置
    			// 设置编码方式
    			tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    			// 设置是否换行
    			tr.setOutputProperty(OutputKeys.INDENT, "yes");
    			// 5、创建一个Result对象
    			File f = new File("src/newbooks.xml");
    			// 判断文件是否存在
    			if(!f.exists()){
    				f.createNewFile();
    			}
    			Result result = new StreamResult(new FileOutputStream(f));
    			// 6、使RESULT与handler关联
    			handler.setResult(result);
    			
    			// 打开document
    			handler.startDocument();
    			AttributesImpl attr = new AttributesImpl();			
    			handler.startElement("", "", "bookstore", attr);
    			attr.clear();
    			
    			for (Book book : bList) {
    				attr.clear();
    				attr.addAttribute("", "", "id", "", book.getId());
    				handler.startElement("", "", "book", attr);
    				
    				// 创建name
    				attr.clear();
    				handler.startElement("", "", "name", attr);
    				handler.characters(book.getName().toCharArray(), 0, book.getName().length());
    				handler.endElement("", "", "name");
    				
    				// 创建year
    				attr.clear();
    				handler.startElement("", "", "year", attr);
    				handler.characters(book.getYear().toCharArray(), 0, book.getYear().length());
    				handler.endElement("", "", "year");
    				
    				// 创建author
    				if(book.getAuthor() != null && !"".equals(book.getAuthor().trim())){
    					attr.clear();
    					handler.startElement("", "", "author", attr);
    					handler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());
    					handler.endElement("", "", "author");
    				}
    				
    				// 创建price
    				if(book.getPrice() != null && !"".equals(book.getPrice().trim())){
    					attr.clear();
    					handler.startElement("", "", "price", attr);
    					handler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());
    					handler.endElement("", "", "price");
    				}
    				
    				// 创建language
    				if(book.getLanguage() != null && !"".equals(book.getLanguage().trim())){
    					attr.clear();
    					handler.startElement("", "", "language", attr);
    					handler.characters(book.getLanguage().toCharArray(), 0, book.getLanguage().length());
    					handler.endElement("", "", "language");
    				}
    				
    				handler.endElement("", "", "book");
    			}
    
    			handler.endElement("", "", "bookstore");
    			// 关闭document
    			handler.endDocument();
    			System.out.println("生成newbooks.xml成功");
    		} catch (Exception e) {
    			e.printStackTrace();
    			System.out.println("生成newbooks.xml失败");
    		}
    	}
    }
    
    

    生成结果:
    这里写图片描述

    五、其它

    	/**
    	 * 四种方式总结
    	 * 
    	 * dom基于tree,sax基于事件,JDOM和DOM4J基于底层API
    	 * 
    	 * dom生成的内容会保存到内存中,方便删除和修改
    	 * sax不能修改已经生成的标签
    	 * 
    	 * 添加JUnit在Libraries选择Add Library中的JUnit即可
    	 * 
    	 */
    

    (若有什么错误,请留言指正,3Q)

    展开全文
  • import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa....
  • 之前一直使用navicat本地连接mysql数据库,今天需要项目打包,使用.db文件连接数据,便于本地访问 方法 选择mysql数据表,选择导出,选择全部导出 选择文件格式(这里用txt做示范) 先把mysql导出成txt文件(或者excel...
  • java生成Access数据库文件

    千次阅读 2012-12-31 13:20:23
    java生成Access数据库文件  (2011-06-29 11:01:17) 转载▼ 标签:  access数据库   文件路径   绝对路径   文件拷贝   服务端   it 分类: Java ...
  • 如题。我刚接触SQLite,对于这个概念很模糊。用java的JDBC会直接生成一个db文件,这个db文件应该不是SQLite数据库吧?如果不是,SQLite数据库体现在哪里?还有,sqlite数据库与其生成db文件的关系。谢谢大家。
  • 前面博客文章介绍了使用shell命令生成*Db.java、*.thrift或*.yaml文件所需语句,但使用起来并不是那么顺手,还需一条条执行,很繁琐,于是想直接将上述命令生成一个shell脚本,执行时只需传入一个sql建表语句的文件
  • 生成解析sqlite DB文件笔记

    千次阅读 2015-06-03 15:05:35
    这两天学习处理用sqlite存储的db文件总结一点学习心得 1.打jar包的时候在注意在最后一步选择入口函数所在的类,不然运行jar的时候找不到入口  如果不在这里设置的话也可以在jar包的META-INFO/MANIFEST.MF里添加...
  • java生成并下载TXT文件

    千次阅读 2010-06-11 16:11:31
    List ml = db.queryMapList2(m_strLoginCityID, sql); //路径  String src = request.getRealPath("log") + "\\text.txt ";  if (ml != null) {  File f = new File(src);  ...
  • 2、由于data目录在真机没有root 情况下,不能访问,可以用模拟器(AS自带模拟器)查看greendao 生成db 文件 打开DDMS方式:Tools--&gt;Android--&gt;Android Device Monitor 3、打开DDMS发现却打不开...
  • EXCEL文件怎样转换为.S3DB后缀文件(我主要用谢少书库文件生成生成文件转换用)谢谢。http://dgxsh.ys168.com/
  • 蓝色部分为需要导入的包 , 红色部分为主题内容,用来生成Excel文件和部分格式设置. Excel当成是一个表格, 往里面插入数据需要 每一行每一列的插入, 所以 用两个for循环插入数据(见黄色部分代码) . 然后呢, 是已经...
  • 工作中写entry太繁琐,写了一个小程序反向生成。从而大大减少了工作量
  • Java 生成 Https 证书

    千次阅读 2019-01-28 17:11:13
    JAVA 生成 HTTPS 证书 ...[生成] - 命令生成.jks文件 直接在命令行中键入下面的命令 keytool -genkeypair -alias certificatekey -keyalg RSA -validity 365 -keystore shfqkeystore.jks 键入后会提下,分别录...
  • JAVA生成XML

    千次阅读 2016-06-02 15:08:48
    DOM方式:package ...import java.io.File; import java.io.IOException;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigura
  • 但是在项目路开发中为了节省开发时间,提高效率,我们可以通过myecplise自动生成实体类跟数据库表相关联的映射文件。下面就来演示一下。 1、首先我们应该打开DB Browser,里面已经有我们配置连接到mysql数据库,...
  • 2、配置hbm2java生成映射文件对应的POJO 1)、进入hibernate-extensions目录下tools/bin打开setenv.bat文件. 查找'set JDBC_DRIVER',得到 set JDBC_DRIVER=C:/Progra~1/SQLLIB/java/db2java.zip;C:/mm.mysql-...
  • java 生成 checksum

    千次阅读 2019-11-21 09:31:02
    回忆一下,自己是否在网站上下载文件时看到过Checksum这个东西,一串字符串? 比如,我们到Apache网站上去下载用于操作Excel的依赖包 - Apache POI,就可以看到checksum:SHA-256, SHA-512,如下图所示: 以poi-...
  • 现在项目需要用JAVA如何实现将服务器MySQL数据库转成手机端sql lite需要的db文件,并传给移动端直接插入手机的sqllite数据库
  • 以前写的程序,今天翻出来打了个jar包,der-db2xml.jar包含了crimson包和mysql驱动,der-db2xml-1.jar只是.class文件,需要自行加载上面的包和驱动 只是在mysql数据库下测试通过,其他的DB有朋友有兴趣可以帮测...
  • javaDB 数据库

    千次阅读 2010-07-01 21:27:00
    javaDB数据库
  • Java生成xml四种方式

    万次阅读 2016-12-30 23:22:39
    四种方式生成xml文件: DOM、SAX JDOM、DOM4J
  • 很多时候 我们写的java程序是分模块的,有很好的扩展机制,即我们可以为我们自己的java类添加插件,来运行将来某天我们可能开发出来的类,以下称这些类为插件类。 下边是一种简单的实现方法: Class A 作为程序的...
  • java的开源库中,javadbf开源库,是专门用来读写dbf文件的工具。 【开发环境】 1、java开发工具,jdk-8u131-windows-x64.exe。 2、IDE环境,eclipse-jee-neon-2-win32-x86_64, 3、javadbf三方包 javadbf-1.5.0....
  • Java程序如何生成mdb文件[MS Access]?

    千次阅读 2008-12-25 21:40:00
    转自:... (也就是在你的项目中包含一个空白的.mdb文件) 2. 将项目中的blank.mdb另存到新的路径. (可能是用户选择要导出mdb文件的保存路径) 3. 将.mdb作为数据源, 用JDBC ODBC添加数
  • 写了代码java代码,测试了在jdk 1.8下使用dom方式操作xml的技术可行性。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,150
精华内容 56,860
关键字:

java生成db文件

java 订阅