I\'m dealing with lots of different currencies in my application, and I want to know what the \"best\" way is to store them in an SQLite3 database.
I\'m leaning towa
best currency DataType is BigDecimal and in sqlite you can store it as a VARCHAR field
ormlite convert BigDecimal to string when you store it.
ormlite doc for BigDecimal
Given that SQLite 3 will use up to 8 bytes to store INTEGER types, unless you are going to have numbers greater than 10^16, you should be just fine.
To put this in perspective, the world gross domestic product expressed in thousandths of a USD (a mill) is about 61'000'000'000'000'000 which sqlite3 has no problem expressing.
sqlite> create table gdp (planet string, mills integer);
sqlite> insert into gdp (planet, mills) values ('earth', 61000000000000000000);
sqlite> select * from gdp;
earth|61000000000000000000
Unless you are handling interplanetary accounting, I don't think you have to worry.
In financial software currency is always represented as fixed-point (decimal). You can emulate it in SQLite using integers (64-bit integer holds up to 18 digits).
SQLite has no BigDecimal field So I use the SQLite Integer type and convert like so: BigDecimal bd = new BigDecimal("1234.5678"); int packedInt = bd.scaleByPowerOfTen(4).intValue(); // packedInt now = 12345678 Now save packedInt to SQLite Integer field. To go back to BigDecimal: BigDecimal bd = new BigDecimal(packedInt); // bd = 12345678 bd = bd.scaleByPowerOfTen(-4); // now bd = 1234.5678
I'd say string/text. You can always convert it to whatever culture if you need to do that as well.