java.sql.SQLException: No database selected - why?
Solution 1
Firstly, I am considering my answer to show you another better way for connection with MySQL Database, it's much easier and less nu-expected Exception(s).
You need to do some steps:
- Download Connector/J and add it to your class path(if you are using an IDE there is add the
.jar
to the library, or there is many tuts on YouTube). - Create your database in your MySQL program.
-
See this example below example below I made for you demonstrates how to connect and execute queries on MySQL :
import java.sql.*; public class MySqlConnection { private String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; private String MYSQL_URL = "jdbc:mysql://localhost:3306/test"; private Connection con; private Statement st; private ResultSet rs; public MySqlConnection() { try { Class.forName(MYSQL_DRIVER); System.out.println("Class Loaded...."); con = DriverManager.getConnection(MYSQL_URL,"",""); System.out.println("Connected to the database...."); st = con.createStatement(); int c =st.executeUpdate("CREATE TABLE Accounts (Name VARCHAR(30))"); System.out.println("Table have been created."); System.out.println(c+" Row(s) have been affected"); con.close(); } catch(ClassNotFoundException ex) { System.out.println("ClassNotFoundException:\n"+ex.toString()); ex.printStackTrace(); } catch(SQLException ex) { System.out.println("SQLException:\n"+ex.toString()); ex.printStackTrace(); } } public static void main(String...args) { new MySqlConnection(); } }
Solution 2
Before you can add a table, you first have to select a database. you can create a new database with:
CREATE DATABASE database_name
you can connect to a specific database with:
String url = "jdbc:mysql://localhost/databasename";
String username = "test";
String password = "test";
Connection connection = DriverManager.getConnection(url, username, password);
Solution 3
Here is your updated example, which works for me.
public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("driver loaded...");
} catch (ClassNotFoundException e) {
System.out.println("Error in loading the driver..." + e);
System.exit(0);
}
try {
Connection dbConnection = DriverManager
.getConnection("jdbc:mysql://localhost/test?user=root&password=password");
System.out.println("Connection successful...");
Statement stmt = dbConnection.createStatement();
stmt.executeUpdate("create table Accounts ( name char(20) )");
} catch (SQLException e) {
System.out.println("database-ConnectionError: " + e);
System.exit(0);
}
}
Make sure you have added a proper mysql-connector to your build path. I used the: mysql-connector-java-5.1.24-bin.jar
sepphuber3
Updated on October 20, 2020Comments
-
sepphuber3 over 3 years
the last days I was trying to learn how to access mySQL databases via Java. I am able to load the driver and get a connection to the database ( at least I think so, since I don't get an exception there..)the code is:
import java.sql.*; public class test { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.println("driver loaded..."); } catch(ClassNotFoundException e){ System.out.println("Error in loading the driver..."+e); System.exit(0); } try { Connection dbConnection= DriverManager.getConnection("jdbc:odbc:test","root","password"); System.out.println("Connection successful..."); Statement stmt = dbConntection.createStatement(); stmt.executeUpdate("create table Accounts ( name char(20) )"); } catch(SQLException e) { System.out.println("database-ConnectionError: "+e); System.exit(0); } } }
When I execute it, it says:
driver loaded...
Connection successful...
database-ConnectionError: java.sql.SQLException: [MySQL][ODBC 5.2(w) Driver][mysqld-5.5.31]No database selectedI really don't know the problem, because I thought the database is selected during the "getConnection" process....
I tried to select a database by adding this line:stmt.executeUpdate("use test;");
after creating the Statement.
unfortunately it didn't work because I got another exception which said I should check on the syntax. I don't understand that either because in my commandline it works just fine... I don't know if it is possible to use these type of commands via Java so if it isn't, please forgive my mistake.
I hope you can help me and I didn't miss the solution during my own search!
Already Thanks to all who reply and use their time on my problems!
ps. If I forgot to point out some important infos ( I don't think i did) please ask:)
edit: I also tried to create a new database during runtime
stmt.executeUpdate("CREATE DATABASE test;");
this actually works, but the database won't be selected either...
-
sepphuber3 almost 11 yearsI've got the same problem there. Sorry I forgot to say that... A database is created but still not selected.. how do I do that?
-
Stefan Pante almost 11 yearsI connect to my database by appending the url where you connect with the database name if you are running localhost, localhost/databasename
-
Stefan Pante almost 11 yearsupdated answer with how i connect to my database. This method works fine in my program.
-
Stefan Pante almost 11 yearsI believe it should be possible.. But why do you want to use odbc instead of mysql? dev.mysql.com/downloads/connector/j
-
sepphuber3 almost 11 yearsthank you! I'll try the connector you used tomorrow! I really hope I can bring make it run^^
-
Azad almost 11 years@sepphuber3: your'r welcome, maybe and maybe ODBC(Not sure) :).