首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

每次信心满满的做个项目在开始都会出现各种异常。

2013-06-26 
每次信心满满的做个项目在开始都会出现各种错误。。先准备用servlet+jsp写,但就在第一步,就报错了DAOUtilpac

每次信心满满的做个项目在开始都会出现各种错误。。
先准备用servlet+jsp写,但就在第一步,就报错了
DAOUtil

package ffn.util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DAOUtil {
public static final String URL="jdbc:mysql://localhost/ffn?useunicode=true&charset=utf8";
public static final String USER="root";
public static final String PASSWORD="111111";
private static Connection connection = null;
public static Connection getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection(URL,USER, PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}

return connection;
}
}

其中的一个FoodDAO
package ffn.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import ffn.entity.Food;
import ffn.util.DAOUtil;

public class FoodDAO {
public static Connection connection;
private static ResultSet rs;
public static List<Food> getFoodList(){
ArrayList<Food> list=new ArrayList<Food>();
try {
connection=DAOUtil.getConnection();
PreparedStatement ps=connection.prepareStatement("select * from food");
rs=ps.executeQuery();
while(rs.next()){
Food food=new Food();
food.setId(rs.getInt(1));
food.setName(rs.getString(2));
food.setDesc(rs.getString(3));
food.setPic(rs.getString(4));
food.setShopId(rs.getInt(5));
food.setPrice(rs.getDouble(6));
list.add(food);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
        /**
        *在本类测试没问题呀,可以查询,可以打印
        */
public static void main(String[] args) {
FoodDAO dao=new FoodDAO();
List<Food> list=dao.getFoodList();
for(Food food:list){
System.out.println(food.getName()+":"+food.getDesc());
}
}
}

然后我就准备把这个FoodDAO放到servlet里面去了..
package ffn.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ffn.dao.FoodDAO;
import ffn.entity.Food;

public class IndexServlet extends HttpServlet{
private static final long serialVersionUID = 1L;

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Food> list=FoodDAO.getFoodList();
for(Food food:list){
System.out.println(food.getName()+":"+food.getDesc());
}
request.getRequestDispatcher("/WEB-INF/jsp/main/index.jsp").forward(request, response);

}

}

然后,启动项目.../ffn/index.do 进入上面那个servlet,报错了,java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,可能写的有点多,其实都是基本代码,就是搞不清楚为什么在本类测试可以,在外面就报错了。


[解决办法]
第一先说你的报错原因,你没有msyql对servlet支持的jar包
第二你的写法错误: Class.forName("com.mysql.jdbc.Driver");放到外面静态语句块里,保证这个加载驱动操作在程序开启到结束只执行一次,你这样每次实例化一个connect都要再加载先不说会不会出问题就是可以也要耗资源的,
第三结构错误: private static Connection connection = null;每次返回的也都是这个对象,那你考虑过多线程并发么,一旦同时有多个请求其中有一个关闭链接你让其它操作如何自处。
你细心满满也的注意细节啊亲
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你的数据库本程序可以连接上?
我在FoodDAO里都测试了呀,可以查询出List并打印出来,这应该可以说明数据库连接没问题吧?
哦,那就没问题,看你mysql的jar包放在web-inf/lib下吗?
恩,没放,我放了就可以了,不过为什么呢,我在项目里右键引入了这个jar包了呀,还要搞一份放到web-inf/lib底下呀
因为你在servlet里面调用dao连接数据库的时候,它依赖于一个web环境,所有支持程序的jar必须放在web-inf/lib下;而另一种方式在main里面调用的话,只要build-path引进去就行。这是两种调用方式,就看你需要哪种。

热点排行