关于jsp中数据库的问题
<%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Driver"import="java.sql.*" pageEncoding="utf-8" contentType="text/html;charset=gb2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
Connection conn;
Statement stat;
String url="jdbc:mysql://localhost:3306/student";
String userName="root";
String password="200812";
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException ex){
out.println("Can't find Servlet");
}
conn=DriverManager.getConnection(url,userName,password);
try{
stat=conn.createStatement();
stat.executeUpdate("insert into student_info values(2008001,'宋文','13501010202')");
stat.executeUpdate("insert into student_info values(2008002,'李建华','13503030404')");
stat.executeUpdate("insert into student_Info values(2008003,'张星','13505050606')");
stat.executeUpdate("insert into student_info values(2008004,'王晓林','13507070808')");
//获取查询结果
ResultSet result=stat.executeQuery("select * from student_info");
out.println("<Table Border>");
out.println("<TR><Td colspan=3 align=center>学生信息</Td></TR>");
out.println("<TR>");
out.println("<Td width=150>学号</Td>");
out.println("<Td width=150>学生姓名</Td>");
out.println("<Td width=150>联系电话</Td>");
out.println("</TR>");
while(result.next()){
out.println("<TR>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("<Td>"+result.getString(3)+"</Td>");
out.println("</TR>");
out.println("数据表操作失败");
}
result.close();
stat.close();
}catch(SQLException ex){
out.println("数据表操作失败");
}
finally{
conn.close();
}
%>
</body>
</html>
上面的程序中,mysql已经连接上,数据也写入了MySQL,不过在读数据时,不知道出了什么错,老是显示:数据表操作失败,也就是try语句块出错了。求解答??? --------------------编程问答-------------------- 你写 catch 的习惯不好,建议把ex的完整堆栈信息打印出来,类似:
} catch(SQLException ex){
ex.printStackTrace();
out.println("数据表操作失败");
} --------------------编程问答--------------------
while(result.next()){
out.println("<TR>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("<Td>"+result.getString(3)+"</Td>");
out.println("</TR>");
out.println("数据表操作失败");
}
这里有问题,ResultSet接口的getString(int)方法的int参数不是指数据表所有字段当中的 第几列,而是数据表当中是String对应的所有String字段当中的第几列,所以getString(3)会出错,因为你只有2列是string的字段,改为
while(result.next()){
out.println("<TR>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("</TR>");
out.println("数据表操作失败");
}
试试 --------------------编程问答-------------------- 发现一个很奇怪的事情:
while(result.next()){
out.println("<TR>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("<Td>"+result.getString(3)+"</Td>");
out.println("</TR>");
out.println("数据表操作失败"); // 你为什么要在循环里面输出“数据表操作失败”?!
} --------------------编程问答-------------------- 我刚刚居然没发现……
while(result.next()){
out.println("<TR>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("</TR>");
}
--------------------编程问答-------------------- 修改好了:
while(result.next()){
out.println("<Tr>");
out.println("<Td>"+result.getInt(1)+"</Td>");
out.println("<Td>"+result.getString(1)+"</Td>");
out.println("<Td>"+result.getString(2)+"</Td>");
out.println("</Tr>");
}
不过还是同样的错误,我就晕了。 --------------------编程问答--------------------
catch(SQLException ex){
out.println("数据表操作失败");
}
改为
catch(Exception ex){
out.println("数据表操作失败");
System.out.println(ex.printStackTrace();
);
}
然后去tomcat或应用服务器的控制台看看打印的异常信息具体是什么
补充:Java , Java EE