用jdbc-odbc桥接方式连接数据库总是连接不成功,也不知道哪出了问题?下面是数据库连接
DatabaseCon.java文件和用来测试的testBean.jsp:
package test.db;
//import java.io.*;
import java.sql.*;
public class DatabaseCon {
public Connection con;
public String URL = "jdbc:odbc:cdshop";
public String Message;
public boolean connection() {
try{
//加载JDBC-ODBC桥驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ex){
Message=ex.getMessage();
System.exit(-1);
}
try{
//试图通过JDBC-ODBC桥建立一个与myBooks数据源的连接
con = DriverManager.getConnection(URL);
//数据库连接成功
return true;
}
catch(SQLException ex){
Message=ex.getMessage();
return false;
}
}
//关闭数据库连接
public boolean close(){
try{
con.close();
return true;
}
catch(Exception ex){
Message=ex.getMessage();
return false;
}
}
public ResultSet exeSQL(String sqlstr){
try{
this.connection();
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery(sqlstr);
return rs;
} catch(Exception ex){
Message=ex.getMessage();
}
return null;
}
public String getString(ResultSet rs,String str)
{
try
{
return rs.getString(str);
}catch(Exception ex)
{
Message=ex.getMessage();
}
return null;
}
}
testBean.jsp:<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>测试数据库连接Bean</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*"%>
<jsp:useBean id="dbBean" scope="session" class="test.db.DatabaseCon"/>
<body>
<% String sql="select*from shop_user";
ResultSet rs=dbBean.exeSQL(sql);
String str;
try
{ out.print("aaa");
while(rs.next())
{ out.print("aaa");
str=rs.getString("PassWord");
%>
<%=rs.getString("UserName")%>-><%=str%><br>
<%
}}catch(Exception ex)
{ out.print("aaa");
out.print(ex.getMessage());
}
%>
</body>
</html>
在下已经建好了数据库,测试页面总是显示null,望朋友们指点一下,在下将感激不尽!!!
DatabaseCon.java文件和用来测试的testBean.jsp:
package test.db;
//import java.io.*;
import java.sql.*;
public class DatabaseCon {
public Connection con;
public String URL = "jdbc:odbc:cdshop";
public String Message;
public boolean connection() {
try{
//加载JDBC-ODBC桥驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ex){
Message=ex.getMessage();
System.exit(-1);
}
try{
//试图通过JDBC-ODBC桥建立一个与myBooks数据源的连接
con = DriverManager.getConnection(URL);
//数据库连接成功
return true;
}
catch(SQLException ex){
Message=ex.getMessage();
return false;
}
}
//关闭数据库连接
public boolean close(){
try{
con.close();
return true;
}
catch(Exception ex){
Message=ex.getMessage();
return false;
}
}
public ResultSet exeSQL(String sqlstr){
try{
this.connection();
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery(sqlstr);
return rs;
} catch(Exception ex){
Message=ex.getMessage();
}
return null;
}
public String getString(ResultSet rs,String str)
{
try
{
return rs.getString(str);
}catch(Exception ex)
{
Message=ex.getMessage();
}
return null;
}
}
testBean.jsp:<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>测试数据库连接Bean</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*"%>
<jsp:useBean id="dbBean" scope="session" class="test.db.DatabaseCon"/>
<body>
<% String sql="select*from shop_user";
ResultSet rs=dbBean.exeSQL(sql);
String str;
try
{ out.print("aaa");
while(rs.next())
{ out.print("aaa");
str=rs.getString("PassWord");
%>
<%=rs.getString("UserName")%>-><%=str%><br>
<%
}}catch(Exception ex)
{ out.print("aaa");
out.print(ex.getMessage());
}
%>
</body>
</html>
在下已经建好了数据库,测试页面总是显示null,望朋友们指点一下,在下将感激不尽!!!
应该写成String sql="select PassWord from shop_user";
在下好象知道了问题出在了哪里,在下建立的表中的字段顺序为UserName,PassWord,如果在下按顺序访问,既先
rs.getString("UserName")然后在rs.getString("PassWord")这样的话,就不会出现什么问题,如果访问的顺序颠倒,就回抛出异常;
不知道在下理解的对不?
你的理解是对的,如下这段话是从 Java API 中摘录下的一段话: ResultSet 接口提供用于从当前行检索列值的获取方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称检索值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,而且每列只能读取一次。 你先将游标定位到 Password ,再定位到 UserName 当然是不行的啦(至少我还没找到方法解决)。 不过就算将顺序改过来还是不行,我把你的程序运行了一遍,找了半个多小时才找出问题来。 String sql="select*from shop_user"; 此处写成 : select * from shop_user 将 "*" 两边的空格写出来,具体为什么要这样,我也有点不清楚。我想是 Statement 在连接数据库时要将 SQL 分解出来吧。 这些都改正过来,你的程序就可以正常运行出来了吧!