Generic Database Code Table Editor
Where c开发者_JS百科an I find a generic editor (JSP using Oracle's ADF) for create, read, update, and delete on any table?
Example usage:
- User selects the name of a table.
- User then adds a new row, or updates/deletes an existing row.
- User saves the changes.
Foreign keys would appear as drop-down lists, and all others as af:inputText
. (The user-friendliness of such an administrative function is not important.) This would allow code table data updates for any number of tables without having to write a new CRUD JSP each time.
Update #1
Oracle ADF 10g (not 11g), which prevents us from using ADF Faces RC.
Update #2
Shay Shmeltzer (and others) directed me to these resources:
- Husain Dalal's Blog
- ADF Faces RC: Dynamic Table
- Connnotea
- Oracle's Code Samples
I built a program (in Oracle Forms) on these lines. They can get complicated very quickly (eg do you show dates as dates or with times, with MM or Month formats, let alone BLOBs and CLOBs etc.) Drop down lists sound great, until you try it on a foreign key to a table with 5,000 rows (or 40,000+ zip codes).
Once it is 'live' for 100 tables, you then try to get it working for the 101st, which has a large varchar which you want on multiple lines, or has a surrogate key column which is meaningless to the user without a join to the parent table. So you change it for that, and have to re-test for the 100 screens that worked before.
In short, it is generally a lot easier to churn out a specific screen for a table than make a practical generic one that is widely usable. Then you just have a reference table that lists the table name and the relevant maintenance screen, and an application that calls the screen once the user selects the table.
You are using Oracle's ADF stuff. Does the ADF Faces functionality not do you want you want?
If you intend to create one yourself, then I suggest to take advantage of the MetaData
classes in the JDBC API. You can for example make use of Connection#getMetaData()
to get hold of an DatabaseMetaData
instance which provides information about all catalogs/schemes/tables/procedures of the connected database. Then there's the ResultSet#getMetaData()
which returns an ResultSetMetaData
instance which provides specific information about the columns. This, in combination with a dynamically populated UIData
component (e.g. h:dataTable
), must help you a lot further with this.
精彩评论