How do I find Oracle 12c connection URL? - java

I am using eclipse and java to connect to an oracle 12c database. But every time I run through the process, I get a connection fail error that reads:
java.sql.SQLException: Invalid Oracle URL specified
Here is what my code looks like:
import java.sql.*;
public class JdbcConnection {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin#localhost:1521:xe", "username", "password");
Statement statement = con.createStatement();
String sql = "select * from employees";
ResultSet rs = statement.executeQuery(sql);
while (rs.next())
System.out.println(rs.getInt(3) + " " + rs.getString(2));
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
I am using a windows 7 sp1 Ultimate (64 bit)
CPU: i5 2.85 ghz
RAM: 8GB
Oracle is installed in a separate hard drive (in the same computer).
EDIT:I have tried the first suggestion from this post: How do you find out the Oracle database's URL?
and I get an error that says:
ORA-00928: SELECT KEYWORD MISSING...
This error occurs when I run the oracle "SQL DEVELOPER" application on the startup menu and type the suggestions from post above.
Note: I want to connect to the database from eclipse and query it programatically.
Is there a way to find out what the correct connection URL is?
Please help.

Related

How to connect to an ODBC data source from Spring Boot? [duplicate]

This question already has answers here:
Replacement for JDBC-ODBC Bridge
(2 answers)
JDBC ODBC Driver Connection
(2 answers)
Closed 10 months ago.
I am developing a Spring Boot application that polls data from a legacy ODBC data source and inserts it into a MS SQL Server database.
I need to connect to DSN that is using Progress OpenEdge driver.
My R&D code to connect to DSN looks like this:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo
{
public static void main(String args[]) throws Exception
{
try
{
String query = "SELECT Name,Description,Qty,Cost FROM Stock";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:DSN_Name");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
String name = rs.getString("Name");
String desc = rs.getString("Description");
int qty = rs.getInt("Qty");
float cost = rs.getFloat("Cost");
System.out.println(name + ", " + desc + "\t: " + qty + "\t# $" + cost);
}
con.close();
}
catch (Exception e)
{
System.err.println(e);
}
}
}
But it throws java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver error when run. I did some Googling and found this is no longer supported. How can then I connect to this ODBC data source? I am using Java 17.
java.lang.classnotfoundexception sun.jdbc.odbc.jdbcodbcdriver
exception comes in Java 8 because it has removed the JDBC ODBC bridge
driver class "sun.jdbc.odbc.jdbcodbcdriver" from JDK and JRE. This
class is required to connect any database using Object database
connectivity driver e.g. Microsoft Access, but unfortunately, you
cannot use it from JDK 8 onward. In order to solve this error, just
use the Jackcess library or a commercial driver like HXTT. Normally,
in pre-Java 8 world, java.lang.classnotfoundexception
sun.jdbc.odbc.jdbcodbcdriver error comes when you try to connect to
the Microsoft Access database from Java using JDBC and JDBC ODBC
bridge driver is not available in the classpath.
Read more:
https://javarevisited.blogspot.com/2015/07/how-to-solve-javalangclassnotfoundexception-sun.jdbc.odbc.jdbcodbcdriver.html#ixzz7TTDxvBZp
We can still use JDBC-ODBC Bridge in Java 8 (Java 17 not tested) too, we can always pull the driver from JDK 7: Removal of JDBC ODBC bridge in java 8

JDBC Driver Does Not Exist

I’m trying to connect a Java program to a remote Oracle DB. After doing some research online, I decided that the easiest way to do this was with the Oracle JDBC driver. I downloaded and ran the jar file and got the message “***** JCE UNLIMITED STRENGTH IS INSTALLED *****.” The problem is that when I try to add the driver to my classpath (javac -classpath ojdbc8.jar Connect.java), I keep getting an error message saying “package oracle.jdbc.driver does not exist.” I’ve been researching how to fix this online, but I’m only getting confused. Any ideas on what I did wrong?
import java.sql.*;
public class Class1 {
public static void main (String args [])
throws SQLException
{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
// Connect to the database
// You must put a database name after the # sign in the connection URL.
// You can use either the fully specified SQL*net syntax or a short cut
// syntax as `<host>`:`<port>`:`<sid>`. The example uses the short cut syntax.
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:hr/hr#myhostname:1521:orcl",
"myUsername", "myPassword");
// Create a Statement
Statement stmt = conn.createStatement ();
// Select the ENAME column from the EMP table
ResultSet rset = stmt.executeQuery ("select ENAME from EMP");
// Iterate through the result and print the employee names
while (rset.next ())
System.out.println (rset.getString (1));
conn.close(); // ** IMPORTANT : Close connections when done **
}
}
The error is:
java: package oracle.jdbc.driver does not exist
Can you try to run the sample DataSourceSample.java? Make sure you have the JDBC driver in the classpath. You can also refer to this quickstart for detailed instructions.

Can you use JDBC to connect to just an instance without specifying a database?

I am working on an JAVA app that evaluates the data and log sizes of all databases on an instance and mails a monthly report. I am currently working with SQLServer2014. I am using an SQL query that calculates the size of all databases by querying sys.master_files.
The problem is that when using JDBC to make the query, it returns the error:
java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost"
I have tried connecting to particular databases and that works fine. Is there any way to do this query directly to sys.master_files using JDBC? Or is there a smarter way altogether to accomplish the same result?
Thanks
Your "No suitable driver found" error is simply due to a malformed connection URL. jdbc:microsoft:sqlserver is not valid.
As for connecting to an instance without specifying a particular database, this works fine for me:
// NB: no databaseName specified in the following
String connectionUrl = "jdbc:sqlserver://localhost;instanceName=SQLEXPRESS;integratedSecurity=true";
try (Connection conn = DriverManager.getConnection(connectionUrl)) {
String sql = "SELECT name FROM sys.master_files WHERE type_desc='ROWS' ORDER BY database_id";
try (
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql)) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
Note that sys.master_files is a system view that is available in all databases, so AFAIK it doesn't matter what the current database (catalog) is when you call it.

I am unable to run my program

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=student.mdb;DriverID=22;READONLY=true
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at withoutdsn.Main.main(Main.java:26)
Java Result: 1
In order to successfully execute a connection with a database through java,for example if you are using mysql follow the steps below:
Go to mysql website and download the appropriate driver for Java.
Then go to Project -> Properties -> Java Build Path -> Libraries (in Eclipse) and click on "add external Jars".
Add the .jar you downloaded.
Before doing anything else you should be sure to set your connection right.
For example:
//the default port of mysql is 3306
String url = "jdbc:mysql://127.0.0.1:3306/mydb";
String login = "root";
String passwd = "toor";
Connection cn = null;
Statement st = null;
ResultSet rs = null;
System.out.println("Connecting to database..");
try {
cn = DriverManager.getConnection(url, login, passwd);
System.out.println("Database Connected");
st = cn.createStatement();
String sql = "SELECT * FROM impacts";
rs = st.executeQuery(sql);
while (rs.next()){
//do something
}
}catch(Exception e){
System.out.println("Exception");
}finally{
if (cn != null ){
cn.close();
}
}
Are you using Java 8 and a JDBC-ODBC Bridge Driver? Bridge drivers are deprecated and not available in Java 8. See here.
If you want to run simple JDBC programs, instead of MS Access you could try using Java DB. Probably, Java DB works best with Netbeans IDE. There is nice tutorial here.

Data Source Name Not Found And No Default Driver Specified

I am trying to connect to MS Access database from my Java application. This is my code:
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// set this to a MS Access DB you have on your machine
String filename = "UserInformation.accdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
database+= filename.trim() + ";DriverID=22;READONLY=true}"; // add on to the end
// now we can get the connection from the DriverManager
Connection con = DriverManager.getConnection( database ,"","");
Statement st= con.createStatement();
int i=st.executeUpdate("insert into Users(User_Name,User_Password) values('"+username+"','"+password+"')");
System.out.println("Row is added");
}catch (Exception e) {
System.out.println("Error: " + e);
}
I get this exception: Data Source Name Not Found And No Default Driver Specified (ODBC)?
How can I fix it?
Thanks in advance
It can be several things. I encountered this problem in hacking a database from a 32-bit machine on my 64-bit desktop.
If you google issues using odbc with 32 vs 64 bit in Java you will see a good amount of material. What ultimately worked for me was switching from Java 5 to 6 and making sure my Eclipse runtime configurations were not setting an incompatible bit-mode.
Sorry for being a bit vague, but after spending a few hours trying to figure out I believe it can be very situational dependent.

Categories