quotes in text field on java server pages and sql

I am french.

Hi all,

I have a memo field in Ultradev (and some text fields) that are inserted into an Filemaker database when the form is submitted.... nothing too exciting, but, i now have to be able to have apostrophes in the text & memo fields. When i have an apostrophe in the field, my application Server (JRUN 3.1) an error occurs - the apostrophe indicates the end of the string to submit to the database. When i don't print apostrophes in the text field, everything is ok.

Please try to help me as soon as possible

Thanks, Arnaud

It is urgent .

[CODE]

<%@page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*"%>

<%

// *** Logout the current user.

String MM_Logout = request.getRequestURI() + "?MM_Logoutnow=1";

if (request.getParameter("MM_Logoutnow") != null && request.getParameter("MM_Logoutnow").equals("1")) {

session.putValue("MM_Username", "");

session.putValue("MM_UserAuthorization", "");

String MM_logoutRedirectPage = "../index.jsp";

// redirect with URL parameters (remove the "MM_Logoutnow" query param).

if (MM_logoutRedirectPage.equals("")) MM_logoutRedirectPage = request.getRequestURI();

if (MM_logoutRedirectPage.indexOf("?") == -1 && request.getQueryString() != null) {

String MM_newQS = request.getQueryString();

String URsearch = "MM_Logoutnow=1";

int URStart = MM_newQS.indexOf(URsearch);

if (URStart >= 0) {

MM_newQS = MM_newQS.substring(0,URStart) + MM_newQS.substring(URStart + URsearch.length());

}

if (MM_newQS.length() > 0) MM_logoutRedirectPage += "?" + MM_newQS;

}

response.sendRedirect(response.encodeRedirectURL(MM_logoutRedirectPage));

}

%>

<%@ include file="../Connections/webpaf.jsp" %>

<%

// *** Edit Operations: declare variables

// set the form action variable

String MM_editAction = request.getRequestURI();

if (request.getQueryString() != null && request.getQueryString().length() > 0) {

MM_editAction += "?" + request.getQueryString();

}

// connection information

String MM_editDriver = null, MM_editConnection = null, MM_editUserName = null, MM_editPassword = null;

// redirect information

String MM_editRedirectUrl = null;

// query string to execute

StringBuffer MM_editQuery = null;

// boolean to abort record edit

boolean MM_abortEdit = false;

// table information

String MM_editTable = null, MM_editColumn = null, MM_recordId = null;

// form field information

String[] MM_fields = null, MM_columns = null;

%>

<%

// *** Update Record: set variables

if (request.getParameter("MM_update") != null &&

request.getParameter("MM_recordId") != null) {

MM_editDriver = MM_webpaf_DRIVER;

MM_editConnection = MM_webpaf_STRING;

MM_editUserName = MM_webpaf_USERNAME;

MM_editPassword = MM_webpaf_PASSWORD;

MM_editTable = "modules";

MM_editColumn = "a_code_module_paf";

MM_recordId = "'" + request.getParameter("MM_recordId") + "'";

MM_editRedirectUrl = "merci_maj.jsp";

String MM_fieldsStr = "titre_dispositif|value|a_titre_module|value|a_public|value|a_objectif|value|a_contenu|value|a_methode|value|lieu_stable|value|a_observation|value";

String MM_columnsStr = "titre_dispositif|',none,''|a_titre_module|',none,''|a_public|',none,''|a_objectif|',none,''|a_contenu|',none,''|a_methode|',none,''|lieu_stable|',none,''|a_observation|',none,''";

// create the MM_fields and MM_columns arrays

java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_fieldsStr,"|");

MM_fields = new String[tokens.countTokens()];

for (int i=0; tokens.hasMoreTokens(); i++) MM_fields = tokens.nextToken();

tokens = new java.util.StringTokenizer(MM_columnsStr,"|");

MM_columns = new String[tokens.countTokens()];

for (int i=0; tokens.hasMoreTokens(); i++) MM_columns = tokens.nextToken();

// set the form values

for (int i=0; i+1 < MM_fields.length; i+=2) {

MM_fields[i+1] = ((request.getParameter(MM_fields)!=null)?(String)request.getParameter(MM_fields):"");

}

// append the query string to the redirect URL

if (MM_editRedirectUrl.length() != 0 && request.getQueryString() != null) {

MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf('?') == -1)?"?":"&") + request.getQueryString();

}

}

%>

<%

// *** Update Record: construct a sql update statement and execute it

if (request.getParameter("MM_update") != null &&

request.getParameter("MM_recordId") != null) {

// create the update sql statement

MM_editQuery = new StringBuffer("update ").append(MM_editTable).append(" set ");

for (int i=0; i+1 < MM_fields.length; i+=2) {

String formVal = MM_fields[i+1];

String elem;

java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_columns[i+1],",");

String delim = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";

String altVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";

String emptyVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";

if (formVal.length() == 0) {

formVal = emptyVal;

} else {

if (altVal.length() != 0) {

formVal = altVal;

} else if (delim.compareTo("'") == 0) { // escape quotes

StringBuffer escQuotes = new StringBuffer(formVal);

for (int j=0; j < escQuotes.length(); j++)

if (escQuotes.charAt(j) == '\'') escQuotes.insert(j++,'\'');

formVal = "'" + escQuotes + "'";

} else {

formVal = delim + formVal + delim;

}

}

MM_editQuery.append((i!=0)?",":"").append(MM_columns).append(" = ").append(formVal);

}

MM_editQuery.append(" where ").append(MM_editColumn).append(" = ").append(MM_recordId);

if (!MM_abortEdit) {

// finish the sql and execute it

Driver MM_driver = (Driver)Class.forName(MM_editDriver).newInstance();

Connection MM_connection = DriverManager.getConnection(MM_editConnection,MM_editUserName,MM_editPassword);

PreparedStatement MM_editStatement = MM_connection.prepareStatement(MM_editQuery.toString());

MM_editStatement.executeUpdate();

MM_connection.close();

// redirect with URL parameters

if (MM_editRedirectUrl.length() != 0) {

response.sendRedirect(response.encodeRedirectURL(MM_editRedirectUrl));

}

}

}

%>

<%

String modules__MMColParam = "1";

if (request.getParameter("choix") !=null) {modules__MMColParam = (String)request.getParameter("choix");}

%>

<%

Driver Drivermodules = (Driver)Class.forName(MM_webpaf_DRIVER).newInstance();

Connection Connmodules = DriverManager.getConnection(MM_webpaf_STRING,MM_webpaf_USERNAME,MM_webpaf_PASSWORD);

PreparedStatement Statementmodules = Connmodules.prepareStatement("SELECT a_contenu, a_public, a_observation, a_methode, a_objectif, a_code_module_paf, a_chapitres_clair, a_titre_module, lieu_stable, a_affiche_modalites, a_affiche_type_module_texte_clair, titre_dispositif FROM modules WHERE a_code_module_paf = '" + modules__MMColParam + "' ORDER BY a_code_module_paf ASC");

ResultSet modules = Statementmodules.executeQuery();

boolean modules_isEmpty = !modules.next();

boolean modules_hasData = !modules_isEmpty;

Object modules_data;

int modules_numRows = 0;

%>

<html><!-- #BeginTemplate "/Templates/mod_indenti.dwt" -->

<head>

<!-- #BeginEditable "doctitle" -->

<title>Plan acad閙ique de formation 2002/2003 de l'Acad閙ie de Cr閠eil</title>

<!-- #EndEditable -->

<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">

<meta NAME="Author" CONTENT="Cellule Acad閙ique de Formation de l'Acad閙ie de Cr閠閕l">

<meta NAME="Keywords" CONTENT="stages, dispositifs, modules, formation, apprentissage, tice, p閐agogie, enseignement,professeurs, lyc閑, coll鑗e, 閏ole, pr閜aration au concours, agr間ation">

<meta NAME="Description" CONTENT="Listes des dispositifs et modules du plan acad閙ique de formation de l'acad閙ie de Cr閠eil">

<meta NAME="GENERATOR" content="Macromedia dreamweaver Ultradev4">

<META NAME=Robots CONTENT=All>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link rel="stylesheet" href="../css/couleurs.css" type="text/css">

<script language="JavaScript">

<!--

function addToFavorite(favTitle){

if ((navigator.appVersion.indexOf("MSIE") > 0) && (parseInt(navigator.appVersion) >= 4)) {

window.external.AddFavorite(location.href, unescape(favTitle));

}

}

//-->

</script>

<script language="JavaScript">

<!--

function MM_reloadPage(init) { //reloads the window if Nav4 resized

if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {

document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}

else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();

}

MM_reloadPage(true);

// -->

</script>

</head>

<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">

<table border="0" cellpadding="0" cellspacing="0" width="710">

<!-- fwtable fwsrc="bandeau.png" fwbase="bandeau.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" -->

<tr>

<td width="710">

<table border="0" cellpadding="0" cellspacing="0" width="700">

<!-- fwtable fwsrc="bandeau.png" fwbase="bandeau.gif" fwstyle="Dreamweaver" fwdocid = "742308039" fwnested="0" -->

<tr>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="151" height="1" border="0" name="undefined_2"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="131" height="1" border="0" name="undefined_2"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="287" height="1" border="0" name="undefined_2"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="131" height="1" border="0" name="undefined_2"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="1" height="1" border="0" name="undefined_2"></td>

</tr>

<tr>

<td rowspan="4"><img name="bandeau_r1_c1" src="../Templates/bandeau_caf/bandeau_r1_c1.gif" width="151" height="95" border="0"></td>

<td colspan="3"><img name="bandeau_r1_c2" src="../Templates/bandeau_caf/bandeau_r1_c2.gif" width="549" height="6" border="0"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="1" height="6" border="0" name="undefined_2"></td>

</tr>

<tr>

<td rowspan="2"><img name="bandeau_r2_c2" src="../Templates/bandeau_caf/bandeau_r2_c2.gif" width="131" height="57" border="0"></td>

<td><img name="bandeau_r2_c3" src="../Templates/bandeau_caf/bandeau_r2_c3.gif" width="287" height="51" border="0"></td>

<td rowspan="2"><img name="bandeau_r2_c4" src="../Templates/bandeau_caf/bandeau_r2_c4.gif" width="131" height="57" border="0"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="1" height="51" border="0" name="undefined_2"></td>

</tr>

<tr>

<td><img name="bandeau_r3_c3" src="../Templates/bandeau_caf/bandeau_r3_c3.gif" width="287" height="6" border="0"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="1" height="6" border="0" name="undefined_2"></td>

</tr>

<tr>

<td colspan="3"><img name="bandeau_r4_c2" src="../Templates/bandeau_caf/bandeau_r4_c2.gif" width="549" height="32" border="0"></td>

<td><img src="../Templates/bandeau_caf/spacer.gif" width="1" height="32" border="0" name="undefined_2"></td>

</tr>

</table>

</td>

</tr>

</table>

<table width="711" border="0" cellpadding="0" cellspacing="0" height="900">

<tr>

<td width="712" height="856" valign="top" bgcolor="#FFFFFF"><!-- #BeginEditable "principal" -->

<font face="Verdana, Arial, Helvetica, sans-serif" color="#000099" size="4"><b><img src="../images/p_orange30.gif" width="30" height="30" align="absmiddle">

Modification d'un enregistrement dans la base de donn閑s (suite)</b></font>

<p align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000"><a href="<%=MM_Logout%>"><b>Quitter

sans faire de modifications</b></a></font>

<ul>

<li><b>Vous 阾es dans le module </b>: <b><font size="4" face="Verdana, Arial, Helvetica, sans-serif" color="#FF0000"><%= (((modules_data = modules.getObject("a_code_module_paf"))==null || modules.wasNull())?"":modules_data).toString().toUpperCase() %></font></b>

</li>

<li><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Effectuez

vos modifications dans les champs et cliquez sur "mettre ?

jour l'enregistrement" :</font></b></li>

</ul>

<form name="maj" method="POST" action="<%=MM_editAction%>">

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">

</font></b>

<table width="75%" border="0" cellspacing="0" cellpadding="3" bgcolor="#CCCCCC">

<tr>

<td>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">Titre

dispositif :</font><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#FF0000">

</font></b>

<input type="text" name="titre_dispositif" size="100" value="<%=((((modules_data = modules.getObject("titre_dispositif"))==null || modules.wasNull())?"":modules_data))%>">

<b><font size="3" face="Verdana, Arial, Helvetica, sans-serif" color="#000099">Titre

module :

</font> </b>

<input type="text" name="a_titre_module" size="100" value="<%=((((modules_data = modules.getObject("a_titre_module"))==null || modules.wasNull())?"":modules_data))%>">

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">Public

</font> <font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">

:

</font></b>

<textarea name="a_public" wrap="PHYSICAL" rows="3" cols="70"><%=(((modules_data = modules.getObject("a_public"))==null || modules.wasNull())?"":modules_data)%></textarea>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">Objectifs

</font> <font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">

:</font></b>

<textarea name="a_objectif" cols="70" rows="5"><%=(((modules_data = modules.getObject("a_objectif"))==null || modules.wasNull())?"":modules_data)%></textarea>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">Contenus

: </font></b>

<textarea name="a_contenu" cols="70" rows="5"><%=(((modules_data = modules.getObject("a_contenu"))==null || modules.wasNull())?"":modules_data)%></textarea>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">M閠hode

:

</font> </b>

<textarea name="a_methode" cols="70" rows="5"><%=(((modules_data = modules.getObject("a_methode"))==null || modules.wasNull())?"":modules_data)%></textarea>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">Lieu

:</font></b>

<textarea name="lieu_stable" cols="70" rows="3"><%=(((modules_data = modules.getObject("lieu_stable"))==null || modules.wasNull())?"":modules_data)%></textarea>

<font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099"><b>Observations

:

<textarea name="a_observation" cols="70" rows="3"><%=(((modules_data = modules.getObject("a_observation"))==null || modules.wasNull())?"":modules_data)%></textarea>

</b></font>

<p align="center">

<input type="submit" name="Submit" value="Mettre ?jour l'enregistrement">

</td>

</tr>

</table>

<b><font face="Verdana, Arial, Helvetica, sans-serif" size="3" color="#000099">

</font></b>

<input type="hidden" name="MM_update" value="true">

<input type="hidden" name="MM_recordId" value="<%=(((modules_data = modules.getObject("a_code_module_paf"))==null || modules.wasNull())?"":modules_data)%>">

</form>

<p align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#000000"><a href="<%=MM_Logout%>"><b>Quitter

sans faire de modifications</b></a></font>

<!-- #EndEditable --></td>

<td width="1" height="856"></td>

</tr>

<tr bgcolor="#FFFFFF">

<td valign="middle" bordercolor="#FF8516" colspan="2">

<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif"

color=#999999><font size="2">?Formation des personnels- CRETEIL -

<!-- #BeginDate format:Sw1 -->14 mai, 2002<!-- #EndDate -->

</font></font></div>

</td>

</tr>

<tr>

<td height="2" width="712" bgcolor="#FFFFCC"></td>

<td width="1" height="2"></td>

</tr>

</table>

</body>

<!-- #EndTemplate --></html>

<%

modules.close();

Connmodules.close();

%>

[/CODE]

[19271 byte] By [Arnaud_turquoisa] at [2007-9-19]
# 1

The single quote in the SQL language does represent the end of a literal string. But two single quotes together will remedy the problem.

this function should replace all the " ' " with " '' ".

public String fixQuotations(String inStr)

{

StringBuffer sb;

int startindex = 0;

int x = inStr.indexOf("'", startindex);

while(x > 0)

{

sb = new StringBuffer(inStr);

sb = sb.insert(x, "'");

inStr = sb.toString();

x = inStr.indexOf("'", x+1);

}

return inStr;

}

The idea of the above function is just to loop through the string and replace all instances of the single quotation to two single quotations.

JD_CLOKa at 2007-7-8 > top of java,Database Connectivity,Java Database Connectivity (JDBC)...