Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 液化从csv加载数据_Java_Database_Liquibase - Fatal编程技术网

Java 液化从csv加载数据

Java 液化从csv加载数据,java,database,liquibase,Java,Database,Liquibase,我想用csv文件中的数据加载PostgreSql表的整个列,但当我这样做时,我得到一个异常,即表的主键不应为null。看起来Liquibase正在创建新行以插入数据。是否有办法在现有行中加载数据 DatabaseChangeLog dbChangeLog = new DatabaseChangeLog(); Liquibase liquibase = new Liquibase(dbChangeLog, new FileSystemResourceAccessor(), database); C

我想用csv文件中的数据加载PostgreSql表的整个列,但当我这样做时,我得到一个异常,即表的主键不应为null。看起来Liquibase正在创建新行以插入数据。是否有办法在现有行中加载数据

DatabaseChangeLog dbChangeLog = new DatabaseChangeLog();
Liquibase liquibase = new Liquibase(dbChangeLog, new FileSystemResourceAccessor(), database);
ChangeSet loadChangeSet = new ChangeSet(id + "", "nasri", false, false, "", "", "", liquibase.getDatabaseChangeLog());

LoadDataChange loadDataChange = new LoadDataChange();
loadDataChange.setTableName(key);
loadDataChange.setChangeSet(loadChangeSet);
loadDataChange.setResourceAccessor(new FileSystemResourceAccessor());

String path = context.getBundle().getVersion() + "." + key + "." + columnKey + "." + targetFieldKey + ".csv";
loadDataChange.setFile(path);

loadDataChange.setSchemaName("public");

LoadDataColumnConfig columnConfig = new LoadDataColumnConfig();
columnConfig.setName(targetFieldKey);
columnConfig.setType("String");
loadDataChange.addColumn(columnConfig);
loadChangeSet.addChange(loadDataChange);
liquibase.getDatabaseChangeLog().addChangeSet(loadChangeSet);
liquibase.update("");

有一个类叫做:

描述说:

将CSV文件中的数据加载或更新到现有表中。与loadData不同的是,它发出一个SQL批处理来检查记录是否存在。如果找到,则更新记录,否则插入记录。另外,生成用于回滚的DELETE语句


看起来它应该满足您的要求(不过我自己没有使用过)。

要更新记录,LoadUpdateDatchange对我不起作用。它总是试图插入新记录。它不会更新现有记录

如果要更新现有记录,您应该使用下面的方法

<update tableName="someTable">

   <column name="update_column_name" value="updated value" />

   <where> primaryKey = condition</where>

</update>


primaryKey=条件