JSP-Access JDBC ошибка: вставьте в оператор- «Количество значений запроса и поля назначения не совпадают» - PullRequest
0 голосов
/ 04 июня 2011

Мои предыдущие JSP-файлы, которые считывались из базы данных «Тюрьма», работали хорошо. Но мой файл add.jsp, который должен вставлять значения в базу данных, показывает следующее исключение:

"SQLException: Number of query values and destination fields are not the same"
My MS Access2007, converted to **Access2003** Prison db with table 'Nominal' has 14 fields:
PNo(int), PName(str), Age(int), Address(str), Height(int), Weight(int), Health(str), Possessions(str), Occupation(str), Case(str), Sentence(str), From(str), To(str) and Parole(str).

SQL-запросы, используемые на БД до сих пор, имели тип select. однако запросы, изменяющие таблицу, попадают в исключения. кавычки и запятые, имена были тщательно проверены, как указано на других форумах, но все они в порядке. Итак, мы попытались поймать исключение, и оно стало хуже. на самом деле он показывал «Запись добавлена», но не показывал. вместо этого то же сообщение об ошибке появляется в приглашении tomcat7.exe cmd. я использую jdk1.6.0_21 an вот копия моего кода. надеясь, что какой-нибудь друг поможет:

<%@ page language="java" import="java.sql.*" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    String driver="sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);
    Connection con=null;

    Statement stmt=null;
    try
    {
        String url="jdbc:odbc:Prison";
        con=DriverManager.getConnection(url);
        stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }
    if(request.getParameter("action")!=null)
    {
        try
        {
        int PNo=Integer.parseInt(request.getParameter("PNo"));
        String PName=request.getParameter("PName");
        int Age=Integer.parseInt(request.getParameter("Age"));
        String Address=request.getParameter("Address");
        int Height=Integer.parseInt(request.getParameter("Height"));
        int Weight=Integer.parseInt(request.getParameter("Weight"));
        String Health=request.getParameter("Health");
        String Possessions=request.getParameter("Possessions");
        String Occupation=request.getParameter("Occupation");
        String Case=request.getParameter("Case");
        String Sentence=request.getParameter("Sentence");
        String From=request.getParameter("From");
        String To=request.getParameter("To");
        String Parole=request.getParameter("Parole");
        System.out.println(PNo); 
        String s="insert into Nominal values('" +PNo+ "','"+Possessions+ "','" +Occupation+ "','" +Case+ "','" +Sentence+ "','" +From+ "','" +To+ "','" +Parole+ "')";
        stmt.executeUpdate(s);
        }
        catch(SQLException e)
        {
        System.out.println(e.getMessage());
        }
%>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Success!</title>
</head>
<body>
<h1>Record Added</h1>
<a href="addp.html">Back</a>
</body>
</html>
<%  

        stmt.close();
        con.close();
    }

%>

пожалуйста, помогите.

1 Ответ

0 голосов
/ 04 июня 2011

Вам не хватает полей в вашем операторе INSERT INTO, поэтому в запросе INSERT предполагается, что вы передаете значение для каждого отдельного поля в том же порядке, в котором они отображаются в таблице.

Ваш INSERTОператор INTO должен выглядеть примерно так:

String s="INSERT INTO Nominal (Field1, Field2, Field3) VALUES ('" + Value1 + "', '" + Value2 + "', '" + Value3 + "')"  
...