【发布时间】:2014-10-31 18:19:44
【问题描述】:
值未插入到 Access DB 中。我的 DSN 名称是“DB”,表名称是“Employee”。 Access DB 正在连接(由修改时间指示),但没有成功的插入操作。 NetBeans 给出错误:“未正确设置数据库位置。”我已经在数据源 (ODBC) 中使用我的数据库设置了 DSN。
try (Connection c = DriverManager.getConnection("jdbc:odbc:DB")) {
PreparedStatement pss = c.prepareStatement("INSERT INTO Employee VALUES (?,?,?,?)");
pss.setString(1, fn);
pss.setString(2, ln);
pss.setString(3, mn);
pss.setString(4, add);
pss.executeUpdate();
c.commit();
}
} catch (ClassNotFoundException | SQLException e) {
System.out.println(e);
}
这是完整的代码:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author javaEntu
*/
public class DB extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@
Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
String fn = request.getParameter("fn");
String ln = request.getParameter("ln");
String mn = request.getParameter("mn");
String ps = request.getParameter("ps");
String add = request.getParameter("add");
String gen = request.getParameter("gen");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SV</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet SV at " + request.getContextPath() + request.getRequestURL() + "</h1>");
out.println("</body>");
out.println("</html>");
out.println("<B>Your details: </B>");
out.println("<br>First name: " + fn);
out.println("<br>Last name: " + ln);
out.println("<br>Contact number: " + mn);
out.println("<br>Password: " + ps);
out.println("<br>Address: " + add);
out.println("<br>Gender: " + gen);
out.println("<br>Thank you!");
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
try (Connection c = DriverManager.getConnection("jdbc:odbc:DB")) {
PreparedStatement pss = c.prepareStatement("INSERT INTO Employee VALUES (?,?,?,?)");
pss.setString(1, fn);
pss.setString(2, ln);
pss.setString(3, mn);
pss.setString(4, add);
pss.executeUpdate();
c.commit();
}
} catch (ClassNotFoundException | SQLException e) {
System.out.println(e);
}
}
}
}
【问题讨论】:
-
检查您的控制台输出。您可能会收到错误“查询值和目标字段的数量不同。”
-
@GordThompson:不,没有这样的错误。我重新检查了我的表格列。 FirstName 是我的 PrimaryKey。
-
您的 Employee 表是否正好定义了四 (4) 个字段? (顺便说一句,FirstName 对于主键字段来说是一个非常糟糕的选择。当您在之前添加了 John Doe 之后需要将 John Smith 添加到数据库中时,您会怎么做?)
-
是的,正好是 4 个字段。我只需要使用 Access 数据库检查代码,因此主键现在不是问题。我使用过 MySQL 并且效果很好。对 ODBC-Access 不太熟悉。
标签: jdbc odbc ms-access-2013