'What is the default username and password for h2 when there's nothing explicit in JDBC?

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)
h2


Solution 1:[1]

This might work:

name = "sa"
password = ""

Solution 2:[2]

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 ""

Solution 3:[3]

In your application.properties file please add

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

hope it helps

Solution 4:[4]

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

Solution 5:[5]

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

Solution 6:[6]

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.

Solution 7:[7]

The user name is: sa and password not required

enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Stefan van den Akker
Solution 2 radekbaranowski
Solution 3 Ahmed
Solution 4 Janac Meena
Solution 5 notacorn
Solution 6 Milad
Solution 7 Lova Chittumuri