<%@ page import="java.sql.*,oracle.jdbc.driver.*" contentType="text/html;charset=gb2312" session="true"%>
<%
Connection conn=null;
Statement stmt=null;
ResultSet rs=null; DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver() );
conn =
DriverManager.getConnection("jdbc:oracle:thin:@xxx.xxx.xxx.xxx:port:SID","us
ername", "password");
stmt = conn.createStatement();
rs=stmt.executeQuery("SQLstr");
%>
<%
Connection conn=null;
Statement stmt=null;
ResultSet rs=null; DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver() );
conn =
DriverManager.getConnection("jdbc:oracle:thin:@xxx.xxx.xxx.xxx:port:SID","us
ername", "password");
stmt = conn.createStatement();
rs=stmt.executeQuery("SQLstr");
%>
如果是Oracle8i的数据库 安装后Oracle目录里自带了驱动:classes12.zip;nls_charset12.zip
这样做有何不妥?<!--首先导入一些必要的packages-->
<%@ page info="database handler"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%><!--告诉编译器使用SQL包-->
<%@ page import="java.sql.*"%><%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%><%
//以try开始
try
{
Connection con;
Statement stmt;
ResultSet rs;//加载驱动程序,下面的代码为加载JDBD-ODBC驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//用适当的驱动程序连接到数据库,test"是系统dsn名
String url="jdbc:odbc:test";//建立连接,类似于ASP中的创建数据库联接
con=DriverManager.getConnection(url, "user1", "pass1");//创建一个JDBC声明
stmt = con.createStatement();//增加新记录
stmt.executeUpdate("INSERT INTO test (a,b) VALUES (1,'2')");//查询记录
rs = stmt.executeQuery("SELECT a,b from test");//输出查询结果
out.println("<table border=1 width=400>");
while (rs.next())
{
String col1 = rs.getString(1);
String col2 = rs.getString(2);
//打印所显示的数据
out.println("<tr><td>"+col1+"</td><td>"+col2+"</td></tr>");
}
out.println("</table>");
}//如果加载时出错,给出相应的错误信息
catch (Exception e) {}
%>
我在没有修改代码的前提下 建了一个Oracle的系统DNS
运行正常所以你要确定几点:
1.系统DNS是否已经正确配置,也就是说Oracle连接服务名配置是否正确
这个可以用Oracle自带的SQL/Plus来检验
2.你对数据库操作是否正确,表名?字段名....
这个你可以通过打印错误信息来查找
将最后一段catch修改为
catch(Exception e){
out.print(e.toString());
}
就可以看到Oracle的系统报错了,根据错误编号 到Oracle技术手册里去查错误原因
我的执行结果是:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-12154: TNS: ???????
是数据库的原因吧,按理说建了数据源后的tnsnames.ora应是
ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.1.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
可它不是呀。
不知是那的问题。我的OICQ是50081811
请多指教。
如果成功 说明tnsnames.ora 配置正确的
问题就可能出在系统DNS上了不过从报错看 是TNS的配置问题
建议你把
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
改为:
(CONNECT_DATA =
(SID= oradb)
)
我没用过不清楚,怎么用呀?
你是怎么做的,用JDBC吗?
请多指教。
你还是先把ODBC搞通再试JDBC吧
我也是想先搞通ODBC再试JDBC
我用SQL/Plus 连 username/password@oradb 试了连不通
我的oracle是8.1.7版本的,为什么没找到TNSNAMES呀?
我用network administration下的net8 assistant建了一个tnsnames.ora,内空为:# TNSNAMES.ORA Network Configuration File: D:\oracle\ora81\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wg)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
试了不行,把SERVICE_NAEM改为SID=oradb也不行。
里面应该有:NAMES.DEFAULT_DOMAIN = XXXtnsnames.ora格式如下:ORADB.XXX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xx.xx.xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SID = XXXX)
)
)
import java.sql.*;public class oradb {
String orauser="用户";
String orapasswd="密码";
String sDBDriver="oracle.jdbc.driver.OracleDriver";
String sConnStr="jdbc:oracle:thin:@192.168.0.4:1521:orcl"; private Connection conn = null;
private Statement stmt = null;
ResultSet rs = null; public oradb() {
try {
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr,orauser,orapasswd);
stmt = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println("oradb(): " + e.getMessage());
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
}
public ResultSet executeQuery(String sql) {
rs = null;
try {
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return rs;
} public int executeUpdate(String sql) {
int i=0;
try{
i=stmt.executeUpdate(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return i;
} public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
public void closeConn(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
在D:\oracle\ora81\network\ADMIN目录下只TNSNAMES,没有sqlnet.ora.
执行结果又出现以下提示:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-12514: TNS: ?????????????????? SERVICE_NAME
是怎么回事?
用sql plus连接,服务名写oradb,提示:
监听进程不能解析在连接描述符中给出的SERVICE_NAME
请多请教。
多谢你的帮助,我用ODBC已经连通了现在想试一下JDBC,能帮我把上面的程序改一下吗?请注明修改行。
你那个SERVICE_NAME到底是怎么回事?另:JDBC直接连的方法已经在第一个回复里贴出来了
你需要做的就是把Oracle8i目录下的jdbc驱动加到classpath里去
DriverManager.getConnection("jdbc:oracle:thin:@xxx.xxx.xxx.xxx:port:SID","us
ername", "password");句中的jdbc:oracle:thin:@xxx.xxx.xxx.xxx:port:SID填什么呀?
把这两个文件加到classpath里去就可以了
四个驱动加上去了,执行时系统提示:
no suitable driver
老兄帮帮忙吧?
下面是我一般常用的conn.jsp<%
Connection conn=null;
Statement stmt=null;
try{
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver() );
conn = DriverManager.getConnection("jdbc:oracle:thin:@172.18.88.48:1521:voyager","shec", "shec");
stmt = conn.createStatement();
}catch(SQLException e){
System.out.println("Error when execute a query operation :\n"
+e.getMessage()+"\n SQL error code="+e.getErrorCode());
}
%>就这么简单里面172.18.88.48是数据库服务器的地址
voyager是数据库的SID名称
shec/shec是用户名和密码classes12.zip 和nls_charset12.zip这两个驱动可能还得受到JDK版本的影响你JDK是什么版本的?