Pass char array to c++ DLL and return same char array

Lectori Salutem,
Here is the situation:
Im learning TestStand, and to learn the basics, I want to do the following:
Call a (C++) DLL in TestStand with an array of chars.
The DLL should return the array of chars (or a pointer to the datalocation).
This is the code in my DLL:
TESTDLL3_API char* bounceString(char data[])
  data = "Hello World";
  cout << data;
char* pointer = data;
return pointer;
However, this function will not be recognized by TestStand
When this is working, I think I can build the rest of the functionality by myself.
Thanks in advance for any help!
Jeroen
The Netherlands
Solved!
Go to Solution.

Sadly, in the example there is no return value to TestStand.
However, I did manage to return the pointer of the char array to TestStand:
int __declspec( dllexport )  bounceString2(char* argument)
  void *pointer;
  int i;
  argument = "Hello";
  pointer = argument;
  i = (int) pointer;
  return i;
So, right now I have to find out how to retrieve the char array from the pointer...
Jeroen
PS, I will look at the CVI code, and let you know about my process

Similar Messages

  • ActiveX DLL and Variants

    Hi
    does anybody know if there exists a faster way to pass Arrays of doubles between VisualBasic (ActiveX DLL) and LabView? An array of doubles apears in LabView always as a variant and therefor the speed is slow.
    Thanks for helping.

    The Variant really isn't going to slow down the transfer. LV arrays are not the same as VB arrays (which through COM are passed as SafeArrays). Thus to make the call, we need to create an instance of a SafeArray and copy the LV array into it (and back out if the parameter is marked in/out or out). If the array size is very large, this can get expensive. Unfortunately, if you want to access the array data in both languages, then there isn't any other solution - the data types are just different and thus require the copy.
    Brian Tyler
    http://detritus.blogs.com/lycangeek

  • DIFFERENCE BETWEEN THE DATA DECLARATIONS NVARCHAR2 AND VARCHAR2(x CHAR)

    CAN ANYONE HELP ME FIND THE DIFFERENCE BETWEEN THE DATA DECLARATIONS; NVARCHAR2 AND VARCHAR2(x CHAR), WHERE X IS THE SIZE OF DATA TO BE HELD WITH THE VARIABLE OR ATTRIBUTE

    Duplicate posting....
    Difference between nvarchar2(10) and varchar2(10 char )
    Difference between nvarchar2( 10) and varchar2( 10 char)
    Please refer also...
    Nvarchar2

  • How to pass a struct to a DLL function and accessing it in another VI

    Hi friends,
                       I am new to labview. I need to create a demo program in labview ,for displaying image from our own image capturing system. We have a  DLL ( build in VC++) containing functions for capturing image from our system. Now I need to create a VI library for some of functions in DLL and Create a Demo program using those created subvi library . I used "Call Function node" and created some of subvi's.
     Some of our DLL functions need to pass struct pointers.  Our function prototype will be similar to the following function.
    __declspec(dllexport) int __stdcall Initialize( unsigned char *imagebuffer,struct config *Configuration);
    The passed struct is similar to
    struct config
      double                val1[3];
      unsigned short   val2;
      bool                    val3;
      bool                    val4[3];    
      unsigned char    val5;    
      unsigned char   val6[3];
      bool                    val7[26];
    For passing "unsigned char *imagebuffer"  I initialized array with "Numeric constant " and set the size of the array and send to the function.
    The problem here is, I used this array in one of the subvi. 
    How can I use the returned imagebuffer array  in my main demo program. How to connect the image array to subvi "Connecter Pane"
    And  which control  can I use to display the image. The image data I get is form of 1-D Array .
    The second problem is,
                                 For passing the structure,  I used "Bundle " and filled the bundle with all the datatypes as in my struct and passed to the function. Is it correct ?  How to access this bundle after returned from function  in another Vi. ie.) How to connect this bundle to the connter pane ?
    Thanks for your valuable suggestions.
    aajjf.
    Message Edited by aajjf on 04-19-2007 05:34 AM

    aajjf wrote:
    Hi friends,
                       I am new to labview. I need to create a demo program in labview ,for displaying image from our own image capturing system. We have a  DLL ( build in VC++) containing functions for capturing image from our system. Now I need to create a VI library for some of functions in DLL and Create a Demo program using those created subvi library . I used "Call Function node" and created some of subvi's.
     Some of our DLL functions need to pass struct pointers.  Our function prototype will be similar to the following function.
    __declspec(dllexport) int __stdcall Initialize( unsigned char *imagebuffer,struct config *Configuration);
    The passed struct is similar to
    struct config
      double                val1[3];
      unsigned short   val2;
      bool                    val3;
      bool                    val4[3];    
      unsigned char    val5;    
      unsigned char   val6[3];
      bool                    val7[26];
    For passing "unsigned char *imagebuffer"  I initialized array with "Numeric constant " and set the size of the array and send to the function.
    The problem here is, I used this array in one of the subvi. 
    How can I use the returned imagebuffer array  in my main demo program. How to connect the image array to subvi "Connecter Pane"
    And  which control  can I use to display the image. The image data I get is form of 1-D Array .
    The second problem is,
                                 For passing the structure,  I used "Bundle " and filled the bundle with all the datatypes as in my struct and passed to the function. Is it correct ?  How to access this bundle after returned from function  in another Vi. ie.) How to connect this bundle to the connter pane ?
    Thanks for your valuable suggestions.
    aajjf.
    Message Edited by aajjf on 04-19-2007 05:34 AM
    You say nothing about how your cluster looks but I'm afraid you did the standard error here and placed arrays in it. That is not what the C structure is representing for several reasons.
    First fixed size arrays in C are inlined inside a structure, so are not a pointer but for the case of your val1 element three doubles.
    Second although not relevant here because of above point: LabVIEW arrays are not the same as C arrays. LabVIEW uses a pointer to a pointer and has the size of the array in elements prepended to the array data. C simply uses a pointer and all the rest is the programmers sorrow. The Call Library Node does convert the top level element of variables you pass according to the type configuration of that parameter but does no conversion of internal elements at all. So passing clusters with anything like arrays or strings is always wrong unless the DLL is aware of the specific datatypes LabVIEW uses.
    Last but not least you can end up with alignment issues. Elements in structures are aligned by every C compiler to a certain value. This value can be defined by the programmer in the project settings or for Visual C through #pragma pack() statements in the C code. The alignment rule says that an variable is aligned to the smaller of the two values that are either a multiple of the variable element size or the alignment setting. Most 32bit code nowadays uses 8 bit default alignment but LabVIEW always uses 1 byte. In your case there is nothing to observe since the large variables are at the beginning. Otherwise you might have had to insert filler elements in the LabVIEW cluster.
    One last thing bool is a C++ type only. Its size is 1 byte and incidentially this is the same LabVIEW uses for Booleans.
    Rolf Kalbermatter
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Pass char table to a DLL

    Hello fellows,  (using LabVIEW 8.5 full dev with WinXP)
     I'm dealing with calling DLLs functions. So, I have the DLL code to build for passing from LabVIEW a table of char like this:
    char table [ ] = {0x04, 0x0F, 0x04, 0x00,0x00,0xFA,0x00}
    So I pass the data by creating a table of char in labview and select "Adapt to type" when passing this table in the calling DLL function node.
    Then I wrote the data to a Pipe to be interpreted by the other program.
    here is the c program:
    extern "C" _declspec (dllexport) void test_Write_Event(HANDLE HandlePipe, char InputArray[255] ,char OutputArray[255],int size)
     BOOL fileRead;
     DWORD bytesWrite;
     int i;
     char *pEvent = "";
      /* Copy the input array */
      for(i = 0; i < size; i++)
       pEvent[i] = InputArray[i];
      OutputArray = InputArray;
      //Write to pipe
      fileRead = WriteFile(HandlePipe,
                        pEvent,
            (size),
            &bytesWrite, NULL); 
    I don't know if my data type adaptation is right ?? some help !
    PS: the vi to test this DLL function attached
    Attachments:
    TestFunction.vi ‏17 KB

    Sadly, in the example there is no return value to TestStand.
    However, I did manage to return the pointer of the char array to TestStand:
    int __declspec( dllexport )  bounceString2(char* argument)
      void *pointer;
      int i;
      argument = "Hello";
      pointer = argument;
      i = (int) pointer;
      return i;
    So, right now I have to find out how to retrieve the char array from the pointer...
    Jeroen
    PS, I will look at the CVI code, and let you know about my process

  • Issue with Submit and Return in passing string/values of longer length.

    Hi,
    I have a FM which has to submit a report as a job.
    I am required to send a string( length could be close to 1024 characters or more than that) to the report as the parameter.
    I am using Submit with Return.
    1.When I pass my string as parameters, in the report it gets truncated at 60 chars.( though i have defined the parameter of type char1024)I lose the data.
    2.When I split my string(aflter logical splitting the lenght is still equal to about 200 chars) and then pass as select options it gets truncated at 45 chars in the report ( though i have defined the parameter of type char1024)and i lose my data.
    3.I cannot use Export/Import as I found that it does not work with jobs.
    Please let me know how can i sumbit the report as a job while passing it a string of length 1024 characters.
    Regards,
    Sulakshana
    Edited by: Sulakshana Shinde on May 21, 2009 2:44 PM

    Option 3 should work, unless you are not using the EXPORT/IMPORT correctly.  I believe that you are going across work processes, which means you may need to use the shared buffer or shared memory when using the export/import statements.  
    Something like this.
    Data: lv_value type string.
    lv_value = 'SomeValue'.
    EXPORT lv_value = lv_value
           TO SHARED BUFFER INDX(ST) ID 'SomeUnigueKey'.
    See this.
    http://help.sap.com/abapdocu/en/ABAPEXPORT_DATA_CLUSTER_MEDIUM.htm
    Regards,
    Rich Heilman

  • Help (Chars and returns)

    I need some help in 2 questions, thanks for your posts!
    1. Can I join 2 or more chars in a string?
    2. Can I return a array, like this?
        double[ ][ ] returnarray(){
            return darray[ ][ ];
        }When I try it gives-me this error:
    DynamicArray.java [44:1] '.class' expected
    return darray[ ][ ] ;
    ^
    Thanks for your posts!

    I�ve donne this subroutine, that is supose to return a array after creating it ( and with values inside it )
    public class DynamicArray{
        private double[ ] [ ] darray;
        void dcreate(int num1, int num2);
            if(num1<1 || num2<1){
                System.out.println("System internal error: program needs to close!");
                System.exit(1);
            darray = new double[num1] [num2];
        void dadd(int num1, int num2, double toput){
            if (create==false){
                System.out.println("System internal error: program needs to close!");
                System.exit(0);
            if(darray.length -1>= num1 & darray[0].length-1 >= num2){
                darray[num1][num2]=toput;
        double[ ][ ] returnarray(){
            return darray [ ] [ ] ;
    }But it gives-me this error:
    DynamicArray.java [43:1] '.class' expected
    return darray[][] ;
    ^
    1 error
    Errors compiling DynamicArray.
    Can you tell-me how to return the array?

  • Passing array variables into functions (and why I'm hopeless at arrays)

    OK, I have spent a day on this now and have done some fairly
    extensive searching online. The problem is - I am hopeless with
    arrays (and probably just actionscript generally for that matter)
    I want to create an array of buttons, so I set up an array of
    actions, step through each item and then try to pass that array
    action into an onclick button for an attached button
    The problem I have is that the onclick function ALWAYS
    returns the last item in the array.
    Help!
    Code below:
    ----------------------------------------------------------------

    the reason for this, is that once the for loop executes, the
    'last' value is the only one remaining. what one needs to do here
    is 'store' the string in a newly created property on each button,
    like this:

  • Sorting and return values from parralell arrays

    import java.io.*;
    import java.util.*;
    class Check{
         String words;
         String signature;
         Check(String w, String s){
              words = w;
              signature = s;
    class Test{
         static String[]a = new String[100];
         static String[]b = new String[100];
         public static void main(String[] args)throws IOException{
              Scanner in = new Scanner(new FileReader("input.txt"));
              //Check []ch = new Check[100];
              String str = in.next();
    int z = 0;
          while(!(str.equals("$$$$"))){            
           a[z] = str;
           b[z] = getNumberSequenceFromString(str);
           z++;
           str = in.next();
              insertionSort(a,0,z);
              insertionSort(b,0,z);
         //     for(int i = 0; i < z; i++){
    ///     System.out.println(a);
              for (int i = 0; i < z ; i++){
                   System.out.println(a[i]+" "+b[i]);
              String key = "225533";//should give the word "move", istead it is giving me "TEXT" which is incorrect
              int rope = binarySearch(key,b,0,z-1);
              System.out.println("rrrrrrrrrrrrrrropr "+ rope);
              System.out.println("i found him :"+a[rope/2]);
         }//end main
         public static String getNumberSequenceFromString(String word){
              int l = word.length();
              String str = " ";
              word = word = word.toLowerCase();
         for(int i = 0; i < l; i++){
                   char y = word.charAt(i);
         if(y < 100){
              str +=2;
         }else if(y < 103){
              str +=3;
         }else if( y < 106){
              str +=4;
         }else if( y < 109){
              str += 5;
         }else if(y < 112){
              str += 6;
         }else if(y < 116){
              str += 7;
         }else if (y < 119){
              str += 8;
         }else{
              str +=9;
         }//end for
              return str;
         }//end getWord();
         public static void insertionSort(String[]list,int lo, int n){
         for(int j = lo+1; j < n; j++){
              String key = list[j];
              int k = j-1;
              while(k >= lo && key.compareToIgnoreCase(list[k]) < 0){
                   list[k + 1] = list[k];
                   --k;
              }//end while
              list[k+1] = key;
         }//end for
    }//end insertion sort
         public static int binarySearch(String key, String[]b, int lo, int hi){
         while(lo <= hi-1){
              int mid = (lo + hi)/2;
              System.out.println("i am mmmmmmmmmmmmmid" + mid);
              int cmp = key.compareToIgnoreCase(b[mid]);
              if (cmp==0)return mid;
              if (cmp < 0)hi = mid -1;
              else lo = mid + 1;
         }//end while
         return lo;
    }//end binarysearch
    }//end classAbove is my revise code.  Your idea worked fine, thank you.  I have a problem though.  I tried to create a class eg:
    class Check{
    String words;//for words
    String signature; //for numbers
    Check (String w, String s){
    words = w;
    signature = s;
    The idea was to store the word and its signature as an object, after which I would sort.  Howerver, when I tried reading in the values eg: check[]=str, number, it did not work.  I tried 2 separate arrays, but now I cannot return the correct word. I need some help on this one.
    Questions:
    How could I combine both arrays so that I could sort them, then search a value in the array and return the correct string?
    I tried a class but i could not get it to work.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    I'm not going to try to read all that messy code. Here is some advice.
    1. Don't use parallel arrays.
    2. If you're going to insist on doing it the wrong way and using parallel arrays, then first get your sort working for a single array.
    3. If you're going to insist on doing it the wrong way and using parallel arrays, then after getting the sort to work with a single array, in the part where you're swapping elements, whatever you do to swap in the first array, you'll need to do to the second array as well.
    4. Break your code down into methods.

  • How to call VC++ dll whiich return char[] data type value in powerbuilder

    Hi Everyone,
    I am using PowerBuilder 11.1 build 8123.
    I am calling VC++ DLL in our PowerBuilder application which return char[] data type value.
    I just declare Global External Function:-
         Function  char getOSSectionName() library "DocServClient.dll" alias for "getOSSectionName;Ansi"
    And then call this function in window as:-
         Char      ls_section[1] = 'DOCAPPLICATIONS9X'
         ls_section[1]=getOSSectionName()
    When I check ls_section[1] value in messagebox it display a symbol (please check attached attached image.)
    VC++ function and return variable declaration:-
         __declspec(dllexport) char *  __stdcall getOSSectionName()
           char    SectionName[_MAX_PATH];
    Please let me know that my code is valid or not.
    Please help..

    Hi,
    Thanks to Everyone for your suggestions.
    I am solved my problem to change VC++ function as :-
         Int __declspec(dllexport)  __stdcall getOSSectionName(char* SectionName)
                        instead of
         __declspec(dllexport) char *  __stdcall getOSSectionName()
    and declare global function as:-
           Function int getOSSectionName(Ref char ls_section[100]) library "DocServClient.dll" alias for "getOSSectionName;Ansi"
    and call function in window as:-
         int li_ret
         char ls_section[100]
         string ls_sec
         li_ret=getOSSectionName(REF ls_section)
         ls_sec=ls_section
    Thanks,
    Vikrant

  • Pass variables and return ResultSet from same preparedStatement

    I am passing "fp" and "week_no" to a preparedStament in a class and want to return the values to my jsp page. "fp" and "week_no" are used twice. Please see below. When I run it, I get no error messages but, it doesn't display any data.
    I have the following code in a class:
    public ResultSet getHistory(String fp, String week_no)
                        throws SQLException, Exception {
    ResultSet rs = null;
    if (con != null) {
    try {
         PreparedStatement getHist;
         getHist = con.prepareStatement(
         "SELECT sbu, TO_CHAR(((sum_dollar) + (adj_sum_dollar)),'$999,999,999.99') AS sum_dollar, TO_CHAR(actual_date,'MM/DD/YY') AS actual_date, " +
         "((sum_cases) + (adj_sum_cases)) AS sum_cases, " +
         "((new_order_cases) + (adj_new_order_cases)) AS new_order_cases, " +
         "((total_open_orders) + (adj_total_open_orders)) AS total_open_orders, " +
         "((back_orders) + (adj_back_orders)) AS back_orders, " +
         "TO_CHAR((sum_dollar/sum_cases), '999.99') AS yield " +
         "FROM SUMMARY " +
         "WHERE actual_date BETWEEN (SELECT begin_dt " +
                   "FROM fiscal_calendar " +
                             "WHERE fiscal_period = '?' " +
                             "AND week_number = '?' " +
                             "AND week_number <> '9' " +
                             "AND fiscal_yr = '2003') " +
                        "AND " +
                             "(SELECT end_dt " +
                        "FROM fiscal_calendar " +
                             "WHERE fiscal_period = '?' " +
                             "AND week_number = '?' " +
                             "AND week_number <> '9' " +
                             "AND fiscal_yr = '2003') " +
              "ORDER BY actual_date, sbu ");
         getHist.setString(1, fp);
         getHist.setString(2, week_no);
         getHist.setString(3, fp);
         getHist.setString(4, week_no);
         rs = getHist.executeQuery();
         } catch (SQLException sqle) {
    error = "SQLException: Update failed, possible duplicate entry.";
         throw new SQLException(error);
    } else {
    error = "Exception: Connection to the database was lost.";
         throw new Exception(error);
    return rs;
    This is in my jsp:
    <%
    String fp = request.getParameter("fp");
    String week_no = request.getParameter("week_no");
    historyInfo.connect();
    ResultSet rs = historyInfo.getHistory(fp, week_no);
    while (rs.next()) {
    //String sum_dollar = rs.getString("sum_dollar");
    %>
    <%= rs.getString("sum_dollar") %>
    <%
    %>

    Hi,
    First thing U can't do this way in java. If U are executing this sort of database query, after retriving all the values, put inside Haahtable or HashMap as the application required and return it.
    Otherwise execute this query at the same place where u r printing values in jsp page insted of writing it inside seperate method..It will work.
    If still it's not workimg, please let me know.
    Rajeh Pal

  • Pass the structure name and return the description fields.

    Hi experts!!,
    I would like to know a class and the method that I pass the structure name and return all the description fields.
    Thanks a lot

    Hello Ana
    Have a look at class CL_ABAP_STRUCTDESCR.
    DATA: ls_knb1   TYPE knb1.
    DATA: lo_typedescr    TYPE REF TO cl_abap_typedescr.
    DATA: lo_strucdescr   TYPE REF TO cl_abap_structdescr.
    DATA: lt_dfies            TYPE ddfields.
    lo_typedescr = cl_abap_structdescr=>describe_by_data( ls_knb1 ).
    lo_structdescr ?= lo_typedescr.
    lt_dfies = lo_structdescr->get_ddic_field_list( ).
    " Or check public attribute: lo_structdescr->components   for non-DDIC structures
    Other useful RTTI classes are:
    CL_ABAP_DATADESCR
    CL_ABAP_TYPEDESCR
    CL_ABAP_TABLEDESCR
    CL_ABAP_CLASSDESCR
    Regards
      Uwe

  • Trying to fetch a value in a java function and returning the array.

    hello....I am trying to fetch a value in a java function and returning a array......I already write the pl/sql function which is working fine....but i think i m lost......when i run it through the jsp it shows me error........pls help
    java code:=
    public String [] viewx(String bid) throws SQLException, Exception {
    String [] values;
    try {
    CallableStatement cstmt = null;
    String SQL = "{?=call vi_dis.v_dis(?)}";
    cstmt = con.prepareCall(SQL);
    cstmt.registerOutParameter(1,Types.ARRAY);
    cstmt.setString(2, bid);
    cstmt.execute();
    Array simpleArray = cstmt.getArray(1);
    values = (String [])simpleArray.getArray();
    cstmt.close();
    } catch (SQLException sqle) {
    error = "SQLException: Could not execute the query.";
    throw new SQLException(error);
    } catch (Exception e) {
    error = "An exception occured while retrieving emp.";
    throw new Exception(error);
    return values;
    pl/sql function
    create or replace package vi_dis
    as
    function v_dis(vbid IN student.bid%type) return stuarray ;
    end;
    create or replace
    package body vi_dis
    as
    function v_dis(vbid IN student.bid%type) return stuarray
    is
    l_stu stUarray :=stuarray();
    cursor c_sel
    is
    SELECT CNAME
    FROM COURSE C,ENROLL E
    WHERE C.CID=E.CID
    AND E.BID=vbid;
    BEGIN
    OPEN c_sel;
    FETCH c_sel BULK COLLECT INTO l_stu;
    l_stu.extend;
    CLOSE c_sel;
    RETURN l_stu;
    EXCEPTION
    WHEN NO_DATA_FOUND
    THEN DBMS_OUTPUT.PUT_LINE('NO RESULT AVAILABLE');
    CLOSE c_sel;
    END;
    END;
    /

    BalusC wrote:
    It is comparing the selected value against the List<SelectItem> returned by getSetoresOrigem() as it is during the apply request values phase of the form submit request.Ok. That's what I supposed JSF was doing.
    BalusC wrote:
    If the selected value isn't in there, then you will get this error.I can understand this, but is this right? As I said, the old value isn't really there because I changed the list values to new ones. But the new value (the value of fSetorOrigem ) corresponds to a value that exist in the new list items, so a valid value. So JSF is not considering that I also changed the list, not just the value. It is comparing the new value with the old list, not the new one. Acting like this JSF is making the page looks like a static HTML page, not a dynamic one. If I can't change the list and the value, what's the point of that? In my point of view I'm not doing anything wrong, I'm not violating any JSF rules.
    Marcos

  • How to call a procude in oracle and return an array

    I need to call a procedure and return an array, can give some example code?

    First create ArrayDescriptor
    like:
        public ArrayDescriptor createDescriptor(Connection con, String typename) throws SQLException
            if(typename==null)
                return null;
            //WARNING! typename should be in upper case only! Otherwise Exception "invalid name pattern"
            //will be thrown!
            return ArrayDescriptor.createDescriptor(typename.toUpperCase(),con);
        }Then use SetArray function to a prepared query (just like SetInt() or
    SetString()):
    public void setArray(PreparedStatement st, int index, Object [] value, ArrayDescriptor ad) throws SQLException
            ARRAY array = new ARRAY(ad, st.getConnection(), value);
            if(st instanceof OraclePreparedStatement)
                OraclePreparedStatement opst=(OraclePreparedStatement )st;
                opst.setArray(index, array);
            else
                throw new SQLException("Oracle JDBC driver required to support setArray() operation!");
        }In the same way you could implement RegisterOutParameter() which
    accepts Array - it's provided by class OraclePreparedStatement...
    look Oracle JDBC manuals - everything is there.
    Enjoy!
    Paul

  • Fetching row and return as array

    I am trying to retrieve the results from a query of my Oracle 9i database. In every call it should retrieve a single row from the results and returns it as an array, where each field of the row is in an array key.
    My attempt but it doesnt give me any data:
    //get userParameter here etc.. while (rs.next()) { String inf []; rs = stmt.executeQuery("select * from Customers where ID = " + userParameter); String firstname = ""; String lastname = ""; if(inf.equals(getParameterValues(rs)) {   out.write(inf[firstname]);   out.write(inf[lastname]); }

    Evergrean wrote:
    I am trying to retrieve the results from a query of my Oracle 9i database. In every call it should retrieve a single row from the results Are you sure that the query always results in a single row?
    and returns it as an array, where each field of the row is in an array key.No, not every field. Just the primary key. Makes no sense.
    My attempt but it doesnt give me any data:
    //get userParameter here etc..
    while (rs.next())
    String inf [];
    rs = stmt.executeQuery("select * from Customers where ID = " + userParameter);
    String firstname = "";
    String lastname = "";
    if(inf.equals(getParameterValues(rs)) {
    out.write(inf[firstname]);
    out.write(inf[lastname]);
    I'd do it like this:
    (1) Start with a Customer class, with id, firstName, and lastName as data members.
    (2) Write a DAO that can access a Customer by id:
    public class CustomerDao
        private static final String CUSTOMER_SELECT_SQL = "select * from Customers where ID = ?";
        private Connection connection;
        public CustomerDao(Connection connection)
            this.connection = connection;
        public Customer find(Long id) throws SQLException
            Customer customer = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try
                ps = this.connection.prepareStatement(CUSTOMER_SELECT_SQL);
                ps.setLong(1, id);
                rs = ps.executeQuery();
                while (rs.next())
                    // map values to Customer here.
            catch (SQLException e)
                e.printStackTrace();
            finally
                DatabaseUtils.close(rs);
                DatabaseUtils.close(ps);
            return customer;
    }The rest is left to you.
    %

Maybe you are looking for