Trying to be everything to everyone results in being useless to anyone.
So the aim of DBvolution is to try and cover 90% of your daily queries with a fast and easy development tool. The 10% remaining is supported where possible, @DBSelectQuery is an example, but is also passed to the DBA to be fixed with a view or script.
The original 90% has expanded to cover 99% of my original aim, so now I refer to the 1%.... read more
A primary requirement of an database product is transactions: the safety mechanism that protects your data.
There a 2 mechanism for handling transactions in DBvolution: DBTransaction; and DBScript.
DBTransaction is a generic interface for creating a series of DBV statements and returning something back. The transaction is actually run using the DBDatabase's doTransaction() and doReadOnlyTransaction() methods:... read more
DBvolution objects can be used directly within JSP, with an important caveat:
You may need to add beaniness to your DBRow subclasses.
JSP has this strange behaviour of accessing fields as if they're fields but actually using get() and set() methods. So you can use the DBRow subclasses and access the fields easily but you'll get a strange error.
Personally I think it's a bug in JSP but I've been informed otherwise.... read more
Subclassing DBRow is a vital part of the DBvolution system.
Subclassing the subclasses is very helpful too.
If your database has multiple connections between 2 tables, subclassing the original subclass allows you to differentiate the connects and insert a little more semantic information.
public class Staff extends DBRow{
@DBForeignKey(Staff.Manager.class) DBInteger fkManager = DBinteger();
@DBForeignKey(Staff.TeamLeader.class) DBInteger fkTeamLeader = DBinteger();... [read more](/p/dbvolution/blog/2014/01/subclassing-dbrow-subclasses/)
DBV's main way of specifying criteria are the permitted/excluded methods of QueryableDatatype(QDT). This is a quick and powerful way to get the exact results you want for 90% of your queries. There is also @DBForeignKey and addRelationship to connect separate tables together.
However the reality of data is that it needs to be manipulated a lot. You need access to the database's functions to do that manipulation.... read more
Both 0.9.3 and 0.9.4 have been released this weekend, which is a bit enthusiastic really.
I wanted to get out 2 features this weekend in 0.9.3: The improved maths functions in NumberExpression and a new feature that Toaomalkster asked for.
Unfortunately this weekend was not looking good to do some real coding so I cleaned up the code a bit and then released 0.9.3.
Toaomalkster has a web app that is starting to use DBvolution a lot and it has a feature to search for any of the criteria rather than all of them. So he asked if I supported that.... read more
I didn't set out on a crusade against SQL, it just sort of happened.
In reality I love SQL: it's the most successful computing language since assembler, and it makes enormous amounts of work trivial using one of the easiest syntaxes available.
All the other programmers seem to hate or, at least, avoid it tho.
I agree with some of their complaints: a huge glob of SQL string in the middle of an innocent java method is ugly and error-prone; dynamically generating SQL strings is very easy to break; and JDBC requires you to float the database schema in your head at all times.... read more
Version numbers are weird.
Is 0.8.36 pronounced zero point eight point three six, or zero point eight point thirty six?
What is the difference between 0.8.36 and 0.9.0? I released both of them and I'm still not sure.
So the aim is that after 0.9.BIGNUMBER there will be a 1.0.0. However I can't guarantee there won't be a 0.10.0.
However once we hit 1.0.0 there will be no API changes, only bug fixes. All the API changes will go into DBVolution version 2.... read more
When you create a thing, you think it's the greatest thing since, well, since the last thing you created.
So I think is DBvolution is great! Multiple exclamation marks great!!!
However.
This is an insanely huge project.
Implement a Java abstraction layer of all the features of all the databases, using the features of modern IDEs to good effect, without requiring the end user to know SQL.
This will take a little longer than the weekend. In fact 7 months and counting.... read more
I have lots of opinions and I can argue all of them, even the giant space monster ones.
However most of them are irrelevant to DBvolution. Some, however, aren't.
My favourite DBvolution principle is: Don't Break The Compiler.
The compiler in this case is actually the IDE. Unfortunately most of the funky new "tools" for developers seem to have an antagonistic relationship with the IDE. They require interminable and enormous configuration files that the IDE can't parse, reside in strange locations, and never get referenced in the code (tho they are in the XML files of yet another "tool").... read more
I've been thinking for a while that I should probably blog about what's going on with DBV (as we call DBvolution when he's at home), it only just occurred to me that there might be one on SourceForge.
That's not quite true, I actually notice that Toaomalkster has one on his nice Tedhi site and something finally clicked.
So here I am at midnight, with headache, flu, and an ill girlfriend asleep in the bedroom typing away wondering what to say...... read more