日期:2014-05-17  浏览次数:20875 次

jdbc 连接不上数据库 到底怎么解决啊
package com.google.blog;

import java.io.IOException;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;

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

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决从JSP页面接受中文参数乱码
request.setCharacterEncoding("UTF-8");
//接受JSP页面传递过来的与博文有关的三个参数:主题、内容、所属种类的ID值
String title=request.getParameter("title");
String content=request.getParameter("content");
String categoryId=request.getParameter("category");
//数据对象可以理解为连接池的管理者,通过它可以获取数据库的连接
DataSource ds=null;

try
{
//通过在context.xml中设定的数据源对象的名字,获取数据源对象
Context context=new InitialContext();
ds=(DataSource) context.lookup("java:/comp/env/jdbc/mysqlds");
}
catch (Exception e)
{
System.out.println("读取数据源时出错");
}
int result=0;

try
{
//添加博文的SQL语句,now()生成当前系统时间
String sql="insert into blog(title,content,category_id,create_time) values (?,?,?,now())";
//为sql语句中的?设定参数
String params[] = {title,content,categoryId};
//DButils中核心类,生成对象时传递数据源对象
QueryRunner qr=new QueryRunner(ds);
//调用它的update,完成sql的运行。其他使用update方法的sql语句:insert into/update/delete
result=qr.update(sql,params);
}
catch(SQLException e)
{
e.printStackTrace();
}

String message="";
if(result==1)
{
message="添加博文成功!";
}
else
{
message="添加博文失败!";
}

request.setAttribute("message", message);
request.getRequestDispatcher("/addBlogResult.jsp").forward(request, response);
}
}
读取数据源时出错
java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in

------解决方案--------------------
在创建Context对象前,需要初始化jndi
Java code

Properties prop = new Properties();  
prop.put(Context.INITIAL_CONTEXT_FACTORY,  
"weblogic.jndi.WLInitialContextFactory");  
prop.put(Context.PROVIDER_URL, url);

------解决方案--------------------
看来还是你的datasource对象没有正常生成
------解决方案--------------------
明显没有获得连接,是否url正确,user,password是否正确,驱动是否添加好了
或者localhost换成ip试试,或者用客户端连接一下看是否可以,如果可以那肯定是程序中写的问题,如果不可以也可能是防火墙之类的,试试看 
或者看看数据库版本问题