'java.sql.SQLException: No database selected - why?
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 selected
I 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...
Solution 1:[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:[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:[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
Solution 4:[4]
static final String DB_URL = "jdbc:mysql://localhost:3306/sys";
Use database name in the URL. It worked for me
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 | thegauravmahawar |
Solution 2 | |
Solution 3 | My-Name-Is |
Solution 4 | Laurel |