站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题请高手指教,为什么联不上数据库?谢谢

请高手指教,为什么联不上数据库?谢谢

摘要: 请高手指教,为什么联不上数据库?谢谢


类一:
package db;
import java.sql.*;

public class DBConnection {
static { //静态块 第一次使用类时自动执行 用于加载数据库驱动
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException ex){
ex.printStackTrace();
}
}
//用于区别不同用户连接的对象
public static ThreadLocal t = new ThreadLocal();
public static Connection getConn() throws SQLException {
Connection conn = (Connection)t.get(); //取得该用户的连接
if(conn == null||getConn().isClosed()){//第一次连接
String url="jdbc:odbc:pubs";
conn =DriverManager.getConnection(url,"sa","");
t.set(conn); //记录用户的连接
}
return conn;
}
public static void close(){ //关闭连接
try {
if (getConn() != null && !getConn().isClosed()) {
getConn().close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
类二:
package db;
import java.sql.*;

public abstract class DBT { //模板

public abstract void excuteSQL() throws SQLException;//抽象方法
public void excute() throws SQLException {
Connection conn=DBConnection.getConn();
try{
conn.setAutoCommit(false); //设置自动提交为false
//执行SQL语句
excuteSQL();

conn.commit(); //提交事务
}catch(SQLException ex){
conn.rollback(); //回滚事务
ex.printStackTrace();
}finally{
conn.close(); //关闭
}
}
}
类三:
package eb;
import java.sql.*;
import java.util.ArrayList;

import db.DBConnection;
import db.DBT;

public class Show extends DBT {
String mname;
double mprice;
String mpicpath;
ArrayList it=new ArrayList() ;
public void excuteSQL() throws SQLException {
Connection conn=DBConnection.getConn() ;
PreparedStatement ps=conn.prepareStatement("select * from item") ;
ResultSet rs=ps.executeQuery() ;
while (rs.next() ){
Show i=new Show();
i.setMname(rs.getString("mname"));
i.setMprice(rs.getDouble("mprice") );
i.setMpicpath(rs.getString("mpicpath")) ;
it.add(i) ;
}

}
public static void main(String[] args) {

}


public String getMname() {
return mname;
}

public String getMpicpath() {
return mpicpath;
}

public ArrayList getIt() {
return it;
}

public double getMprice() {
return mprice;
}

public void setMpicpath(String mpicpath) {
this.mpicpath = mpicpath;
}

public void setMname(String mname) {
this.mname = mname;
}

public void setIt(ArrayList it) {
this.it = it;
}

public void setMprice(double mprice) {
this.mprice = mprice;
}
}
最后在一个JSP页面中显示


补充:数据源我也设了


都加到100分了还没有高手出现啊


这么详细的代码了!还没人找得出来问题所在?高手啊!你快出来!


你为什么不在构造函数里面写加载数据库驱动和连接的代码?而且你写的代码很难让人看懂!


还有啊,没有参数的情况下是很少用 PreparedStatement的;小弟冒昧,提醒一下大哥!


最好有异常信息。


说明一下:运行时没有出现异常提示。上面写法是根据分层模式写的,第一和第二段代码分别负责管理数据库连接和部分共同操作。第三段代码是执行T-SQL语句的具体操作。


断点调试一下,看看


请问断点设在哪里合适?我设在第三段代码WHILE,发现没有循环,一闪就过了,在JSP页面中读取时集合是空的。谢谢


就是呀...试试在哪个地方出错了再说啊System.out.println(DBConnection.getConn());
不知道你问题出在哪,你没有把数据放到request里边啊,你怎么把数据传到页面给它显示呢.....
conn.setAutoCommit(false); //设置自动提交为false
//执行SQL语句
excuteSQL();

conn.commit(); //提交事务
这里是执行了,那个结果ArrayList没有保存到request里边让它传到页面去显示吧.
excuteSQL(); 这里应该返回那个ArrayList啊....而不是void....


楼上兄台,谢谢指教,不过我在第三段代码中有把查询结果给个结果集的,我在JSP页面中是用
<%
java.util.ArrayList list=it.getIt();
System.out.println(list.size());
for(int i=0;i Show s=(Show)list.get(i);。。。。
来实现的,不用request。
我是新手,有太多东西不是很明白,麻烦各位高手将错误之处,用详细点、浅显点的语言告知,谢谢


高手请进来啊,小弟好急啊



UP



<%
java.util.ArrayList list=it.getIt();
System.out.println(list.size());
for(int i=0;iShow s=(Show)list.get(i);。。。。

这个里面不是有System.out.println(list.size()); 输出的多少啊?


你的jsp页面里根本没有执行excute()代码啊 哪来的数据啊


我JSP页面是用javabean来获得以上第三段代码存入bean的集合的。不需要在JSP页面里执行excute()代码吧。

<%
java.util.ArrayList list=it.getIt();
System.out.println(list.size());
for(int i=0;i Show s=(Show)list.get(i);
%>
目前的问题是:没连上数据库。问题应该就在以上三段代码中。


是一楼问题的三段代码


System.out.println(list.size()); 这句我是想知道得到的结果集的大小而已。没有其他意图


你确定是没连上数据库?没连上数据库的话,你至少得把出错的信息贴出来啊


让我郁闷的是没有任何异常报出啊
System.out.println(list.size()); 的结果是0


你程序里面的错误都ex.printStackTrace(); 你在jsp页面中捕获不到任何错误。


该try catch的地方我我都ex.printStackTrace();了。楼上兄台,您看我问题中的三段代码,是否还有哪里遗漏?谢谢!您真热心肠!


UP



UP



有错误才能给你解决问题 谁有空一行一行看代码啊 头都晕


你换成SQL连接方式试试看。
我觉的那样简单一点

你如果一定要用JDBC桥做的话
你的代码 可以在简单一点
类一:
package db;
import java.sql.*;

public class DBConnection
{
Connection con=null;
String url;

public Connection getConn(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
url="jdbc:odbc:pubs";
con=DriverManager.getConnection(url,"sa","");
String strSql="select * from item;
Statement stmt=con.createStatement();
//好像你这里的关键字不一样
// 你的是prepareStatement
ResultSet rs=stmt.executeQuery(strSql);
while (rs.next() ){
System.out.println(rs.getString("mname"));
System.out.println(rs.getDouble("mprice") );
System.out.println(rs.getString("mpicpath")) ;
//先看看能不能输出数据能输出的话就是后面的程序有问题
}

}catch(ClassNotFoundException e){
System.out.println(e.getMessage());
}catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return con;
}
}
还有MVC模式像你这样做的话太麻烦了
在连接数据库的时候创建一个类
每个表的操作创建一个类
然后直接在JSP 页面调用就可以了
注意的是
CLASS=“”里面“是包名.类名”该类是数据库连接的那个
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.sql.*" %>

<%!Connection con=null; %>

........
<td><select name="firstlevel">
<%
try {
if(sqlb.getCon()!=null){
con=sqlb.getCon();
String strSql="select * from item";
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(strSql);
while(rs.next()){%>
<option><%=rs.getString(2) %></option>
<%} %>
<%}
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
%>
</select>

我的电脑没安装编辑器,可能有错误
但是思路应该不会有错。
要是还有问题的话,加QQ148367396
大家一起探讨。



那你把这个把把这个Show放到session里边了吗?我想问题就是在这里了....


自己说自己错了!没有经验就是不行,瞎回答...别见怪哦....


帮顶


再UP一下


你先在你的bean里直接得到mname,看看可不可以


看来看去好像就是没有执行那个方法哦~~取得的ArrayList只是没有元素的哦


smyl9989()

“你的jsp页面里根本没有执行excute()代码啊 哪来的数据啊”
是正解,只是因为我是新手,今天下午才领悟到,呵呵,现在问题解决了。
感谢众热心高手的耐心指点啊。



↑返回目录
前一篇: 我想自定义(增加)一个文件的属性,比如:author属性,将来可以通过file.author()来获得,就像file.length()一样,怎么实现呢?
后一篇: 求助:webwork执行Action跳转后浏览器上的url路径为何自动追加