如何使用JDBC PreparedStatement将行插入MS Access?
未在Access DB中插入值。我的DSN名称为“DB”,表名为“Employee”。 Access DB正在连接(由修改的时间指示),但没有成功的插入操作。NetBeans出现错误:“数据库位置设置不正确。”我已使用数据源(ODBC)中的数据库设置了DSN 以下是完整的代码:如何使用JDBC PreparedStatement将行插入MS Access?,jdbc,odbc,ms-access-2013,Jdbc,Odbc,Ms Access 2013,未在Access DB中插入值。我的DSN名称为“DB”,表名为“Employee”。 Access DB正在连接(由修改的时间指示),但没有成功的插入操作。NetBeans出现错误:“数据库位置设置不正确。”我已使用数据源(ODBC)中的数据库设置了DSN 以下是完整的代码: import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverMana
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);
}
}
}
}
import java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.SQLException;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*
*@author javantu
*/
公共类DB扩展HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*
*@param请求
*@param响应
*@ServletException
*@抛出异常
*/
@
推翻
public void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
setContentType(“text/html;charset=UTF-8”);
尝试(PrintWriter out=response.getWriter()){
字符串fn=request.getParameter(“fn”);
字符串ln=request.getParameter(“ln”);
字符串mn=request.getParameter(“mn”);
字符串ps=request.getParameter(“ps”);
字符串add=request.getParameter(“add”);
字符串gen=request.getParameter(“gen”);
out.println(“”);
out.println(“”);
out.println(“Servlet SV”);
out.println(“”);
out.println(“”);
println(“Servlet SV at”+request.getContextPath()+request.getRequestURL()+”);
out.println(“”);
out.println(“”);
out.println(“您的详细信息:”);
out.println(“
名字:”+fn);
out.println(“
姓氏:”+ln);
out.println(“
联系电话:”+mn);
out.println(“
密码:+ps”);
out.println(“
地址:“+add”);
out.println(“
性别:”+gen);
out.println(“
谢谢!”);
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
try(连接c=DriverManager.getConnection(“jdbc:odbc:DB”)){
PreparedStatement pss=c.prepareStatement(“插入员工价值观(?,?,?)”;
pss.设置管柱(1,fn);
pss.setString(2,ln);
固定管柱(3,mn);
pss.设置管柱(4,添加);
pss.executeUpdate();
c、 提交();
}
}catch(ClassNotFoundException | SQLException e){
系统输出打印ln(e);
}
}
}
}
您应该在c.commit()之后添加c.close()
:
你的代码看起来不错。您可以添加日志语句来显示连接的外观(它看起来像sun.jdbc.odbc)。JdbcOdbcConnection@15be5b6
)。另外executeUpdate()
返回插入的行数。在mynorthwind
MS Access数据库中,它工作并返回1以进行类似的插入。把它记录在某个地方
我认为您的问题在于DB连接。查找任何ODBC编辑器并检查DSN是否正常工作。您还可以将连接字符串更改为如下内容:jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=c:\\Nwind.mdb
可能是DSN配置为32位,而Java配置为64位,反之亦然
有关类似的Netbeans错误消息,请参见:检查控制台输出。您可能会收到错误“查询值和目标字段的数量不相同”。@GordThompson:不,没有这样的错误。我重新检查了我的表列。FirstName是我的PrimaryKey。您的Employee表是否定义了四(4)个字段?(顺便说一句,对于主键字段来说,FirstName是一个非常糟糕的选择。在之前添加John Doe之后,如果需要将John Smith添加到数据库中,您会怎么做?)是的,正好有4个字段。我只需要检查Access数据库的代码,所以主键现在不是问题。我使用过MySQL,效果很好。不太熟悉ODBC-Access。请在此处检查答案:它仍然不起作用。我想NetBeans的数据库连接有问题。谢谢你测试我的代码。我将检查日志语句和新的连接字符串。我使用的是64位Java。在数据源中,未显示32位。一定是司机出了问题。
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);
}
}
}
}
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();
c.close();
}