I have a problem establishing an connection to my MySql database via Java/Android. I have a database file (MyDatabase.db) on a Windows7 computer in my network. When I'm developing from another Windows7 computer (the file is accessible via the Windows Explorer and I can make changes to the database via SQLDatabaseExplorer) out of Eclipse the following Code works, but when installing my Application on my Galaxy Tab the "DriverManager.getConnection()" returns null.
try {
String url = "http://192.168.178.21/Users/test/userdata/Database/MyDatabase.db";
Class.forName ("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection (url);
System.out.println ("Database connection established");
} catch (SQLException e) {
Log.d("SQLException", "e.toString()");
}
The SQLException logged in LogCat is:
java.sql.SQLException: path to '//192.168.178.21/Users/test/userdata/Database/MyDatabase.db': '/192.168.178.21' does not exist
I guess my problem lies in the url String...? But I did not figure out how to change it, so that the connection can be established.
Thanks for any help,
Tim
EDIT:
Thanks for your help so far! I have written the question yesterday out of my mind, without looking onto my code... I'm sorry for that, because I have mixed up a lot of things... It is not a MySql-database but a sqlite-database... But I think that doesn't change a lot in coding. I'm using an jdbc sqlite driver. When starting the lines below in an Java-Eclipse Project everything works fine and the connection can be established. But on my Device I still got the Nullpointer...
Yesterday I have changed my code so that it should fit your advices. But the problem still resists... To be sure that it does not have to do with some rights or network settings I have copied the DB-File onto my Androiddevice and tried to connect to it directly with the following lines of code:
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection("jdbc:sqlite://mnt/sdcard/MyVideos34.db");
if (conn == null) {
Log.d("ConnectionError", "Connection is null");
return;
}
But also here getConnection throws a NullPointer and I don't know why... Did somebody have a assumption why the connection can be established out of Eclipse and fails on my Androiddevice? May I could have a wrong driver, that does not work from the device, but from Eclipse...?
Thanks in advance!
The url format for the MYSQL conenction string is
jdbc:mysql://[host][,failoverhost...][:port]/[database] »
[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
If the host name is not specified, it defaults to 127.0.0.1. If the port is not specified, it defaults to 3306, the default port number for MySQL servers.
jdbc:mysql://[host:port],[host:port].../[database] »
[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
Here is a sample connection URL:
jdbc:mysql://localhost:3306/sakila?profileSQL=true
please change accordingly
JDBC urls have the form : jdbc:mysql:/// but look at the duplicate code. You probably don't want to connect directly to a database from a mobile like this but will prefer a web service wrapper to do it.
try {
String url = "jdbc:mysql://localhost:3306/MyDatabase?user=root&password=root";
Class.forName ("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection (url);
System.out.println ("Database connection established");
} catch (SQLException e) {
System.out.println("SQLException" + e.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Related
I would like to connect my own GUI project to siteground MySQL server by jdbc:mysql protocol .
The host name is sgp39.siteground.asia and the port is 3306.
I tried using this command :
public void Connect() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://sgp39.siteground.asia:3306/dbdyyh2gyaltys", "username", "password");
} catch (ClassNotFoundException ex) {
} catch (SQLException ex) {
}
}
But it doesn't work.
May I know what should I do next?
How can I find the correct path?
I found this, maybe you use MySQL 8 dependency (com.mysql.cj.jdbc.Driver), try change dependency in pom.xml or change manual lib in your project to 'com.mysql.jdbc.Driver' https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html
The reason is I only add the IPv6 address in the SiteGround webhosting manage site ,the solution is I have to entry IPv4 address.
I am getting an error: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
EDIT: Link to the Stack Trace
Here is the last "part" of the error, saying it's a NullPointerException:
at armyofdragons.mule.mysql.Database.<init>(Database.java:28)
at Main.main(Main.java:6)
Caused by: java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2997)
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1934)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1863)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
... 14 more
`
My URL String:
"jdbc:mysql://127.0.0.1:3306/schemaname?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT"
My Connection code snippet:
connection = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
try {
connection = DriverManager.getConnection(URL, "admin", "passwordcensored123");
} catch (SQLException e) {
e.printStackTrace();
}
I have used the proper schema/database name, username, password, and every other "requirement" needed. I also set the bind-address to 127.0.0.1 and port to 3306. The database is ONLINE and I have made sure that the service is RUNNING.
I found out the issue. I was using the wrong version of JDBC / J Connector. A previous StackerOverflow post that I was looking at that provided a solution to adding it to IntelliJ was old and I did not check if it was the up-to-date version or not.
For anyone wanting to know how to add it to IntelliJ, go to Project Structure -> Libraries -> Add (+) -> Add from Maven... -> Enter "mysql:mysql-connector-java:8.0.11" -> Click "Okay".
According to https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-connect-drivermanager.html you can use the actual jdbc connection string in DriverManager.getConnection(), have you tried that?
This sort of thing might be very well also a MySql server vs connector version incompatibility issue. Double check your connector version.
Your snippet is a bit tiny, you might want to paste a bit more generously.
I want to create sybase DB connection in java application.
I've added jconn4.jar to my project, but when I'm connecting to DB in code I have exception ClassNotFoundException: com.sybase.jdbc4.jdbc.SybDriver.
My connection:
SqlConnect() {
try {
DriverManager.registerDriver(new com.sybase.jdbc4.jdbc.SybDriver());
} catch (SQLException e) {
System.err.println("SQL exception " + e.getMessage());
}
}
And also
public void connect() {
try {
connection = DriverManager.getConnection("jdbc:sybase:Tds:localhost:5000", "DBA", "sql");
connection.setAutoCommit(false);
} catch (SQLException e) {
}
}
I want to connect to demo PowerBuilder database, with params:
DSN=EAS Demo DB V125;UID=dba;PWD=sql
What I'm doing wrong?
ADDED
Also when I'm trying to create database connection via intelij database work plugin i also have the same error.
Make sure you have respected jars included on your classpath.
The following works for me:
Use Class.forname to load the drivers
Recommended Approach:
Class.forName("sybase.jdbc.sqlanywhere.IDriver")
con = DriverManager.getConnection("jdbc:sqlanywhere:uid=DBA;pwd=sql");
Another way around:
DriverManager.registerDriver((Driver) Class.forName("sybase.jdbc.sqlanywhere.IDriver").newInstance());
con = DriverManager.getConnection("jdbc:sqlanywhere:uid=DBA;pwd=sql");
The following link will help you in installing drivers:
How to connect Sybase database using Java code in NetBeans?
So, the other jdbc type driver resoled my problem - I connected sajdbcX driver and changed connection string:
connection = DriverManager.getConnection("jdbc:sqlanywhere:uid=DBA;pwd=sql");
So, also thanx Mark Rotteveel for advice - I removed driver register code as redurdrant.
And thank all for ideas.
I have the following piece of code,
String url = "jdbc:oracle:thin:#127.0.0.1:1521:oracle";
Connection con=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
con=DriverManager.getConnection(url, "user", "password");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
I don't understand the url part of it. When i run this i get java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
On searching for this error in google,
Based on suggestions, i checked telnet 127.0.0.1 1521 in cmd prompt which didn't succeed.
Now what might be the problem? What should i do if telnet is not able to connect ?
Also, Please explain what does this URL will actually do? Am new to this please help.
The message "could not establish the connection" usually means that the connection could not be made - there is something incorrect about the connection url (IP address, db name) or the credentials (username/password).
If you need to create a database locally, you can use Oracle XE. (http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html) SQL Developer is a useful Oracle GUI for accessing the database or for trying out your connection information. (http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html)
I have been Googling this for the last 3 hours and I can not believe how little information there is on it. I have used the ODBC drivers to connect in C++ applications, PDO in PHP etc and I thought connecting in Java would be easy.
I get this exception java.sql.SQLException no suitable driver found. when I try
// Connect to the database
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/schema_name", "root", "");
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(NULL, ex);
System.exit(0);
}
I am using Netbeans and in the Services tab I can connect to the database perfectly and it says it is using the com.mysql.jdbc.Driver driver so it must be on the computer so it is really annoying me now.
Any help would be great thanks.
Ensure the the MySQL JDBC Driver is loaded into the classpath prior to attempting to connect to the database
DriverManager will automatically load the driver class com.mysql.jdbc.Driver.
You are not including the driver, try that
// Connect to the database
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/schema_name", "root", "");
}
catch(ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Driver not found\n"+ ex);
System.exit(0);
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
System.exit(0);
}
This is what, called Loading Class at Runtime.