Java 如何从servlet连接到数据库。我已经尝试了以下代码,但每次控制都会出现异常
如何从servlet连接到数据库。我已经尝试了以下代码,但每次控制都会出现异常Java 如何从servlet连接到数据库。我已经尝试了以下代码,但每次控制都会出现异常,java,database,servlets,database-connection,Java,Database,Servlets,Database Connection,如何从servlet连接到数据库。我已经尝试了以下代码,但每次控制都会出现异常 try { int num_rows = 0; Connection con = null; Statement st = null; Statement search = null; ResultSet rs = null; ResultSet
try
{
int num_rows = 0;
Connection con = null;
Statement st = null;
Statement search = null;
ResultSet rs = null;
ResultSet searchRS = null;
// Connecting to the database
PrintWriter out = response.getWriter();
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/employees","root","");
st = con.createStatement();
rs = st.executeQuery("select employees.first_name,employees.last_name,employees.gender,employees.hire_date,departments.dept_name,salaries.salary from employees,departments,salaries,dept_emp where employees.emp_no=salaries.emp_no AND dept_emp.emp_no=employees.emp_no AND dept_emp.dept_no=departments.dept_no AND salaries.to_date='9999-01-01' AND (employees.first_name='"+Sname+"' OR employees.last_name='"+Sname+"')");
//Retrieval of data from result set retrieved from database
String[][] str = new String[10][6];
while( rs.next())
{
str[num_rows][0] = rs.getString("first_name");
str[num_rows][1] = rs.getString("last_name");
str[num_rows][2] = rs.getString("gender");
str[num_rows][3] = rs.getString("hire_date");
str[num_rows][4] = rs.getString("dept_name");
str[num_rows][5] = rs.getString("salary");
num_rows++;
}
if(num_rows <10)
{
isLast = true;
var = 0;
}
request.setAttribute("listvalue",str);
request.setAttribute("rows",num_rows);
RequestDispatcher RequestDispatcherObj =request.getRequestDispatcher("SearchName.jsp");
RequestDispatcherObj.forward(request, response);
out.flush();
con.close();
var = var +10;
}
catch(Exception e)
{
e.printStackTrace();
}
试试看
{
int num_rows=0;
连接con=null;
语句st=null;
语句搜索=null;
结果集rs=null;
结果集searchRS=null;
//连接到数据库
PrintWriter out=response.getWriter();
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
con=DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/employees“,”根“,”);
st=con.createStatement();
rs=st.executeQuery(“选择员工。姓名,员工。姓氏,员工。性别,员工。雇用日期,部门。部门名称,工资。员工的工资,部门,工资,部门emp,其中员工。emp编号=工资。emp编号和部门emp编号=员工。emp编号和部门emp编号=部门。部门编号和工资。截止日期='9999-01-01'和(employees.first_name='“+Sname+””或employees.last_name='“+Sname+”);
//从从数据库检索的结果集中检索数据
字符串[][]str=新字符串[10][6];
while(rs.next())
{
str[num_rows][0]=rs.getString(“first_name”);
str[num_rows][1]=rs.getString(“姓氏”);
str[num_rows][2]=rs.getString(“性别”);
str[num_rows][3]=rs.getString(“雇用日期”);
str[num_rows][4]=rs.getString(“部门名称”);
str[num_rows][5]=rs.getString(“工资”);
num_rows++;
}
如果(num_rows您的字符串数组可以保存10条记录;您可能从数据库中获得了更多的记录
你可以试试这个-
while( rs.next() && num_rows < 10 )
while(rs.next()&&num_行<10)
如果您需要收集所有记录,最好使用类似列表的收集方式。对我来说,这条线看起来很像
RequestDispatcherObj.forward(request, response);
正在产生问题。它正在将请求转发到其他位置。requestdispatcheobj
可能已关闭了out
对象。因此,在此之后使用flush()和write()
将导致非法状态异常
out.flush();
con.close();
var = var +10;
因此,请确保情况并非如此。您确定要在servlet中包含数据库代码吗?此外,如果您谈论异常,请始终包含stacktrace。您没有在代码中声明var的类型,但无论如何,我们需要异常。您需要正确地为列名命名,例如选择employees。first\u name应该是select employees.first_name作为first_name,只有这样才能读取rs.getString(“first_name”);去掉PrintWriter out=response.getWriter();
和out.flush();
这是RequestDispather#forward(请求,响应)的要点
。您可以使用forward
转发到jsp资源以呈现您的响应。为什么会导致错误?好的,但它会使对象处于打开状态。@informatik01除非它们的意思完全不同,是的。请自己尝试。在doGet()
中,放入System.out.println(“hello”);request.getRequestDispatcher(“some.jsp”).forward(请求,响应);System.out.println(“world”);
看看你得到了什么。如果说控制,你的意思是你不能写入响应,那么我同意你/他们,因为它应该已经提交了。@SotiriosDelimanolis Your“在某个时候,forward返回执行。。。“在某种程度上把我弄糊涂了,我以为你的意思是在提交了它返回的响应之后,“你可以再次向输出写入一些内容”之类的东西。我的注意力不集中了,我必须去睡觉了。再次抱歉,伙计)和一些自定义对象,而不是字符串[]
。