Solved

Trying to insert checkbox array into single DB cell.

Posted on 2006-11-12
19
232 Views
Last Modified: 2010-03-31
I have a servlet that retrieves all checked boxes of a certain name into an array (currently i have two set up below).  I want to convert that array into a String using comma delimitation and have it inserted into my DB.  I seem to be having a problem converting this string- the problem is my lack of know how.

I will post the important parts of my servlet so everyone can see how it looks.  This servlet might have some garbage code in there- i've been messing with this for hours trying to get it to work.

Thank you in advance to anyone who can get this working properly.  It's been a massive headache.


[code]
package savedata;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;

public class MandatoryServlet extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Reading All Request Parameters";
    Enumeration paramNames = request.getParameterNames();
            while(paramNames.hasMoreElements()) {
              String paramName = (String)paramNames.nextElement();
              //out.println("<TR><TD>" + paramName + "\n<TD>");
              for(int count = 0; count<20; count++){
                    String[] exterior = request.getParameterValues("frmExterior"+count);

                                    if(exterior == null) {
                                    } else {
                                          for(int i=0; i<exterior.length; i++) {
                                                if(exterior.length != 0) {
                                                out.print("frm"+count +exterior[i] +",");
                                                getServletContext().setAttribute("foo", exterior);
                                                out.print(getServletContext().getAttribute("foo").setArray());
                                                }
                                          }
                                      }
                        
                    String[] fincancing = request.getParameterValues("frmFinancing"+count);
                                    if(fincancing == null) {
                                    } else {
                                          for(int i=0; i<fincancing.length; i++) {
                                                if(fincancing.length != 0) {
                                                out.print("frm"+count +fincancing[i] +",");
                                                }
                                          }
                                      }
                        }
                        break;
            
      
    }
      out.println("<a href=uadmin/b/requestdatafromservlettest.jsp>asdasd</a>");
  }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
 
 
  public void insert() {
    Connection con = null;
      PreparedStatement prep = null;
      String sql = null;
      ResultSet result;
      

    try {
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jobprop?user=xxx&password=");

      if(!con.isClosed())
        System.out.println("Successfully connected to " +
          "MySQL server using TCP/IP...");
             
                          try
            {
            sql = "INSERT INTO form_main(username)VALUES(?)";            
            prep = con.prepareStatement(sql);
prep.setString(1, getServletContext().getAttribute("foo").setArray());
            prep.executeUpdate();
           }
           catch(Exception m)
           {
            System.out.print(m.getMessage());
           }

    } catch(Exception e) {
      System.err.println("Exception: " + e.getMessage());
    } finally {
      try {
        if(con != null)
          con.close();
      } catch(SQLException e) {}
    }
  }

 
}
[/code]
0
Comment
Question by:domoaarongato
  • 11
  • 8
19 Comments
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927581
I think that you can use String to accomplish that.

Are these the codes that you are talking about?

                 String[] fincancing = request.getParameterValues("frmFinancing"+count);
                              if(fincancing == null) {
                              } else {
                                   for(int i=0; i<fincancing.length; i++) {
                                        if(fincancing.length != 0) {
                                        out.print("frm"+count +fincancing[i] +",");
                                        }
                                   }

If so, can you tell me what the problem with the current codes?

David
                   
0
 

Author Comment

by:domoaarongato
ID: 17927685
yes. that is the code im talking about.  I will also need to pass exteriors to the same row- but i figure that i can do that after i learn how to do this.

[code]
I cannot javac the above class because it throws the below error.
MandatoryServlet.java:31: cannot find symbol
symbol  : method setArray()
location: class java.lang.Object
                                        out.print(getServletContext().getAttribu
te("foo").setArray());
                                                                   ^
freeholdMandatoryServlet.java:79: cannot find symbol
symbol  : method setArray()
location: class java.lang.Object
prep.setString(1, getServletContext().getAttribute("foo").setArray());
                                   ^

[/code]


I don't even know if set/getAttribute is the correct way of going about this.
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927871
I am quite confused with your codes as well.

Why do you need to use getServletContext().getAttribute("foo").setArray()?

First, you have parsed all the information in your doGet method. If it works correctly, you can just pass the parameters to the insert() method. For example,

                 String fincancingResult = "";
                 String[] fincancing = request.getParameterValues("frmFinancing"+count);
                              if(fincancing == null) {
                              } else {
                                   for(int i=0; i<fincancing.length; i++) {
                                        if(fincancing.length != 0) {
                                        //out.print("frm"+count +fincancing[i] +",");
                                        fincancingResult  = "frm"+count +fincancing[i] +",";
                                        }
                                   }

                             insert (fincancingResult);

Then in your insert method,

public void insert(String fincancingResult) {

}

Now, the result is available to your insert method.

David
0
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 

Author Comment

by:domoaarongato
ID: 17927912
I was told that to pass a value to another method i may need to set and attribute.  i've since learned this is incorrect.

Can i pass more than one parameter to the insert() method?

I will try your code out very shortly.   I hope it works:)
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927921
Yes, why not?

For example,

String a = "David";
String b = "domoaarongato ";

insert (a, b);

then in your insert method,

public void insert(String a, String b) {
  // now you can access String a and String b.
}
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927924
>>"I was told that to pass a value to another method i may need to set and attribute."
You may need this if you want to send the values FROM your Servlet to your JSP or vice versa. However, your problem is on the Servlet itself so they all are in one *scope* so you should not sue set / get attribute
0
 

Author Comment

by:domoaarongato
ID: 17927959
I seem to be getting an error when i javac
MandatoryServlet.java:81: cannot find symbol
symbol  : variable fincaningResult
location: class savedata.MandatoryServlet
prep.setString(1, fincaningResult);
                  ^


Thanks for the assistance so far. I appreciate it.
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927975
Is that fincaningResult or fincancingResult?

Is that typo?
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17927979
Will be back later on....
0
 

Author Comment

by:domoaarongato
ID: 17927991
ahhm, typo...

one last thing. i trigger this insert via jsp. i normally use

<jsp:useBean id="save" class="savedata.MandatoryServlet" scope="session"/>
<% save.insert();%>

but this wont work anymore.

ive also tried <% save.insert(fincancingResult);%> and <% save.insert(String fincancingResult);%> with no luck.
0
 
LVL 16

Accepted Solution

by:
suprapto45 earned 500 total points
ID: 17928138
Hi domoaarongato,

Now, your logic to parse this is on your doGet method and the doGet method will subsequently call the insert method. You do not need to call it directly from your JSP using the <jsp:useBean>. What you need to do now is to submit the form that goes to MandatoryServlet.

<form action="/MandatoryServlet" method="GET">
    <%-- All the HTML components here --%>

    <input type="submit" value="Submit">
</form>
0
 

Author Comment

by:domoaarongato
ID: 17928189
Hmm. nothing is entering into the DB.

here's what i have
          sql = "INSERT INTO form_main(username)VALUES(?)";          
          prep = con.prepareStatement(sql);
          prep.setString(1, fincancingResult);
          prep.executeUpdate();


If i put something static into the setString the static value inserts..
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17928195
Then,

Do a little debugging....

          sql = "INSERT INTO form_main(username)VALUES(?)";          
          prep = con.prepareStatement(sql);
 
          System.out.println("fincancingResult = " + fincancingResult);
          prep.setString(1, fincancingResult);
          prep.executeUpdate();

and see what does it print in the console?
0
 

Author Comment

by:domoaarongato
ID: 17928197
actually, wait. a static value isnt inserting anymore.. hmm..
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17928201
>>"actually, wait. a static value isnt inserting anymore.. hmm.."
It may be because the insert method is not executed at all. Okay, for ease, can you post your current Servlet and JSP so that I can inspect?
0
 

Author Comment

by:domoaarongato
ID: 17928215
ok, i found the screw up. my mistake.  IT works!  but something is happening that i didnt account for.  It's inserting each value into the db one row at a time, so if i have three checkbox results, it puts them in three rows.

i'm giving you the 500 points for fixing my problem!  let me know if you don't get them.  ive never doen this before.

P.S let me know if you have a solution for the seperate rows prolblem.
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17928220
>>"ok, i found the screw up. my mistake.  IT works!"
:)

>>"It's inserting each value into the db one row at a time, so if i have three checkbox results, it puts them in three rows."
Then, I'll be asking you.

What is the purpose of "for(int count = 0; count<20; count++){"?
0
 

Author Comment

by:domoaarongato
ID: 17928254
That is to set how many times it can loop. i set it to 20 incase there are ever 20 options selected.  Ideally that should be dynamic- but i didnt know how to do it so i made it a static 20. if i need to make it mroe later i can change the 20 to something higher.
0
 
LVL 16

Expert Comment

by:suprapto45
ID: 17928270
I think that the solution to your problem would be bringing out the insert method from this for loop.

I can't help much now as I have something to do. You may be interested to open up another question so other experts can help you or I can pop in later on

David
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
how to add new optional parameter to JSP 1 49
tomcat administrtor 12 61
type mismatch (Object[] to double[] 4 33
restrict decimal places for double datatype 10 19
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question