这是一个用于向表中添加新用户的servlet。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String firstname = request.getParameter("firstname");
String lastname = request.getParameter("lastname");
String dob = request.getParameter("dob");
String gen = request.getParameter("gen");
String mem_type = request.getParameter("mem");
String fname = request.getParameter("fname");
String addr = request.getParameter("addr");
long number = Long.parseLong(request.getParameter("c_no"));
String loginID = request.getParameter("loginID");
String username = request.getParameter("username");
String password = request.getParameter("password");
java.sql.Date sqlDate = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
try {
Date dobb = sdf.parse(dob);
sqlDate = new java.sql.Date(dobb.getDate());
}
catch(ParseException e) {
e.printStackTrace();
}
String name = firstname+" "+lastname;
Connection conn = null;
PrintWriter out = response.getWriter();
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/library", "root", "asdfghjkl");
PreparedStatement updatequery = (PreparedStatement)conn.prepareStatement("INSERT INTO librarian(Librarian Name,Gender,Address,Date Of Birth,Login ID,Contact Number) VALUES (?,?,?,?,?,?)");
updatequery.setString(1, name);
updatequery.setString(2, gen);
updatequery.setString(3, addr);
updatequery.setDate(4, sqlDate);
updatequery.setString(5, loginID);
updatequery.setLong(6, number);
int i = updatequery.executeUpdate();
out.println(i+"Inserted.");
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
我正在尝试在表格中插入一个新行并使用上面的代码,但它不起作用。请帮我在程序中找到错误。
JSP 代码如下:
<html>
<head>
<style>
#d1{
position:relative;
bottom:0
}
</style>
</head>
<jsp:include page="header.html"/>
<body>
<div>
<form class="page" method="post" action="RegisterPage">
First Name : <input name="firstname">
<br><br>
Last Name : <input name="lastname">
<br><br>
Date of Birth : <input name="dob" type="date">
<br><br>
Gender :
<input type="radio" name="gen" value="Male">Male
<input type="radio" name="gen" value="Female">Female
<br><br>
Membership Type :
<input type="radio" name="mem" value="Librarian">Librarian
<input type="radio" name="mem" value="Member">Member
<br><br>
Father's Name : <input name="fname">
<br><br>
Address <input name="addr">
<br><br>
Contact Number : <input name="c_no" type="text">
<br><br>
Email ID : <input name="loginID" type="email">
<br><br>
Username : <input name="username">
<br><br>
Password : <input name="password" type="password">
<br><br>
<input type="submit" value="Register">
</form>
</div>
</body>
<div id="d1">
<jsp:include page="footer.html"/>
</div>
</html>
表格中有7列。第一列是自动增加的ID,其余是普通列,即姓名,性别,地址,出生日期,登录ID,联系电话。
我在控制台中收到以下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个错误 在你的SQL语法中;查看与MySQL服务器对应的手册 用于在登录表附近使用正确语法的版本(登录 ID,用户名,密码)VALUES(&#39; abc@xyz.com',&#39; asdfghjkl&#39;,&#39; asdfg&#39;在第1行
答案 0 :(得分:0)
使用此行代替您的行:
PreparedStatement updatequery =(PreparedStatement)conn.prepareStatement(&#34; INSERT INTO librarian(姓名,性别,地址,Date_of_birth,login_ID,contact_number)VALUES(?,?,?,?,?,?) &#34); 强>
永远记住只要表格中有auto_increment字段,就必须在插入表格时指定列名称
检查你的setString()方法, for loginID&amp;数字,应该是setInt()
接下来是Date。从jsp页面,您将收到类型为java.Util的日期,但在更新/插入数据库时,它应该是java.sql.Date类型。所以做出这样的改变:
String dateOfBirth = request.getParameter("dob"); // string format
java.sql.Date sqlDate = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
try {
Date dobb = sdf.parse(dateOfBirth); // parsing into Date format
sqlDate = new java.sql.Date(dobb.getDate()); // parsing java.Util.Date into java.sql.Date format
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
最后使用
插入/更新到DBupdatequery.setDate(4, sqlDate );
由于