每次信心满满的做个项目在开始都会出现各种错误。。
先准备用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;每次返回的也都是这个对象,那你考虑过多线程并发么,一旦同时有多个请求其中有一个关闭链接你让其它操作如何自处。
你细心满满也的注意细节啊亲
[解决办法]