Невозможно десериализовать значение типа `java.sql.Timestamp` из String

Сегодня у меня была очень похожая проблема - мне нужно было скопировать большую таблицу (5 миллионов строк) из MySql в MS SQL.

Вот шаги, которые я сделал (в Ubuntu Linux):

  1. Создал таблицу в MS SQL, структура которой соответствует исходной таблице в MySql.
  2. Установленная командная строка MS SQL: https://docs.microsoft.com / en-us / sql / linux / sql-server-linux-setup-tools # ubuntu
  3. Сбросил таблицу из MySql в файл:
mysqldump \
    --compact \
    --complete-insert \
    --no-create-info \
    --compatible=mssql \
    --extended-insert=FALSE \
    --host "$MYSQL_HOST" \
    --user "$MYSQL_USER" \
    -p"$MYSQL_PASS" \
    "$MYSQL_DB" \
    "$TABLE" > "$FILENAME"
  1. В моем случае файл дампа был довольно большим, поэтому я решил разбить его на несколько небольших фрагментов (по 1000 строк каждый) - split --lines=1000 "$FILENAME" part-
  2. Наконец, я повторил эти маленькие файлы, выполнили некоторые замены текста и выполнили части по одному на сервере MS SQL:
export SQLCMD=/opt/mssql-tools/bin/sqlcmd

x=0

for file in part-*
do
  echo "Exporting file [$file] into MS SQL. $x thousand(s) processed"

  # replaces \' with ''
  sed -i "s/\\\'/''/g" "$file"

  # removes all "
  sed -i 's/"//g' "$file"

  # allows to insert records with specified PK(id)
  sed -i "1s/^/SET IDENTITY_INSERT $TABLE ON;\n/" "$file"

  "$SQLCMD" -S "$AZURE_SERVER" -d "$AZURE_DB" -U "$AZURE_USER" -P "$AZURE_PASS" -i "$file"
  echo ""
  echo ""

  x=$((x+1))
done

echo "Done"

Конечно, вам нужно будет заменить мои переменные, такие как $AZURE_SERVER, $TABLE , и т.д с твоим.

Надеюсь, что это поможет.

0
задан Arefe 3 March 2019 в 16:13
поделиться

1 ответ

Мне пришлось изменить определение на что-то вроде:

@Column(name = "requestTimestamp")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone="Europe/Berlin")
private Timestamp requestTimestamp;

Вызов cURL будет:

$ curl -i -X POST -H "Content-Type:application/json" -d "{  \"productId\": \"Product ID\", \"requestTimestamp\": \"2017-07-16T22:54:01.754Z\",  \"stock\" : {  \"id\": \"Stock ID\", \"timestamp\": \"2000-07-16T22:54:01.754Z\",  \"quantity\": \"250\"  }}" http://localhost:8080/api/v1/products/createProduct

Хранилище базы данных:

enter image description here

0
ответ дан Samuel Philipp 3 March 2019 в 16:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: