51

From a program, I created a H2 database without specifying any user or password in the JDBC URL.

Now I'm trying to access that database with the Script tool. The doc says to use -user sa in the default case. That doesn't work, and it still doesn't work if I either add -password sa or remove -user. What am I missing?

/opt/h2/bin java -cp h2-1.3.161.jar org.h2.tools.Script -url jdbc:h2:/data/jug/jas-coref.h2 -user sa -password sa -script /data/jug/ris-start.sql
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Wrong user name or password [28000-161]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:169)
at org.h2.message.DbException.get(DbException.java:146)
at org.h2.message.DbException.get(DbException.java:135)
at org.h2.engine.Engine.validateUserAndPassword(Engine.java:301)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:146)
at org.h2.engine.Engine.createSession(Engine.java:121)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:285)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.h2.tools.Script.execute(Script.java:152)
at org.h2.tools.Script.execute(Script.java:133)
at org.h2.tools.Script.runTool(Script.java:101)
at org.h2.tools.Script.main(Script.java:51)
bmargulies
  • 97,814
  • 39
  • 186
  • 310

9 Answers9

65

Well, duh, that didn't take long.

The answer is -user "".

bmargulies
  • 97,814
  • 39
  • 186
  • 310
  • 4
    There's an enforced delay in accepting one's own answer. If I didn't think that some other person was fairly likely to step in this particular hole, I'd have just deleted the whole business, but as it is I think that there's some chance of utility. – bmargulies Jan 01 '12 at 20:53
  • 1
    This was actually useful to me. Glad you kept the question and anwer. – HRJ May 28 '12 at 17:29
  • @bmargulies Glad that you have thought "Someone might step in this hole". Because I did and wasted about 4 hours of my precious time. Also, Spark's java libraries sucks big time! – Romeo Sierra Jun 08 '20 at 04:01
50

This might work:

name = "sa"
password = ""
Stefan van den Akker
  • 6,661
  • 7
  • 48
  • 63
Katayoun
  • 517
  • 4
  • 2
  • @Ruddy I think it does, whether or not it's a good answer is a matter for up or down votes. – James Hay Apr 08 '15 at 09:35
  • While this may answer the question it’s always a good idea to put some text in your answer to explain what you're doing. Read [how to write a good answer](http://stackoverflow.com/help/how-to-answer). – Jørgen R Apr 08 '15 at 09:38
  • 3
    For `jdbc:h2:file:~/test`, use: username="", password="" – Gilbert Feb 14 '21 at 08:55
6

In case you got stuck with the default non-blank user when running the client, the full set of parameters will get you past that:

java -cp <path_to_h2>\h2.jar org.h2.tools.Shell -url "jdbc:h2:file:<jdbc_url>" -driver "org.h2.Driver" -user "" -password ""
radekbaranowski
  • 366
  • 4
  • 5
1

In your application.properties file please add

       spring.datasource.username=username
       spring.datasource.password=password

hope it helps

Ahmed
  • 39
  • 7
1

The user name is: sa and password not required

enter image description here

Lova Chittumuri
  • 2,994
  • 1
  • 30
  • 33
0

Note: If you are getting this error when trying to login via Intellij, you need to enable MIXED_MODE. See this answer for more details: Connect to H2 database using IntelliJ database client

Janac Meena
  • 3,203
  • 35
  • 32
0

in my case i had mispelled the username and password properties, so i assume spring tried to use the defaults which didn't work

notacorn
  • 3,526
  • 4
  • 30
  • 60
0

I don't know if it helps, but I had a case in which, using H2 in memory for testing, the connection failed if I tried to connect with different credentials multiple times. This test:

public class H2Test {
    @Test
    public void differentCredentials() throws SQLException {
        connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "foo", "");
        connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "bar", "");
    }
    private void connect(
            String url, String username, String password
    ) throws SQLException {
        Properties props = new Properties();
        props.put("user", username);
        props.put("password", password);
        DriverManager.getConnection(url, props);
    }
}

fails with error:

org.h2.jdbc.JdbcSQLException: Wrong user name or password [28000-196]

This instead doesn't:

public class H2Test {
    @Test
    public void sameCredentials() throws SQLException {
        connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "foo", "");
        connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "foo", "");
    }
    private void connect(
            String url, String username, String password
    ) throws SQLException {
        Properties props = new Properties();
        props.put("user", username);
        props.put("password", password);
        DriverManager.getConnection(url, props);
    }
}

That said, I couldn't find a piece of documentation that confirms this behaviour.

Milad
  • 836
  • 7
  • 13
-3

try this:

java -cp h2*.jar org.h2.tools.Script -user "sa" -password "" -url "jdbc:h2:path_to_your_db_file"
robin
  • 197
  • 1
  • 4