JDBC操作Oracle数据库
背景知识
含义:JDBC是一种java数据库连接技术,能实现java程序对各种数据库的访问。由一组使用java语言编写的类和接口组成,这些类和接口称为JDBC API,他们位于java.sql 以及javax.sql(扩展内容,x就是扩展的意思) 中。
作用:JDBC就相当于java和数据库之间的一座桥梁。可以建立和数据库之间的访问连接;将编写好的SQL语句发送到数据库中执行;对数据库返回的执行结果进行处理。
JDBC API : DriverManager类,管理jdbc的驱动;Connection 接口,连接数据库并担任传送数据的任务;Statement接口,由Connection产生负责执行SQL语句;ResultSet接口,保存Statement执行后所产生的查询结果。
java官方提供接口,数据库厂商提供接口实现类(驱动)。
得把数据库服务启动才能连接,别忘了哦~
1、创建Java项目,导入JDBC驱动JAR包
(1)在项目下创建lib目录
(2)将ORACLE主目录\jdbc\lib\ojdbc6.jar复制到lib目录下
(3)在ojdbc6.jar上右键-->Build Path-->Add To Build Path
2、在myeclipse 10下建立数据库的连接
作用:加载驱动和获得连接时容易把URL写错,在这里配置好了,等到写时会有一个提示功能
Window-->Open Perspective(打开视图)-->Myeclipse DataBase Explorer-->Myeclipse Derby (右键 new)-->Driver Template(模板,样板,范本) 下拉列表选择Oracle (Thin Driver)-->Driver Name 写ORCL -->剩下的就是获得数据库连接的url name password 正常填写就可以了。-->添加JARS ,去目录下找到ojdbc6.jar-->save password --> Test Driver 测试连接是否建立成功.
3、JDBC访问数据库的步骤
- 加载驱动类:Class.forName("JDBC驱动类的名称"),如果不存在给定的类,则抛出异常,ClassNotFoundException——重复操作项
- Connection conn=DriverManager.getConnection(url,userName,password),会搜索整个驱动程序列表,寻找匹配的驱动程序,用户名和密码是可选的——重复操作项
- Statement stmt=conn.createStatement();连接成功后,用该连接创建Statement接口的实例
- int rows=stmt.executeUpdate(sql); //insert、update、delete 都用executeUpdate()方法,且返回受影响行数
- ResultSet res=stmt.executeQuery(sql); //查询用 executeQuery()方法,返回结果集,next()判断结果集是否为空,如果不为空,调用getXxx()方法,得到记录中字段对应的值
- while(res.next()){
/**从当前行中提取各列的值
将第1列的数据以int类型取出
int id=res.getInt(1);
将第2列的数据以String类型取出
String name=res.getString(2);
将第3列的数据以String类型取出
String sex=res.getString(3);*/
//这两种写法都可以,建议采取第二种写法
//将id列的值以int类型取出
int id=res.getInt("编号"); //括号中可写别名
//将name列的值以String类型取出
String name=res.getString("姓名");
//将sex列的值以String类型取出
String sex=res.getString("性别");
System.out.println(id+"\t"+name+"\t"+sex);
} - 关闭对象时,按照与创建时相反的顺序,先关闭ResultSet,再关闭Statement,最后关闭Connection——重复操作项
四、PreparedStatement对象
“以上为基本连接方式,但有不完善的地方,比如插入SQL语句时,极易发生SQL注入,用户修改sql语句,为了防止,特使用PreparedStatement对象”。
PreparedStatement对象接口implements 自Statement,使用更加灵活,更有效率。SQL语句中写占位符?,预处理(预编译)SQL语句,一旦完成预编译,SQL语句的结构就确定下来,不会因为用户输入的数据改变SQL语句的执行结构,从而避免SQL注入攻击。
pstmt=conn.prepareStatement(sql);
pstmt.setXxx(1,value值);//绑定参数
五、数据库辅助类
- 配置文件:jdbc.properties,用键值对的方式保存数据库连接参数。在项目src下新建file,add key-value key为名字可随便取,value则不可
- ConfigManager类,在讲ConfigManager类之间先大致说下懒汉和
//饿汉单例模式
public class EagerSingleton {
//使用private修饰构造函数,禁止外部代码直接通过构造函数创建对象
private EagerSingleton(){ }
//声明私有静态成员,保存唯一的实例,立即创建唯一实例
private static EagerSingleton instance=new EagerSingleton();
//定义公共方法,获取唯一实例
public static EagerSingleton getInstance(){
return instance;
} }//懒汉单例模式
public class LazySingleton {
//私有构造方法
private LazySingleton(){ }
//声明私有静态实例
private static LazySingleton instance=null;
//定义公共的获取实例的方法
public static LazySingleton getIstance(){
//在准备获取实例时进行判断,如果还未实例化,则创建唯一实例
if(instance!=null){
instance=new LazySingleton();
}
return instance;
}
}下面开始写:
//用来加载配置文件的单例类
public class ConfigManager {
//加载进来的配置参数
private Properties props=null;
//唯一实例
private static ConfigManager instance=null;
//私有构造方法,负责加载配置文件
private ConfigManager(){
try {
InputStream is=ConfigManager.class.getResourceAsStream("/jdbc.properties");
props.load(is);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//获得ConfigManager的唯一实例
public static ConfigManager getInstance(){
if(instance==null){
instance=new ConfigManager();
}
return instance;
}
//获得参数
public String getProperty(String name) {
return props.getProperty(name);
} }public class DBHelper {
//静态块在类加载时执行一次
static{
String driverClass=ConfigManager.getInstance().getProperty("jdbc.driver_class");
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
//在静态块中发生异常时,需要抛出ExceptionInInitializerError类型的异常
throw new ExceptionInInitializerError(e);
}
}
//获得连接
public static Connection getConnection()throws SQLException {
String url=ConfigManager.getInstance().getProperty("jdbc.url");
String userName=ConfigManager.getInstance().getProperty("jdbc.username");
String password=ConfigManager.getInstance().getProperty("jdbc.password");
return DriverManager.getConnection(url, userName, password);
}
//关闭资源
public void closeAll(Connection conn,Statement stmt,ResultSet res) {
try {
if(res!=null){
res.close();
}
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }最后把上边两个类导成JAR包,将jar包和配置文件一起安在需要的项目下。终于完事啦,断断续续写了好几天。噜啦啦~~~
JDBC操作Oracle数据库的更多相关文章
- JDBC操作Oracle数据库——实际操作过程中的小总结
1.对数据库中,表的每一行数据记录的增删改查 增:insert into 表名 values() 删:delete 表名 where 条件(id=?) 改:update 表名 set 列名=? whe ...
- Java java jdbc thin远程连接并操作Oracle数据库
JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...
- jdbc连接oracle数据库
/*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...
- JDBC连接Oracle数据库的问题
场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题. 问题1:jdbc连接不上Ubuntu Oracle服务器? 后来发现这个问题的原因是由于连接字符串写错了,修 ...
- 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理
1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...
- Java操作Oracle数据库以及调用存储过程
操作Oracle数据库 publicclass DBConnection { //jdbc:oracle:thin:@localhost:1521:orcl publicstaticf ...
- loadrunner 脚本开发-调用java jar文件远程操作Oracle数据库测试
调用java jar文件远程操作Oracle数据库测试 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 Loadrunner:11 备注:想学ora ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- .Net Core API使用ODP.NET操作Oracle数据库
.Net Core API使用ODP.NET操作Oracle数据库 1.下载Oracle.ManagerDataAccess.Core. 右键依赖项——管理NuGet程序包. 在浏览选项中查询Orac ...
随机推荐
- 清除Cookie、获取指定Cookie的值、添加一个Cookie(24小时过期)、添加一个Cookie
MXS&Vincene ─╄OvЁ &0000007 ─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...
- Date() 及其 如何验证用户输入的日期是合法的
1.var someDate = new Date(Date.parse("May 25, 2004")); <=> var someDate = new Dat ...
- 关于事件触发的一个小tips
今天看到如下代码 window.globalEvent.bind('hotelHotTableRendered', function () { $('#hotelHotTd a').each(func ...
- (栈的应用5.2.2)POJ 2106 Boolean Expressions(表达式求值)
/* * POJ_2106.cpp * * Created on: 2013年10月30日 * Author: Administrator */ #include <iostream> # ...
- Nginx防蜘蛛爬虫处理
假定一个场景:某个网站它可能不希望被网络爬虫抓取,例如测试环境不希望被抓取,以免对用户造成误导,那么需要在该网站中申明,本站不希望被抓取.有如下方法: 方法一:修改nginx.conf,禁止网络爬虫的 ...
- 关于学习keynote
下午在学习如何用keynote写出高大上的文档,看到公司内的一个妹纸洋洋洒洒的写了好多篇文章,顿时觉得自己的知识面狭窄,文科女和理科女的差别,从我嘴里半天吐不出一个富有诗情画意的词句来,那么还是脚踏实 ...
- linux设备驱动归纳总结(一)内核的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...
- Linux下通过crontab及expect实现自动化处理
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 目标 为实现每天定时从其他服务器上复制文件到本地,需要使用crontab建立定时任务,并通过scp进行Linux之间的文件复制. ...
- MySQL数据很大的时候
众所周知,mysql在数据量很大的时候查询的效率是很低的,因为假如你需要 OFFSET 100000 LIMIT 5 这样的数据,数据库就需要跳过前100000条数据,才能返回给你你需要的5条数据.由 ...
- UINavigationController侧滑滑动返回 卡死问题
UINavigationController滑动返回,有需要的朋友可以参考下. 最近做了UINavigationController的滑动返回(IOS7及以后系统默认支持的), 主要分成以下几步以及碰 ...