这个例子包括CreateAccountServlet.java和web.xml
老是调试不出来,请高手帮忙调试一下。
1、CreateAccountServlet.javaimport javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;public class CreateAccountServlet extends HttpServlet
{
private String URL1;
private String user;
private String password;

public void init() throws ServletException
{
ServletContext sc=getServletContext();
String driverClass=sc.getInitParameter("driverClass");
URL1=sc.getInitParameter("url");
user=sc.getInitParameter("user");
password=sc.getInitParameter("password");
try
{
Class.forName(driverClass);
}
catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据库驱动失败!");
}
}

public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
{
Connection conn=null;
Statement stmt=null;
PreparedStatement pstmt=null;
try
{
conn=DriverManager.getConnection(URL1,user,password);
stmt=conn.createStatement();

stmt.executeUpdate("create table account(userid varchar(10) not null primary key,balance FLOAT(6,2))ENGINE=InnoDB");
pstmt=conn.prepareStatement("insert account values(?,?)");

pstmt.setString(1,"甲");
pstmt.setFloat(2,500.00f);
pstmt.executeUpdate();

pstmt.setString(1,"乙");
pstmt.setFloat(2,200.00f);
pstmt.executeUpdate();

PrintWriter out=resp.getWriter();
out.println("success");
out.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
finally
{
if(stmt!=null)
{
try
{
stmt.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
stmt=null;
}
if(pstmt!=null)
{
try
{
pstmt.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
pstmt=null;
}
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException se)
{
se.printStackTrace();
}
conn=null;
}
}

}
}
2、web.xml
<?xml version="1.0" encoding="gb2312"?><web-app xmlns=""
xmlns:xsi=""
xsi:SchemaLocation=""
version="2.4">

<context-param>
<param-name>driverClass</param-name>
<param-value>com.microsoft.jdbc.sqlserver.SQLServerDriver</param-value> 
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:microsoft:sqlserver://localhost:1433;databasename=testdb</param-value>  
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>sa</param-value> 
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>qazwsx</param-value>
</context-param>
<servlet>
<servlet-name>CreateAccountServlet</servlet-name>
<servlet-class>CreateAccountServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreateAccountServlet</servlet-name>
<url-pattern>/account</url-pattern>
</servlet-mapping>
</web-app>

解决方案 »

  1.   

    我是用的servlet,我想通过访问http://localhost:8080/ch08/account来显示success,可以一直显示不出来,老是在tomcat启动的窗口里显示SQLException异常,说第一行'='号附近有语法错误,可是可以正常编译啊。真是郁闷
      

  2.   

    那就说明你的SQL语句有问题啊这么乱看都看不清。只是SQL语句有问题编译是不会出错的。
      

  3.   

    后来发现是下面这段有问题:“stmt.executeUpdate("create table account(userid varchar(10) not null primary key,balance FLOAT(6,2))ENGINE=InnoDB");
    pstmt=conn.prepareStatement("insert account values(?,?)");

    请问哪里错了?
      

  4.   

    ENGINE=InnoDB 这是什么意思,什么数据库啊?你拿这个数据库的客户程序访问一下,看能不能执行你的SQL
      

  5.   

    去掉‘ENGINE=InnoDB ’,在SQL里说balance数据类型无效,那要用什么类型啊?
      

  6.   

    搞定了,float(6)就可以了,为什么不能加',2'那,double是不是可以加