save AbstractMetaDataRepo byte arrays to the database as binary
This commit is contained in:
@@ -63,4 +63,21 @@ public class StringUtil
|
||||
}
|
||||
|
||||
|
||||
private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
|
||||
/**
|
||||
* Converts the given byte array into a hex string representation. <br>
|
||||
* source: https://stackoverflow.com/a/9855338
|
||||
*/
|
||||
public static String byteArrayToHexString(byte[] bytes)
|
||||
{
|
||||
char[] hexChars = new char[bytes.length * 2];
|
||||
for (int i = 0; i < bytes.length; i++)
|
||||
{
|
||||
int v = bytes[i] & 0xFF;
|
||||
hexChars[i * 2] = HEX_ARRAY[v >>> 4];
|
||||
hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0F];
|
||||
}
|
||||
return new String(hexChars);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
package com.seibel.distanthorizons.core.sql;
|
||||
|
||||
import com.seibel.distanthorizons.core.pos.DhSectionPos;
|
||||
import com.seibel.distanthorizons.coreapi.util.StringUtil;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -44,16 +44,7 @@ public abstract class AbstractMetaDataRepo extends AbstractDhRepo<MetaDataDto>
|
||||
String posString = (String) objectMap.get("DhSectionPos");
|
||||
DhSectionPos pos = DhSectionPos.deserialize(posString);
|
||||
|
||||
String dataString = (String) objectMap.get("Data");
|
||||
int byteLength = dataString.length() - dataString.replace(",", "").length();
|
||||
byte[] dataByteArray = new byte[byteLength];
|
||||
|
||||
String[] byteStrings = dataString.split(",");
|
||||
for (int i = 0; i < byteLength; i++)
|
||||
{
|
||||
dataByteArray[i] = Byte.parseByte(byteStrings[i]);
|
||||
}
|
||||
|
||||
byte[] dataByteArray = (byte[]) objectMap.get("Data");
|
||||
|
||||
MetaDataDto metaFile = new MetaDataDto(pos, dataByteArray);
|
||||
return metaFile;
|
||||
@@ -66,14 +57,7 @@ public abstract class AbstractMetaDataRepo extends AbstractDhRepo<MetaDataDto>
|
||||
public String createInsertSql(MetaDataDto dto)
|
||||
{
|
||||
String pos = dto.pos.serialize();
|
||||
|
||||
StringBuilder dataStringBuilder = new StringBuilder();
|
||||
for (byte b : dto.dataArray)
|
||||
{
|
||||
dataStringBuilder.append(b).append(',');
|
||||
}
|
||||
String dataString = (dataStringBuilder.length() != 0) ? ("'"+dataStringBuilder.toString()+"'") : "NULL";
|
||||
|
||||
String dataString = createDataHexString(dto);
|
||||
return
|
||||
"INSERT INTO "+this.getTableName()+" (DhSectionPos, Data) " +
|
||||
"VALUES('"+pos+"',"+dataString+");";
|
||||
@@ -83,14 +67,7 @@ public abstract class AbstractMetaDataRepo extends AbstractDhRepo<MetaDataDto>
|
||||
public String createUpdateSql(MetaDataDto dto)
|
||||
{
|
||||
String pos = dto.pos.serialize();
|
||||
|
||||
StringBuilder dataStringBuilder = new StringBuilder();
|
||||
for (byte b : dto.dataArray)
|
||||
{
|
||||
dataStringBuilder.append(b).append(',');
|
||||
}
|
||||
String dataString = (dataStringBuilder.length() != 0) ? ("'"+dataStringBuilder.toString()+"'") : "NULL";
|
||||
|
||||
String dataString = createDataHexString(dto);
|
||||
return
|
||||
"UPDATE "+this.getTableName()+" " +
|
||||
"SET Data = "+dataString +
|
||||
@@ -98,4 +75,7 @@ public abstract class AbstractMetaDataRepo extends AbstractDhRepo<MetaDataDto>
|
||||
}
|
||||
|
||||
|
||||
/** This creates a string that Sqlite interprets as binary data. */
|
||||
private static String createDataHexString(MetaDataDto dto) { return "X'" + StringUtil.byteArrayToHexString(dto.dataArray) + "'"; }
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user