关于Java_Web连接Oracle数据库
1.前提条件
1>装有Oracle数据库(因为连接的时候需要开启两项服务)
2>myeclipse或eclipse(支持WebProject的版本)开发环境,本机以myeclipse为例,二者没有什么大的区别
3>装有Tomcat,Weblogic或其它任何服务器(本机装有Tomcat6.0)
4>有Oracle数据库的厂商驱动(一般能够在Oracle安装目录下找到所需的jar包,例如本机的jar所在文件夹路径为D:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib)
2.新建Web项目
在myeclipse中新建一个WebProject,由于只是简单的尝试,那么就把所有代码都写在WebProject/WebRoot/index.jsp文件里好了,双击index.jsp打开编辑器
3.编码
<hr>
<%="下面来演示Oracle数据库的增删改查操作<br>"%>
<%
//加载数据库的驱动类
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
out.print("<br>Error:加载驱动类失败");
}
try {
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE", "ay", "ayqy");
//特别说明:Oracle的URL格式为jdbc:oracle:thin:@[ip]:1521:[sid]
//这里的SID的值应该是数据库的Name,若是要连接到默认数据库,则SID的值为版本名,本机为XE
//数据库的Name在PLSQL Developer(一个GUI的Oracle数据库管理软件)登录时可以看到 //*若要以管理员身份连接,应把第二个参数改为"sys as sysdba"
//*默认以普通用户身份连接
} catch (Exception e) {
out.print("<br>Error:获取连接失败");
out.print("<br>" + e.getMessage());
} Statement stat = conn.createStatement();
String sql = null; //增
//先查询记录是否存在
sql = "select * from tb_std where NUM = 1008";
ResultSet rs = stat.executeQuery(sql);
boolean exists = false;
if (rs.next())
exists = true;
if (!exists) {//若不存在则添加数据
out.print("不存在NUM为1008的记录,即将添加一条<br>");
String today = "to_date('2014-03-08 21:15:00','yyyy-mm-dd hh24:mi:ss')";
//注意Oracle中date类型数据带有时分秒,插入date型数据时必须带有时分秒一起转换,否则会出错
sql = "insert into tb_std(NUM,REGDATE,FEE,GRADE,CLASS,MAJOR,EXTRA,BIRTHPLACE,NAME) values(1008,"
+ today
+ ",2014,3,'A','Chinese',200,'England','SamStone')";
stat.executeUpdate(sql);
}
out.print("NUM为1008的记录添加完毕<br>"); //删
sql = "delete from tb_std where NUM = 1007";
stat.executeUpdate(sql);
out.print("NUM为1007的记录被删掉了<br>"); //改
sql = "update tb_std set num = 1009 where NUM = 1008";
stat.executeUpdate(sql);
out.print("NUM为1008的记录NUM被改为1009了<br>"); //查
sql = "select * from tb_std";
rs = stat.executeQuery(sql);
//显示查询结果
out
.print("num__name<br>");
while (rs.next()) {
String num = rs.getString("num");
String name = rs.getString("name");
out.print(num + "__" + name + "<br>");
}
out.print("上面是查询结果<br>"); //删
sql = "delete from tb_std where NUM = 1009";
int num = stat.executeUpdate(sql);
out.print("删除NUM值为1009的记录 " + num + " 条记录受到影响" + "<br>"); //使用PreparedStatement
out.print("下面演示PrepareStatement的用法<br>");
String number = "2014";
String stdName = "新世纪";
sql = "insert into tb_std(num,name) values(?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,number);//设置第N个参数的值
ps.setString(2,stdName);
int i = ps.executeUpdate();
ps.close();
out.print("成功添加了 " + i + " 行<br>");
out.print("使用PreparedStatement的优点:<br>1.增强了程序的可维护性<br>2.增加了程序的安全性[防止SQL注入式攻击]<br>3.避免了动态创建字符串,提高了程序效率<br>"); //调用存储过程
CallableStatement cs = conn.prepareCall("{call delStd(?)}");
//若存储过程由返回值,应该先注册out参数的JDBC类型,例如cs.registerOutParameter(index,Types.CHAR);
cs.setString(1,"2014");
cs.executeQuery();
//若需要获取out参数返回值,用String result = cs.getString(index);
out.print("调用存储过程成功,删掉了num为2014的所有记录<br>");
cs.close(); //演示事务的用法
out.print("下面演示事务的用法<br>");
try{
conn.setAutoCommit(false);//设置不自动提交(默认自动提交)
//声明sql1
String sql1 = "insert into tb_std(num,name) values(?,?)";
PreparedStatement ps1 = conn.prepareStatement(sql);
ps1.setString(1,"2012");
ps1.setString(2,"某某人");
//声明sql2
String sql2 = "update tb_std set num = ? where num = ?";
PreparedStatement ps2 = conn.prepareStatement(sql2);
ps2.setString(1,"1000");
ps2.setString(2,"2012");
//执行sql1和sql2
ps1.executeUpdate();
ps2.executeUpdate();
//提交操作,事务完成
conn.commit();
}catch(Exception e){
out.print(e.getMessage());
conn.rollback();//回滚
}
out.print("使用事务的优点:保证系列操作的连续性,要么全做,要么不做<br>"); try {
stat.close();
conn.close();
} catch (Exception e) {
out.print("<br>Error:连接关闭失败");
out.print("<br>" + e.getMessage());
}
%>
P.S:“查”操作相对比较麻烦(涉及到对查询结果的处理),而“增,删,改”都比较简单,与“查”唯一的区别是用的Statement对象的方法不同。“查”用stat.executeQuery(String sql);语句,返回一个ResultSet结果集对象,而其他三种操作都用stat.executeUpdate(String sql);语句,返回一个int类型的值,该值表示执行sql语句后受到影响的记录数(即表的行数)
4.导入jar包
本机装的Oracle数据库版本是11g,在上面提到的路径下有三个jar包,分别是ojdbc5.jar,ojdbc6.jar,ojdbc6_g.jar,5适用于较低版本的Oracle,这里为了简单起见把三个jar都导入,复制jar包到WebProject/WebRoot/WEB-INF/lib目录下。
5.开启Oracle服务
开始-所有程序-Oracle Database 11g Express Edition-启动数据库,弹出黑框,等待30秒左右即可(需要开启两个相关服务)
6.开启Tomcat服务器
7.可能遇到的异常
1>严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
分析:没有开启服务器,引起空指针异常
解决方案:在myeclipse中找到Run/Stop/Restart MyEclipse Servers快捷图标,单击小箭头,找到需要开启的服务器(如Tomcat6.x),点击Start选项启动服务器
2>有时候会发现Oracle服务和Tomcat服务不能共存(例如,启动Oracle服务后,继续启动Tomcat遇到异常,不能正常启动)
分析:这是因为8080端口被占用了,因为Oracle和Tomcat安装时默认的端口号都是8080,需要修改Tomcat默认的端口号来解决冲突
解决方案:开始-所有程序-Apache Tomcat 6.0 Tomcat6-Tomcat 6.0 Program Directory点击打开文件夹,用记事本打开conf/server.xml,Ctrl+F查找“Connector port”找到位置“<Connector port="8080" protocol="HTTP/1.1" ”把8080改为一个空闲的端口号即可(例如本机改为了9527)
3>这是一个比较奇怪的问题,本机测试逐一删除已导入的jar包,初衷是想测试项目需要的是哪一个jar文件,却发现删掉所有jar包后,项目还是可以运行
分析:可能是myeclipse自带连接Oracle数据库的jar(项目自动生成的jre中可能有所需的jar文件),因为Oracle收购的SUN,所以可能会对Oracle数据库提供特殊的支持
解决方案:为了保险起见,建议把jar文件导入项目,没有太大坏处
关于Java_Web连接Oracle数据库的更多相关文章
- java连接Oracle数据库
Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...
- 记录排查解决Hubble.Net连接Oracle数据库建立镜像库数据丢失的问题
起因 前几天在弄Hubble连接Oracle数据库,然后在mongodb中建立一个镜像数据库; 发现一个问题,原本数据是11W,但是镜像库中只有6w多条; 刚开始以为是没运行好,又rebuild了一下 ...
- NodeJs连接Oracle数据库
nodejs连接oracle数据库,各个平台的官方详情文档:https://github.com/oracle/node-oracledb/blob/master/INSTALL.md 我的nodej ...
- jdbc连接oracle数据库
/*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...
- 用VS连接oracle数据库时ORA-12504错误
在用VS2008连接oracle数据库时,可能会出现: ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME 只需在web.config文件Data ...
- ASP.NET连接Oracle数据库的步骤详解(转)
ASP.NET连接Oracle数据库的步骤详解 本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助. 在用ASP.NET开发应用程序时, ...
- 64 位win 7或windows 8下的visual studio不能连接Oracle数据库调试网站的问题
在64 位win 7或windows 8系统下,visual studio直接F5运行网站调试,你会发现不能连接Oracle数据库,会报一个“ORA-06413: Connection not ope ...
- [原创]安装Oracle 11gR2,以及如何在win8下使用plsql develper连接Oracle数据库 ,在这里和大家分享下
一,关于win8下安装Oracle 11gR2 1.我下载的是Oracle_11gR2_win64.其中有两个包: 注意:在解压了之后将:win64_11gR2_database_2of2\datab ...
- 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error
用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准 ...
随机推荐
- 关于“Durian”调查问卷的心得体会
这周我们做了项目着手前的客户需求调查,主要以调查问卷的方式进行.其实做问卷调查并不是想象中的那么简单,首先要确定问卷调查的内容,每一个问题都要经过深思熟虑,字字斟酌,既要切合问卷主要目的,又要简洁扼要 ...
- java的Map浅析
Map<K,V>是以键-值对存储的(key-value), 而Entry<K,V>是Map中的一个接口,Map.Entry<K,V>接口主要用于获取.比较 key和 ...
- 【校招面试 之 剑指offer】第16题 数值的整数次方
方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typ ...
- Canvas游戏计算机图形教程
TechbrooD 主站 WOW 登录 注册 0首页 1简介 1.1WWW 技术变迁和生态 1.2WWW 学习建议 1.3WWW 互联网基础知识 1.4WWW Web 1.5 WWW Web ...
- dbus通信与接口介绍
DBUS是一种高级的进程间通信机制.DBUS支持进程间一对一和多对多的对等通信,在多对多的通讯时,需要后台进程的角色去分转消息,当一个进程发消息给另外一个进程时,先发消息到后台进程,再通过后台进程将信 ...
- abort: no username supplied (see "hg help config")
abort: no username supplied (see "hg help config") 在hg中输入commit 指令时,如果出现下述结果: $ hg commit ...
- 解决 cmake_symlink_library: System Error: Operation not supported
在编译uchardet时遇到这个错误: cmake_symlink_library: System Error: Operation not supported 创建链接不成功,要确认当前帐户下是否有 ...
- 2018.09.28 hdu5435A serious math problem(数位dp)
传送门 数位dp卡常题. 写了一发dfs版本的发现过不了233. 于是赶紧转循环版本. 预处理出f数组. f[i][j]f[i][j]f[i][j]表示前i位数异或和为j的方案数. 然后每次直接数位d ...
- 2018.06.29 NOIP模拟 排列(线段树)
排列(premu.cpp) [题目描述] 对于一个 1 到 n 的排列,逆序数的定义为:排列中第 i 位 ai的逆序数就是 a1-ai-1中比 ai大的数的个数.另外用 pi表示 a1,-,ai的逆序 ...
- 使用yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
背景: yum包的管理是使用python写的,有对应的python版本 遇到的问题报错如下: File "/usr/bin/yum", line 30 except K ...