[JSP/MySQL] Error bij INSERT query

Pagina: 1
Acties:
  • 497 views sinds 30-01-2008
  • Reageer

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 02-04 22:02
Ok ik heb een probleem. Ik wil mbv een form klantgegevens invullen in een database. Dit wil ik doen met JSP.

Ik heb de volgende code gebouwt die de query uitvoert:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<%@ page import="java.net.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>

<% String fa_achter = request.getParameter( "fa_achternaam" );%> 
<% String aa_achter = request.getParameter( "aa_achternaam" );%>
<% String fa_voor = request.getParameter( "fa_voorletters" );%>
<% String aa_voor = request.getParameter( "aa_voorletters" );%>
<% String fa_tussen = request.getParameter( "fa_tussenvoegsels" );%>
<% String aa_tussen = request.getParameter( "aa_tussenvoegsels" );%>
<% String fa_gesl = request.getParameter( "fa_geslacht" );%> 
<% String fa_ad = request.getParameter( "fa_adres" );%>
<% String aa_ad = request.getParameter( "aa_adres" );%>
<% String fa_post = request.getParameter( "fa_postcode" );%>
<% String aa_post = request.getParameter( "aa_postcode" );%>
<% String fa_woon = request.getParameter( "fa_woonplaats" );%>
<% String aa_woon = request.getParameter( "aa_woonplaats" );%>
<% String fa_tel = request.getParameter( "fa_telefoon" );%>
<% String aa_tel = request.getParameter( "aa_telefoon" );%>
<% String fa_mob = request.getParameter( "fa_mobiel" );%>
<% String aa_mob = request.getParameter( "aa_mobiel" );%>
<% String fa_log = request.getParameter( "fa_login" );%>
<% String fa_pas = request.getParameter( "fa_pass" );%>
<%
out.println("INSERT INTO klantinfo VALUES(DEFAULT,'"+fa_achter+"','"+fa_voor+"','"+fa_tussen+"','"+fa_gesl+"','"+fa_ad+"','"+fa_post+"','"+fa_woon+"','"+fa_tel+"','"+fa_mob+"','"+fa_log+"','"+fa_pas+"')");

try
    {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    }
    
    catch (Exception E) 
        {
        out.println("Unable to load driver.");
        E.printStackTrace();
        }
    
try
    {
    Connection C = DriverManager.getConnection("jdbc:mysql://localhost:3306/project2?user=root");
    Statement S = C.createStatement();
    ResultSet rs = S.exececuteQuery("INSERT INTO klantinfo VALUES(DEFAULT,'"+fa_achter+"','"+fa_voor+"','"+fa_tussen+"','"+fa_gesl+"','"+fa_ad+"','"+fa_post+"','"+fa_woon+"','"+fa_tel+"','"+fa_mob+"','"+fa_log+"','"+fa_pas+"')");
    }
    
catch (Exception E) 
    {
    out.println("SQLException: " + E.getMessage());
    }
%>


Ik heb zo'n beetje alles al getest. Alle gegevens worden goed door gestuurd vanuit het formulier en daarna goed ingevoerd in de instructie. Als ik deze opgestelde instructie direct invoer werkt het ook perfect. Maar als ik op "opslaan" druk in het formulier krijg ik de volgende error:
code:
1
SQLException: Can not issue data manipulation statements with executeQuery().

Ik heb al gekeken naar executeUpdate, maar daar kwam ik niet echt uit. Dus ik hoop dat iemand hier iets moois voor me heeft.

Alvast Bedankt

[ Voor 20% gewijzigd door Jilvoos op 06-02-2006 22:56 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 08-04 16:23

André

Analytics dude


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je moet toch echt executeUpdate gebruiken voor INSERT, UPDATE or DELETE statements, zie je documentatie (bv. : http://java.sun.com/j2se/...i/java/sql/Statement.html )

executeQuery() is alleen voor queries welke een resultset teruggeven.
Ik heb al gekeken naar executeUpdate, maar daar kwam ik niet echt uit. Dus ik hoop dat iemand hier iets moois voor me heeft.
Werkt verder hetzelfde, alleen returnt executeUpdate een int ipv een resultset.

En los hier van:
Controleer altijd user input. Ja, dat is een harde regel en ja dat moet duidelijk gebracht worden.

[ Voor 45% gewijzigd door Voutloos op 06-02-2006 23:04 ]

{signature}


Verwijderd

Voutloos schreef op maandag 06 februari 2006 @ 22:58:
En los hier van:
Controleer altijd user input. Ja, dat is een harde regel en ja dat moet duidelijk gebracht worden.
Precies. En om je even verder op weg te helpen, je applicatie is nu kwetsbaar voor zgn. hostile SQL injection technieken. En vergeet ook niet zaken te HTML-encoden, wanneer je ze later weer weergeeft in webpagina's.

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 02-04 22:02
Voutloos schreef op maandag 06 februari 2006 @ 22:58:
Je moet toch echt executeUpdate gebruiken voor INSERT, UPDATE or DELETE statements, zie je documentatie (bv. : http://java.sun.com/j2se/...i/java/sql/Statement.html )

executeQuery() is alleen voor queries welke een resultset teruggeven.

[...]

Werkt verder hetzelfde, alleen returnt executeUpdate een int ipv een resultset.

En los hier van:
Controleer altijd user input. Ja, dat is een harde regel en ja dat moet duidelijk gebracht worden.
Ok ik heb overal gezocht naar hor dat precies moet, maar kom er niet uit. Ik ben erachter dat het met een preparedStatement moet (volgens mij...), maar als ik dit heb dan weet ik niet hoe ik die pstmt als een query kan uitvoeren

code:
1
2
3
    PreparedStatement pstmt = C.prepareStatement("SELECT COUNT(*) FROM admin WHERE login= ? AND pass= ?");
    pstmt.setString(1, request.getParameter("user2"));
    pstmt.setString(2, request.getParameter("pass2"));


Alvast bedankt voor de hulp

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:00

Janoz

Moderator Devschuur®

!litemod

Wat dacht je van pstmt.execute() of (in het geval van een select) ostmt.executeQuery(). In principe is dit redelijk makkelijk te vinden als je op het linkje van Voutloos door hat geclicked naar PreparedStatement

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Reinder83
  • Registratie: September 2002
  • Laatst online: 10-04 08:57
als je iets wil wijzigen in de database, dmv INSERT, UPDATE, CREATE, DELETE, etc...
moet je updateQuery(String query) gebruiken.

als je gegeven uit de database wilt halen (SELECT) gebruik je:
excuteQuery(String query)

  • Jilvoos
  • Registratie: Maart 2003
  • Laatst online: 02-04 22:02
Ok dan, ik heb het helemaal werkende, allemaal hartstikke bedankt!!
Pagina: 1