Re: How to initialise a final static String array
On 03/18/2012 09:20 AM, Arne Vajh??j wrote:
On 3/18/2012 8:55 AM, Cecil Westerhof wrote:
I want to use final for my static variables. I now do for example:
private static final Connection conn;
private static final Combo container;
and
static {
Connection tempConn;
Statement tempStmt;
try {
Class.forName("org.h2.Driver");
tempConn = DriverManager.getConnection(
"jdbc:h2:tcp://localhost/~/databases/stock", "sa", "");
tempStmt = tempConn.createStatement();
} catch (Exception e) {
tempConn = null;
tempStmt = null;
}
conn = tempConn;
stmt = tempStmt;
and
if (conn == null) {
throw new Exception("Could not initialise");
}
The only problem I have is with my array of String.
I now have:
private static final String[] titles = {
"Stock",
"Number",
"Dare",
"Container"
};
Because when I put it in the static block I get an error.
Beside this I can execute a statement like:
titles[0] = "changed";
Can I get the initialisation in the static part? And in such a way
that the elements can not be changed?
Other have already explained what you can not and what you can.
I will just add that you should carefully evaluate whether
you really want a class with a static field with a
database connection. In almost all cases it is a disaster
waiting to happen.
As I stated in an answer to the other multipost of this message:
Cecil Westerhof wrote:
> I want to use final for my static variables. I now do for example:
> private static final Connection conn;
DO NOT USE TAB CHARACTERS TO INDENT USENET POSTS.
Use spaces, up to four per indent level.
> private static final Combo container;
>
> and
> static {
> Connection tempConn;
> Statement tempStmt;
> try {
> Class.forName("org.h2.Driver");
> tempConn = DriverManager.getConnection(
> "jdbc:h2:tcp://localhost/~/databases/stock", "sa", "");
> tempStmt = tempConn.createStatement();
> } catch (Exception e) {
> tempConn = null;
> tempStmt = null;
> }
> conn = tempConn;
> stmt = tempStmt;
Static JDBC connections, and especially static JDBC statements, are a very bad
idea.
Very bad.
Statements should be local in scope, not even instance level. (Usually.) Even
connections should only be instance members if you have rather short-lived
objects holding them.
> and
> if (conn == null) {
> throw new Exception("Could not initialise");
What kind of exception /should/ you throw? Not 'Exception'.
> }
>
> The only problem I have is with my array of String.
> I now have:
> private static final String[] titles = {
> "Stock",
> "Number",
> "Dare",
> "Container"
> };
>
> Because when I put it in the static block I get an error.
That doesn't make sense. It's a perfectly legitimate initialization.
http://sscce.org/
please.
--
Lew
Honi soit qui mal y pense.
http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg