java jdbc连接oracle_Java使用JDBC连接Oracle 11gR2

本文介绍了如何使用Java JDBC连接Oracle 11gR2数据库,包括下载ojdbc6.jar驱动,放置到JDK的libext目录,启动Oracle服务,以及提供了一个简单的Java程序示例,展示了连接数据库、执行SQL和关闭连接的过程。
摘要由CSDN通过智能技术生成

http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html下载Oracle 11gR2的数据库驱动程序:ojdbc6.jar

下载完成后,将其放到JDK的jre\lib\ext下,如D:\dev\Java\jdk1.7.0_21\jre\lib\ext

674670f241803b89a9131651659472e9.png

(2)启动oracle服务器端的监听器和Oracle服务

启动监听器:

$ lsnrctl start

6bc48913d09ca52c02111841a442dd62.png

启动Oracle服务:

$ sqlplus /nolog

SQL> conn / as sysdba

SQL> startup

d2e9555a2ff4475bdb478e1bc8b96bef.png

1.简单形式:

ConnOracle.java

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class ConnOracle{

public static void main(String[] args){

Connection conn = null;

Statement smt = null;

ResultSet rs = null;

try{

//1.加载数据库驱动

//Class.forName("oracle.jdbc.driver.OracleDriver");//会抛出ClassNotFoundException

Class.forName("oracle.jdbc.OracleDriver");//会抛出ClassNotFoundException

//2.使用DriverManager获取数据库连接

conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.180:1521:orcl", "scott", "tiger");//会抛出SQLException

System.out.println("数据库连接成功: "+conn);

//3.使用Connection来创建一个Statement对象

smt = conn.createStatement();//会抛出SQLException

//4.使用Statement对象执行SQL语句

/*

Statement有三种执行sql语句的方法:

1. execute可执行任何SQL语句--返回一个boolean值

如果执行后的第一个结果是ResultSet,则返回true,否则返回false

2. executeQuery 执行Select语句--返回查询到的结果集

3. executeUpdate 用于执行DML语句和DDL语句--返回一个整数,执行DML代表被SQL语句影响的记录条数;执行DDL语句返回0

*/

rs = smt.executeQuery("select * from emp");//会抛出SQLException

//5.操作结果集

/*

ResultSet对象有两类方法操作查询结果集

1. next()将记录指针下移一行,first(),last()等

2. getXxx(列索引|列名)获取有记录指针指向行,特定列的值

*/

while(rs.next()){//会抛出SQLException

System.out.println(rs.getInt(1) + "\t"

+ rs.getString(2)+"\t"

+ rs.getString(3));

}

}

catch(ClassNotFoundException e){

e.printStackTrace();

}

catch(SQLException e){

e.printStackTrace();

}

finally{

try{

//6.回收数据库资源

if(rs != null){

//关闭ResultSet

rs.close();//会抛出SQLException

}

if(smt != null){

//关闭Statement

smt.close();

}

if(conn != null){

//关闭Connection

conn.close();

}

}

catch(SQLException e){

e.printStackTrace();

}

}

}

}

运行结果:

fa4f9b096d1ae49de2741758213bcc80.png

2.抽象成一个类

(1)DBConn.java

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBConn{

private Connection conn = null;

private Statement smt = null;

private ResultSet rs = null;

//private static String DB_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";

private static String DB_CLASS_NAME = "oracle.jdbc.OracleDriver"; //数据库驱动类的字符串

private static String DB_URL = "jdbc:oracle:thin:@192.168.1.180:1521:orcl"; //数据库URL

private static String USERNAME = "scott"; //登陆数据库的用户名

private static String PASSWORD = "tiger"; //密码

/* 连接数据库 */

private void getConn(){

try{

//1 加载数据库驱动

Class.forName(DB_CLASS_NAME);

//2 使用DriverManager获取数据库连接

conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);

}

catch(ClassNotFoundException e){

e.printStackTrace();

}

catch(SQLException e){

e.printStackTrace();

}

if(conn == null){

System.err.println("警告:DriverManager.getConnection()获得数据库连接失败.\r\n\r\n连接类型:"

+ DB_CLASS_NAME + "\r\n连接位置:" + DB_URL);

}

System.out.println("数据库连接成功: "+conn);

}

/* 执行查询语句 */

public ResultSet executeQuery(String sql){

getConn();

System.out.println("SQL:> "+sql);//测试使用,打印即将执行的SQL语句

try{

//3 使用Connection对象创建Statement对象

smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

//4 使用Statement对象执行SQL语句

rs = smt.executeQuery(sql);

}

catch(SQLException e){

e.printStackTrace();

}

return rs;

}

/* 执行DDL和DML语句 */

public int executeUpdate(String sql){

int result = 0;

getConn();

System.out.println("SQL:> "+sql);//测试使用,打印即将执行的SQL语句

try{

//3 使用Connection对象创建Statement对象

smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

//4 使用Statement对象执行SQL语句

result = smt.executeUpdate(sql);

}

catch(SQLException e){

e.printStackTrace();

}

return result;

}

/* 关闭数据库连接 */

public void close(){

if(rs != null){

//关闭ResultSet

try{

rs.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

if(smt != null){

//关闭Statement

try{

smt.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

if(conn != null){

//关闭Connection

try{

conn.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

System.out.println("数据库连接已关闭: "+conn);

}

}

(2)DBConn_Demo.java

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBConn_Demo{

public static void main(String[] args){

/* 1 执行查询操作 */

DBConn db1 = new DBConn();

String sql1 = "select * from emp";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs1 = db1.executeQuery(sql1);

//操作结果集

try{

while(rs1.next()){

System.out.println(rs1.getInt(1) + "\t"

+ rs1.getString(2)+"\t"

+ rs1.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db1.close();

/* 2 执行DDL操作 */

DBConn db2 = new DBConn();

String sql2 = "create table demo(id int, name varchar(10), age int)";

int result1 = db2.executeUpdate(sql2);

System.out.println("有" + result1 + "条记录受到影响!");

db2.close();

/* 3 执行插入操作 */

DBConn db3 = new DBConn();

String sql3 = "insert into demo values(1, 'huhu', 18)";

int result2 = db3.executeUpdate(sql3);

System.out.println("有" + result2 + "条记录受到影响!");

db3.close();

/* 4 执行查询操作 */

DBConn db4 = new DBConn();

String sql4 = "select * from demo";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs2 = db4.executeQuery(sql4);

//操作结果集

try{

while(rs2.next()){

System.out.println(rs2.getInt(1) + "\t"

+ rs2.getString(2)+"\t"

+ rs2.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db4.close();

/* 5 执行删除操作 */

DBConn db5 = new DBConn();

String sql5 = "delete from demo";

int result3 = db5.executeUpdate(sql5);

System.out.println("有" + result3 + "条记录受到影响!");

db5.close();

/* 6 执行查询操作 */

DBConn db6 = new DBConn();

String sql6 = "select * from demo";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs3 = db6.executeQuery(sql6);

//操作结果集

try{

while(rs3.next()){

System.out.println(rs3.getInt(1) + "\t"

+ rs3.getString(2)+"\t"

+ rs3.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db6.close();

/* 7 执行DDL操作 */

DBConn db7 = new DBConn();

String sql7 = "drop table demo";

int result = db7.executeUpdate(sql7);

System.out.println("有" + result + "条记录受到影响!");

db7.close();

}

}

运行结果:

e1f097bb6e00c2854cee0cdc00f446d3.png

3.将数据库连接信息保存到一个dbconfig.properties配置文件中

这样的做法好处是:当我们需要把应用程序从开发环境移植到生产环境时,无需修改源代码,只需要修改dbconfig.properties配置文件即可。

(1)dbconfig.properties:

#DB_CLASS_NAME(数据库驱动类的类名)

DB_CLASS_NAME=oracle.jdbc.OracleDriver

#DB_CLASS_NAME=com.mysql.jdbc.Driver

#DB_URL(要连接数据库的地址)

DB_URL=jdbc:oracle:thin:@192.168.1.180:1521:orcl

#DB_URL=jdbc:mysql://127.0.0.1:3306/test

#USERNAME(数据库用户)

USERNAME=scott

#USERNAME=root

#PASSWORD(密码)

PASSWORD=tiger

#PASSWORD=

(2)DBConn1.java:

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.io.FileInputStream;

import java.util.Properties;

public class DBConn1{

private Connection conn = null;

private Statement smt = null;

private ResultSet rs = null;

//private static String DB_CLASS_NAME = "oracle.jdbc.driver.OracleDriver";

private static String DB_CLASS_NAME = "oracle.jdbc.OracleDriver"; //数据库驱动类的字符串

private static String DB_URL = "jdbc:oracle:thin:@192.168.1.180:1521:orcl"; //数据库URL

private static String USERNAME = "scott"; //登陆数据库的用户名

private static String PASSWORD = "tiger"; //密码

private static String propFileName = "dbconfig.properties"; //指定资源文件保存的位置

private static Properties props = new Properties();

public DBConn1(){

try{

//使用Properties类来加载属性文件

FileInputStream in=new FileInputStream(propFileName);

props.load(in);

DB_CLASS_NAME = props.getProperty("DB_CLASS_NAME");

DB_URL = props.getProperty("DB_URL");

USERNAME = props.getProperty("USERNAME");

PASSWORD = props.getProperty("PASSWORD");

}

catch (Exception e) {

e.printStackTrace();

}

}

/* 连接数据库 */

private void getConn(){

try{

//1 加载数据库驱动

Class.forName(DB_CLASS_NAME);

//2 使用DriverManager获取数据库连接

conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);

}

catch(ClassNotFoundException e){

e.printStackTrace();

}

catch(SQLException e){

e.printStackTrace();

}

if(conn == null){

System.err.println("警告:DriverManager.getConnection()获得数据库连接失败.\r\n\r\n连接类型:"

+ DB_CLASS_NAME + "\r\n连接位置:" + DB_URL);

}

//System.out.println("数据库连接成功: "+conn);

}

/* 执行查询语句 */

public ResultSet executeQuery(String sql){

getConn();

System.out.println("SQL:> "+sql);//测试使用,打印即将执行的SQL语句

try{

//3 使用Connection对象创建Statement对象

smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

//4 使用Statement对象执行SQL语句

rs = smt.executeQuery(sql);

}

catch(SQLException e){

e.printStackTrace();

}

return rs;

}

/* 执行DDL和DML语句 */

public int executeUpdate(String sql){

int result = 0;

getConn();

System.out.println("SQL:> "+sql);//测试使用,打印即将执行的SQL语句

try{

//3 使用Connection对象创建Statement对象

smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

//4 使用Statement对象执行SQL语句

result = smt.executeUpdate(sql);

}

catch(SQLException e){

e.printStackTrace();

}

return result;

}

/* 关闭数据库连接 */

public void close(){

if(rs != null){

//关闭ResultSet

try{

rs.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

if(smt != null){

//关闭Statement

try{

smt.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

if(conn != null){

//关闭Connection

try{

conn.close();

}

catch(SQLException e){

e.printStackTrace();

}

}

//System.out.println("数据库连接已关闭: "+conn);

}

}

(3)DBConn1_Demo1.java:

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBConn1_Demo1{

public static void main(String[] args){

/* 1 执行查询操作 */

DBConn1 db1 = new DBConn1();

String sql1 = "select * from emp";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs1 = db1.executeQuery(sql1);

//操作结果集

try{

while(rs1.next()){

System.out.println(rs1.getInt(1) + "\t"

+ rs1.getString(2)+"\t"

+ rs1.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db1.close();

/* 2 执行DDL操作 */

DBConn1 db2 = new DBConn1();

String sql2 = "create table demo(id int, name varchar(10), age int)";

int result1 = db2.executeUpdate(sql2);

System.out.println("有" + result1 + "条记录受到影响!");

db2.close();

/* 3 执行插入操作 */

DBConn1 db3 = new DBConn1();

String sql3 = "insert into demo values(1, 'huhu', 18)";

int result2 = db3.executeUpdate(sql3);

System.out.println("有" + result2 + "条记录受到影响!");

db3.close();

/* 4 执行查询操作 */

DBConn1 db4 = new DBConn1();

String sql4 = "select * from demo";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs2 = db4.executeQuery(sql4);

//操作结果集

try{

while(rs2.next()){

System.out.println(rs2.getInt(1) + "\t"

+ rs2.getString(2)+"\t"

+ rs2.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db4.close();

/* 5 执行删除操作 */

DBConn1 db5 = new DBConn1();

String sql5 = "delete from demo";

int result3 = db5.executeUpdate(sql5);

System.out.println("有" + result3 + "条记录受到影响!");

db5.close();

/* 6 执行查询操作 */

DBConn1 db6 = new DBConn1();

String sql6 = "select * from demo";//字符串型的sql语句末尾不要带分号

//执行SQL语句,返回结果集

ResultSet rs3 = db6.executeQuery(sql6);

//操作结果集

try{

while(rs3.next()){

System.out.println(rs3.getInt(1) + "\t"

+ rs3.getString(2)+"\t"

+ rs3.getString(3));

}

}

catch(SQLException e){

e.printStackTrace();

}

db6.close();

/* 7 执行DDL操作 */

DBConn1 db7 = new DBConn1();

String sql7 = "drop table demo";

int result = db7.executeUpdate(sql7);

System.out.println("有" + result + "条记录受到影响!");

db7.close();

}

}

运行结果:

7f5a19772c70218ba107dc2082b25a47.png

679289e737329814e3453ae4d3e7d2da.png

大小: 73.9 KB

8bf2ccef970021941bcedf6b722a0f78.png

大小: 31.9 KB

af9dbd40d9fdcdec808539ac056dc5a0.png

大小: 12.2 KB

8b42e7b30fae8f265e000ef56de4b487.png

大小: 8.6 KB

312a52074a2e1cfda0c3a9799ed390f9.png

大小: 55.7 KB

ef16084e5040722f2135b35e0f5cc006.png

大小: 13.8 KB

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2013-06-05 01:27

浏览 5068

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值