读书人

servler链接数据库有关问题求解答!

发布时间: 2013-04-26 16:27:53 作者: rapoo

servler链接数据库问题求解答!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//注册处理页面
package user;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.*;
public class uregcl extends HttpServlet{
public void doPost(HttpServletRequest req,HttpServletResponse res){
res.doGet(req,res);
}
public void doGet(HttpServletRequest req,HttpServletResponse res){
Connection ct=null;
Statement st=null;
ResultSet rs=null;
try{
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//用户名
String userId=(String)req.getParameterNames("userId");
//姓名
String userName=(String)req.getParameterNames("userName");
//性别
String userSex=(String)req.getParameterNames("userSex");
//年龄
int userAge=(int)req.getParameterNames("userAge");
//问题
String userQuestion=(String)req.getParameterNames("userQuestion");
//答案
String userAnswer=(String)req.getParameterNames("userAnswer");
//密码
String userPassword=(String)req.getParameterNames("userPassword");
//邮箱
String userEmail=(String)req.getParameterNames("userEmail");
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
String str="insert into user(userID,userPassword,userName,userSex,userAge,userEmail,userQuestion,userAnswer) values('"+userID+"','"+userPassword+"','"+userName+"','"+userSex+"','"+userAge+"','"+userEmail+"','"+userQuestion+"','"+userAnswer+"')";
Connection ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306","root","123456");
Statement st=ct.createStatement();
ResultSet rs=st.executeUpdate(str);
}catch(Exception ex){
ex.printStackTrace();
}final{
//不管是否抛出异常都会执行
try{
//分别判断是否为空
//不为空时关闭资源
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(ct!=null){
ct.close();
}
}catch(Exception ex){


ex.printStackTrace();
}
}
}


特别是这句:
String str="insert into user(userID,userPassword,userName,userSex,userAge,userEmail,userQuestion,userAnswer) values('"+userID+"','"+userPassword+"','"+userName+"','"+userSex+"','"+userAge+"','"+userEmail+"','"+userQuestion+"','"+userAnswer+"')";
Connection ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306","root","123456");
这个又是单引号又是双引号怎么算的,还是没太明白 数据库 MySQL servlet
[解决办法]


import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Urcgcl extends HttpServlet {

/**
* Constructor of the object.
*/
public Urcgcl() {
super();
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out


.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();


Connection ct=null;
Statement st=null;
ResultSet rs=null;
try{
//用户名
String userId=(String)request.getParameter("userId");
//姓名
String userName=(String)request.getParameter("userName");
//性别
String userSex=(String)request.getParameter("userSex");
//年龄
String userAge= request.getParameter("userAge");
//问题
String userQuestion=(String)request.getParameter("userQuestion");
//答案
String userAnswer=(String)request.getParameter("userAnswer");
//密码
String userPassword=(String)request.getParameter("userPassword");
//邮箱
String userEmail=(String)request.getParameter("userEmail");
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
String str="insert into user(userID,userPassword,userName,userSex,userAge,userEmail,userQuestion,userAnswer) values('"+userId+"','"+userPassword+"','"+userName+"','"+userSex+"','"+userAge+"','"+userEmail+"','"+userQuestion+"','"+userAnswer+"')";
ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306","root","123456");
st=ct.createStatement();
int i = st.executeUpdate(str);
}catch(Exception ex){
ex.printStackTrace();
}finally{
//不管是否抛出异常都会执行


try{
//分别判断是否为空
//不为空时关闭资源
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(ct!=null){
ct.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred


*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doGet(request,response);
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}

}



一堆的错误。
[解决办法]
你还不如用PreparedStatement来进行操作。看着这么多的格式就纠结啦
[解决办法]
单引就是数据库存储字符串必须的修饰符,双引表示字符串相加。最后生成出来是这样
('2344','密码','用户名','男',)
[解决办法]
我觉得你先要了解一下sql知识,然后了解一下servlet知识,再了解一下jdbc只是就可以了!
你写的意思就是插入数据,你可能要组装你的sql,所以要传你的参数值!呵呵,没事慢慢来,你可以用preparedstatment,就不会那么纠结!
[解决办法]
其实就是拼字符串
"insert into user(userID,userPassword,userName,userSex,userAge,userEmail,userQuestion,userAnswer) values('"+userID+"','"+userPassword+"','"+userName+"','"+userSex+"','"+userAge+"','"+userEmail+"','"+userQuestion+"','"+userAnswer+"')"
可以把这个字符串用+分开

第一个“”里面就是个普通的字符串 然后+userId userId是一个值 比如是1

结果就是
insert into user(userID,userPassword,userName,userSex,userAge,userEmail,userQuestion,userAnswer) values(' 1
后面的类似
[解决办法]
我也感觉preparedstatment可能会好一点,首先sql语句的格式就很清晰,然后是效率问题,预编译的,如果要多次执行这类语句的话,效率也会好一些,然后还可以防止sql注入。
[解决办法]
引用:
引用:你还不如用PreparedStatement来进行操作。看着这么多的格式就纠结啦
我看到有些不加引号,像单独的写语句一样也行
就是比如
insert into user('a','b','c') values('s1','s2','s3');这样。

其实你把你拼成的字符串打印出来,然后控制台里面显示的与你在命令行模式下执行的语句一样就行。
就像是单引号 ' 。你在命令行敲的时候肯定要敲上去吧。那么你在拼字符串的时候,就要把那个'(单引号)拼到那个sql中。

读书人网 >J2EE开发

热点推荐