Skip to content

Simplify JDBC classes and interfaces #767

@gotson

Description

@gotson

While looking at #735 i noticed that we have similar classes in org.sqlite.core, org.sqlite.jdbc3 and org.sqlite.jdbc4.

For example for Statement:

  • abstract class CoreStatement
  • abstract class JDBC3Statement extends CoreStatement
  • class JDBC4Statement extends JDBC3Statement implements Statement

And for PreparedStatement:

  • abstract class CorePreparedStatement extends JDBC4Statement
  • abstract class JDBC3PreparedStatement extends CorePreparedStatement
  • class JDBC4PreparedStatement extends JDBC3PreparedStatement implements PreparedStatement, ParameterMetaData

That seems like a mess to me:

  • JDBC3Statement implements some methods from Statement while it doesn't implement the interface
  • CorePreparedStatement in core package depends on jdbc4 package

I'm not sure what's the intended use of the core package, as it would always have dependencies on java.sql anyway.

There are also some classes within org.sqlite like SQLiteConnection or SQLiteDataSource.

I suppose there's some history behind that:

  • JDBC 4 was introduced in version 3.8.2 along with Java 6
  • moved to Java 8 in version 3.32.3.3

While i am no expert in JDBC, it seems JDBC 4.2 shipped with Java 8.

Given we only support Java 8, we could probably remove the JDBC3 package, and have a single JDBC4 package instead.

I'm not sure what to do with the core package or the classes that are in org.sqlite to be honest.

If anyone wants to chime in, I would be interested to hear your thoughts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions