如何使用JDBC PreparedStatement将行插入MS Access?

如何使用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

未在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.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()
返回插入的行数。在my
northwind
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();
 }