My requirement is to check can we connect to a database with no schema defined through a java program and create a database.
this works fine
Connection connection =
DriverManager.getConnection("jdbc:db2://wcspocca-db.cloudapp.net:50001/db2inst1","vmadmin","password#123;");
database: db2
schema: db2inst1
but
Connection connection =
DriverManager.getConnection("jdbc:db2://wcspocca-db.cloudapp.net:50001/","vmadmin","password#123;");
fails
WHY?
com.ibm.db2.jcc.am.mo: [jcc][10165][10045][4.7.85] Invalid database URL syntax: jdbc:db2://wcspocca-db.cloudapp.net:50001/. ERRORCODE=-4461, SQLSTATE=42815
DriverManager.getConnection("jdbc:db2://wcspocca-db.cloudapp.net:50001/!!DBNAME!!","vmadmin","password#123;");
How I usually connect to a database using jave is like the following: Spacing it out to allow you to read the text below
//Wide Scope Variables
static Connection conn = null; //right now this connection is off
static String dbURL = "database url"; //I use SQL developer and your able to grab the connection url there
static String user = "This can be empty and ask user for input of hard code the user name";
static String pass = "same as above";
In the method where you want to check the driver and connection I usually do it like this
//Register the Driver
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e)
{
System.err.println(e.getMessage());
}
//Set up connection
try
{
conn = DriverManager.getConnection(dbURL,user,password);
conn.clearWarnings();
stmt = conn.createStatement();
}
catch(SQLException e)
{
System.err.println(e.getMessage());
}
The first try catch code registers the driver to the SQL developer then the second try catch sets up the connection to the database. This helped save me a lot of head aches and I find it the most Direct route when using java.
Because in the second example the database is not specified. You can find the requirements in the DB2 JDBC documentation:
>>-+-jdbc:db2:------+--//--server--+---------+--/--database----->
+-jdbc:db2j:net:-+ '-:--port-'
'-jdbc:ids:------'
>--+---------------------------+-------------------------------\><
'-:--| connection-options |-'
The database parameter is not optional.
check the url carefully, after the port number if you do not put database name which you want to connect then how it will connect. Its like you are giving a home address whitout the plot number.
Related
I'm making a simple registration program to practise. For this I need to connect to a database. I tried diffrent things, but nothing worked out
I'm using Xampp and MySQL Workbench. I did't set any password or username. On MySQL Workbench it says:
Connection:
Name: demo
Host: 127.0.0.1
Port: 3306
Server: mariadb.org binary distribution
Version: 10.1.37-MariaDB
Connector: C++ 8.0.14
Login User: root
Current User: root#localhost
SSL: Disabled
import java.sql.*;
public class Driver {
public static void main(String[] args) {
try {
// 1. Get connection to the database
// Connection myConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "student", "student");
//Connection myConnection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo");
String url = "jdbc:mysql://127.0.0.1:3306/mysql";
Connection myConnection = DriverManager.getConnection(url);
//2. Create a statement
Statement myStatement = myConnection.createStatement();
//3. execute sql query
ResultSet myResultSet = myStatement.executeQuery("SELECT * FROM students");
//4. process the result set
while(myResultSet.next()) {
System.out.println(myResultSet.getString("lname") + ", " + myResultSet.getString("fname"));
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
java.sql.SQLSyntaxErrorException: Access denied for user ''#'localhost' to database 'mysql'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:827)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at jdbcdemo.Driver.main(Driver.java:14)
This answer is speculative, because I haven't actually tested it against MySQL, but here are two problems I see with your current approach:
You mentioned that you didn't create any username or password. However, as far as I know, even if you didn't create a username, then you would be using whatever default comes with MySQL (usually root).
Not setting a password is possible, but in that case you should still be using the three parameter variant of DriverManager.getConnection, which accepts a JDBC URL, a username (the default), and a password (empty, in your case).
Putting this all together, you might try:
String url = "jdbc:mysql://127.0.0.1:3306/mysql";
Connection myConnection = DriverManager.getConnection(url, "root", "");
Then, try to use your connection assuming the above works.
The connection URL is in this format:
mysql://<username>:<password>#<host>:<port>/<db_name>
This question already has answers here:
Connect Java to a MySQL database
(14 answers)
Closed 7 years ago.
I'm trying to create a connection to a database in my Java program. I'm not sure if i have the correct address for it though in my code.
Below is my connection code:
public static Connection ConnectDB() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "n1nlhdb5501-02.shr.prod.ams1.secureserver.net";
Connection conn = DriverManager.getConnection(url, "user1", "password");
return conn;
} catch (Exception e) {
System.err.println(e.getMessage());
return null;
}
}
Unfortunately, Im really unsure of whether I have put the correct information into the url and the "Class.forname()" lines. I know the one is to load the actual driver and the other is the address of the database but i'm not sure if the information I have input is correct, because the connection is unsuccessful.
Is there anyway I could find the exact address that i need to use in the url string through an SQL statement maybe?
Also, I'm not sure if I'm loading the correct drivers for the jar file which i'm using, its called 'mysql-connector-java-5.1.35-bin.jar'
All help appreciated!
Thanks in advance
Marko
This is how you can connect MySQL database using Java.
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://x.x.x.x:3306/databaseName", "username", "password");
Statement smt = con.createStatement(); //Create Statement to interact
ResultSet r = smt.executeQuery("select * from users where(AccountID='" + q + "');");
while (r.next()) {
name = r.getString("name");
}
con.close
} catch (Exception e) {
e.printStackTrace();
}
In your case URL will be like...
String URL = "jdbc:mysql://n1nlhdb5501-02.shr.prod.ams1.secureserver.net:3306/databaseName"
Edit:
It seems 3306 port is closed.
Nmap scan report for n1nlhdb5501-02.shr.prod.ams1.secureserver.net (37.148.204.135)
Host is up (0.075s latency).
Not shown: 97 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
3306/tcp closed mysql
I want to connect oracle DB with JAVA, I have code like this :
Class.forName("oracle.jdbc.driver.OracleDriver");
dbURL = "jdbc:oracle:thin:#localhost:1521:DB";
con = DriverManager.getConnection(dbURL, "sys as sysdba" , "");
return con;
it's not working, but I tried with command promt like this conn /as sysdba, it can be Connected. I have beed googling about this article but all of code not work.
Anyone can help.
Thanks
To log on as SYSDBA with the JDBC Thin driver you must configure the server to use the password file. So you need to provide password for sys.
Try catching the exception, it must provide more information about the problem.
public static Connection getConnection(String name, String pass) {
connection = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DB_URL, name, pass);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return connection;
}
Do you get the same error when trying to connect with a different username and password instead of "sys as sysdba" , "" ?
Also, in the dbURL, check if the url and database name are set correctly.
The problem most likely lies in the empty password. Try substituting "" with "()". If the sys really uses empty password, it must work. If it doesn't help, consider changing the password manually by alter user
This is my code:
public class ConnectDB {
Connection conn;
Scanner kb=new Scanner(System.in);
public String ID;
public ConnectDB()
{
try
{
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println ("Driver successfully loaded");
}
catch (ClassNotFoundException c)
{
System.out.println ("Unable to load database driver");
}
//connect to the database
try
{
String filename = "PATPhase2DB.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=";
database += filename.trim () + ";DriverID=22;READONLY=true}";
conn = DriverManager.getConnection (database,"","");
System.out.println ("Connection to database successfully established");
}
catch (Exception e)
{
System.out.println ("Unable to connect to the database");
}
}
The Messages Are:
Driver successfully loaded
Unable to connect to the database
java.lang.NullPointerException
This has worked on a different computer than mine, connecting to the database through exactly the same code. I am also running Windows 8.
This is very common error.
Reason is that some other application is using your database (most commonly you have opened database in Microsoft Access).
Close it and enjoy.
EDIT:This answer is for error user mentioned in comment(unable to open registry key 'temporary (volatile))
add this to your code:
System.out.println ("Unable to connect to the database");
System.out.println ("Exception: " + e.getMessage());
then you can get a deeper glimpse of what went wrong
Your Driver= name is missing a space. You've defined it as...
Driver={Microsoft Access Driver (*.mdb,*.accdb)};
...but it should be...
Driver={Microsoft Access Driver (*.mdb, *.accdb)};
You also have a stray } at the end of your connection string, but that doesn't seem to hurt anything.
In this case you need to mention the entire path of your access database file and the url between extensions (.mdb, *.accdb) space is mandatory e.g.:
String database="C:/Users/GIRI/Desktop/fdsfkdsfj/abc.accdb";
String url="jdbc:odbc:Driver={Microsoft Access Driver (.mdb, *.accdb)};DBQ=" + database + ";DriverID=22;READONLY=true";
I am working on a interface in java swing.we have four system connected with a lan.the interface is for accessing the database from the other system in the same local area network i used the following code to access the database by giving the ip address,database name,tablename but i could not connect the other systems database.how can i do this?
public void dbconnection() {
String name = "";
String port = "3306";
String user = "systech";
String pass = "systech";
String dbname = "cascade_demo";
String host="192.168.1.61";
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://"+host+":"+ port + "/" + dbname;
System.out.println("URL:" + url);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url, user, pass);
String qry2 = "select * from item_master";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(qry2);
while (rs.next()) {
name = rs.getString(1);
System.out.println("Name:" + name);
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
System.out.println("Exception:" + e);
}
}
Use below code
public void dbconnection() {
String name = "";
String port = "3306";
String user = "systech";
String pass = "systech";
String dbname = "cascade_demo";
String host="192.168.1.61";
try {
String url = "jdbc:mysql://"+host+":"+ port + "/" + dbname;
Class.forName("com.mysql.jdbc.Driver").newInstance ();
Connection con = DriverManager.getConnection(url, user, pass);
String qry2 = "select * from item_master";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(qry2);
while (rs.next()) {
System.out.println("Name:" + rs.getString(1));
}
rs.close();
st.close();
con.close();
} catch (Exception e) {
System.out.println("Exception:" + e);
}
}
Also, make sure to include jar file for connecting. You will get jar file here.
Update 1:
So, you have a
CommunicationsException: Communications link failure
I'm quoting from this answer which also contains a step-by-step MySQL+JDBC tutorial:
If you get a SQLException: Connection refused or Connection timed out or a MySQL specific CommunicationsException:
Communications link failure, then it means that the DB isn't reachable at all. This can have one or more of the following causes:
IP address or hostname in JDBC URL is wrong.
Hostname in JDBC URL is not recognized by local DNS server.
Port number is missing or wrong in JDBC URL.
DB server is down.
DB server doesn't accept TCP/IP connections.
DB server has run out of connections.
Something in between Java and DB is blocking connections, e.g. a firewall or proxy.
To solve the one or the other, follow the following advices:
Verify and test them with ping.
Refresh DNS or use IP address in JDBC URL instead.
Verify it based on my.cnf of MySQL DB.
Start the DB.
Verify if mysqld is started without the --skip-networking option.
Restart the DB and fix your code accordingly that it closes connections in finally.
Disable firewall and/or configure firewall/proxy to allow/forward the port.
Update 2
If your system is Windows, go to Start>>Run.
Type command. This will open command prompt.
Type "ping 192.168.1.61"
You might get reply in below format.
Pinging 192.168.1.61 [192.168.1.61] with 32 bytes of data:
Reply from 192.168.1.61: bytes=32 time=101ms TTL=124
If you don't get something in above format, then your MYSQL Server with ip 192.168.1.61 is NOT REACHABLE. Ask your team to start the server first. :(
If you have Linux version, open terminal and follow step 3.
Also check below link. Those might help you...
http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
You should down load the jdbc driver and replace
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
by
Class.forName("com.mysql.jdbc.Driver");
If you still have issues asfter replacing Obdc stuff, please post the exception.
ALso check firewall settings and DB permissions.
If you'll get exception your app will not free system resources. This will work better:
} finally {
try {
rs.close();
st.close();
con.close();
} catch( Exception e ) {
e.printStackTrace();
}
}