JSP - problem z napisaniem zapytania

0

Mam taki kod:

<%--
    Document   : index
    Created on : 2011-01-03, 23:46:29
    Author     : Aleksander
--%>

<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.lang.*" %>
<%@ page import="java.lang.*" %>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<% String imie_aaa;
    imie_aaa = request.getParameter("addimie");
%>

<% String nazwisko_aaa;
    nazwisko_aaa = request.getParameter("addnazwisko");
%>

<% String numer_aaa;
    numer_aaa = request.getParameter("addnumer");
%>

<%
    Connection conn = null;
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    conn = DriverManager.getConnection("jdbc:sqlserver://" + "127.0.0.1" + "\\" + "SQLEXPRESS" + ":" + "1433" + ";databaseName=" + "KsiazkaTelefoniczna","Alexwielki","dupa");
    Statement stmt = conn.createStatement();
    stmt.executeUpdate("insert into main(\"IMIE\",\"NAZWISKO\",\"NUMER\") values(" + imie_aaa + "," + nazwisko_aaa + "," + numer_aaa+ ")");

%>
<HTML>
    <BODY>
        Po zapisie!
    </BODY>

</HTML>

Po otworzeniu stronki wpisuje dane (Imie daje np Olek) i dostajemy strone z bledami m.in. z takim:

com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'Olek'.

Prawdopodobnie zle napisane jest zapytanie z Insertem. Moglby ktos pomoc?

Dziekuje:)

0

Zacznę od trzech uwag:

  1. Zawsze tworzysz połączenie - jest to tragiczne jeżeli chodzi o wydajność
  2. W JSP wykonujesz logikę - JSP służy tylko do wyświetlenia wcześniej obliczonych danych
  3. Twoja strona jest podatna na SQLInjection - użyj PreparedStatement i metod set*
    http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

Natomiast co do błędu - napisy musisz umieścić w ciapkach ''
Zamiast:
"insert into main("IMIE","NAZWISKO","NUMER") values(" + imie_aaa + "," + nazwisko_aaa + "," + numer_aaa+ ")"
spróbuj:
"insert into main("IMIE","NAZWISKO","NUMER") values('" + imie_aaa + "','" + nazwisko_aaa + "'," + numer_aaa+ ")"

W przypadku PreparedStatement nie musisz tego robić:

PreparedStatement stmt = con.prepareStatement("insert into main(IMIE,NAZWISKO,NUMER) values(?,?,?)");
stmt.setString(1, imie_aaa);
stmt.setString(2, nazwisko_aaa);
stmt.setInt(3,  numer_aaa);

1 użytkowników online, w tym zalogowanych: 0, gości: 1