zoukankan      html  css  js  c++  java
  • 数据库BLOB的处理

    文件是一种抽象的数据形式,将文件存入数据库需要转为二进制形式存入BLOB字段,一般数据库管理工具无法对其直接操作,需要程序来存取。

    下面是postgre数据库往达梦数据库迁移数据实例,踩了很多坑

    先来看一下POM

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>ptd</artifactId>
        <version>1.0</version>
        <dependencies>
    
            <!--俩数据库驱动-->
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>42.2.5</version>
            </dependency>
            <dependency>
                <groupId>com.dm</groupId>
                <artifactId>Dm7JdbcDriver18</artifactId>
                <version>1.0.0</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <!--jdk8声明-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>8</source>
                        <target>8</target>
                    </configuration>
                </plugin>
                <!--打包时引入依赖包,在清单中写入程序入口-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.2.1</version>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <!--这里写你的main函数所在的类的路径名,也就是Class.forName的那个字符串-->
                                        <mainClass>ptd</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

    不在POM中声明jdk版本会报错,不引打包插件会导致清单中没有主程序入口,不引入依赖包的问题。

    再看一下主程序,博客园这个java代码高亮真捞呀要交给运维,所以使用了外部配置文件

    import java.io.ByteArrayInputStream;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Properties;
    
    
    
    public class ptd {
        public static void main(String[] args) {
            try (InputStream is = new FileInputStream("D:\ptd.properties");) {     //引入配置文件
                //props.getProperty()从配置文件读取数据
                Properties props = new Properties();
                props.load(is);
                Class.forName("dm.jdbc.driver.DmDriver");              //实际上需要提前装载驱动,postgre驱动比较高级不用
                try (Connection conn = DriverManager.getConnection(    //建立两个数据库连接
                        props.getProperty("postgre_url"), props.getProperty("postgre_user"), props.getProperty("postgre_password"));
                     Connection con1 = DriverManager.getConnection(
                             props.getProperty("dm_url"), props.getProperty("dm_user"), props.getProperty("dm_password")
                     );) {
                    String SQL_SELECT = "Select id_,rev_,name_,deployment_id_,bytes_,generated_ from " + props.getProperty("postgre_table");
                    PreparedStatement statement = conn.prepareStatement(SQL_SELECT);
                    ResultSet resultSet = statement.executeQuery();
                    String SQL_IN = "insert into " + props.getProperty("dm_table") + " values(?,?,?,?,?,?)";
                    PreparedStatement statement1 = con1.prepareStatement(SQL_IN);
                    int i = 0;
                    while (resultSet.next()) {
                        i++;
                        String id_p = resultSet.getString(1);
                        int rev_p = resultSet.getInt(2);
                        String name_p = resultSet.getString(3);
                        String deployment_id_p = resultSet.getString(4);
                        byte[] blob_p = resultSet.getBytes(5);
                        //Blob blob_p= resultSet.getBlob(5);       因为文件比较大getBlob()会报错,曲线救国使用byte数据来存取
                        int generated_p = (resultSet.getBoolean(6) ? 1 : 0);
                        statement1.setString(1, id_p);
                        statement1.setInt(2, rev_p);
                        statement1.setString(3, name_p);
                        statement1.setString(4, deployment_id_p);
                        statement1.setBlob(5, new ByteArrayInputStream(blob_p));
                        statement1.setInt(6, generated_p);
                        statement1.addBatch();
                    }
                    statement1.executeBatch();
                    System.out.println("Successfully migrated " + i + " rows of data");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
  • 相关阅读:
    2019-2020-1 20175317 《信息安全系统设计基础》第二周学习总结
    2019-2020-1 20175317 《信息安全系统设计基础》第一周学习总结
    2018-2019-2 20175317 实验五《网络编程与安全》实验报告
    20175317 《Java程序设计》个人项目
    回文数
    勾股数
    四方定理
    尼科彻斯定理
    实现mypwd
    2019-2020-1 20175301 20175305 20175318 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/freven/p/14384070.html
Copyright © 2011-2022 走看看