Dynamisch opvullen van resultSet

Status
Niet open voor verdere reacties.

Virusbeatboxing

Gebruiker
Lid geworden
11 nov 2011
Berichten
41
Beste,

ik heb net een kleine applet geschreven die gebruik maakt van gegevens uit een database.
Momenteel staat er dus in mijn code een SELECT statement die op zijn beurt een resultSet retourneert.

Afhankelijk van de gebruiker zal er een ander soort SELECT statement moeten gebruikt worden om de gegevens van die persoon op te halen.
Graag had ik geweten hoe het mogelijk is om deze SELECT statement aan te passen van zodra de applet gestart wordt.

Alvast bedankt!

PS: het gaat wel veel verder dan enkel de ID van die gebruiker bijvoorbeeld mee te geven in het SELECT statement. Het kan namelijk zijn dat voor gebruiker A volgend statement kan gebruikt worden: "SELECT * FROM tblTabel1" terwijl voor gebruiker B het statement "SELECT * FROM tblTabel2" gebruikt moet worden...
 
Laatst bewerkt:
niet doen , nooit doen
hoe ga je je connectiegegevens beschermen public zodat iedereen die kan gebruiken??
 
Is het niet mogelijk om zo iets te realiseren via SOAP of RMI?

Ik zal even schetsen hoe het gebruikt zal worden:
In een applicatie ontwikkelt in Servoy, kan een gebruiker zijn gegevens bekijken in een tabel. Jammer genoeg is er verder geen mogelijkheid nietmeer om deze gegevens te bewerken.

Nu heb ik dus een applet geschreven die, via dezelfde resultset, de gegevens moet inladen in mijn applet. Binnen deze applet kunnen er wel bewerkingen gemaakt worden op deze tabel met deze gegevens.

Kan het niet simpeler uitleggen denk ik :p
 
Ja maar toch geen query versturen je kan toch ?content=boeken&mijnnaam=naam maar je zal ook een sleutel moeten hebben voor ingelogd ander heeft iedereen toegang tot je database en das toch net niet de bedoeling;

Je kan vermoeden dat er altijd mensen zijn die sql gaan injecteren zie sqlinjectie en dit houd toch ernstige gevaren met zich mee.
 
Ik zie niet in hoe een gebruiker hier SQL injectie op kan toepassen... Het is niet dat deze zelf een soort SQL statement moet gaan schrijven.

De gebruiker moet zich vooraf inloggen dus wij weten exact welke gebruiker momenteel gebruik maakt van de applicatie. Is het niet mogelijk om, van zodra de applet wordt opgestart, een aangepaste SQL statement op te roepen a.d.h.v. de ID van de ingelogde gebruiker? Hiermee wordt, tijdens het opstarten van de applet, de gegevens van enkel DIE gebruiker ingeladen in de applet.

Er zijn geen textboxes die de gebruiker toelaten zelf een sql statement te schrijven, laat staan sql injectie te doen... De gegevens moeten gewoon ingeladen worden AUTOMATISCH.

Bedankt!
 
dus je zal via serverside een sleutel afgeven

HTML:
<html>
<head>
	<Title> Parameters naar applet </title>
</head>
	<body>

Hier is de uitvoer van de applet:
<applet code="Jouw.class" height=100 width=300>
		<PARAM NAME="text" VALUE="gg">
		</applet>       
</body>
</html>
Nu met meerdere classes zal je met een jar werken dus zal ook gesigneert moeten worden zie certificaat
HTML:
  <applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet">

Code:
/ Dit applet geeft een tekst weer die langzaam lichter wordt, de tekst zelf wordt als parameter meegegeven
public class Jouw extends javax.swing.JApplet implements Runnable{

	String text = "No text has been specified";
	// variabelen voor het HSB-syteem declareren en initialiseren
	float hue = (float) 0.5;// (float) 0.5 : converteert 0.5 in een getal met drijvende komma
	float saturation = (float) 0.8;
	float brightness = (float) 0.0;
    	Font textFont = new Font("Dialog", Font.BOLD, 20);// Object textFont van het type Font declareren en initialiseren
    	int textX;// Integervariabele die dient om tekst horizontaal te centreren
	Thread runner;// Object runner van het type Thread die de klasse Jouw gaat uitvoeren

	public void init(){
        	setBackground(Color.black);// Instellen achtergrondkleur van het applet
        	String paramName = getParameter("TEXT");// Haal de parameter TEXT op van de HTML-pagina
        	if (paramName != null)
            		text = paramName;
            
        	// De klasse FontMetrics meet hoe breed een weergegeven regel tekst is
        	FontMetrics fm = getFontMetrics(textFont); 
        	// Met de methode stringWidth van de klasse FontMetrics en de methode getSize van het applet
        	// kan men de tekst centreren. De variabele textX slaat de horizontale positie op waar de tekst moet verschijnen.
        	textX = getSize().width / 2 - fm.stringWidth(text) / 2;
   	}

    	public void paint(Graphics screen){
        	Graphics2D screen2D = (Graphics2D) screen;
        	// Het object textColor van het type Color declareren en initialiseren
        	Color textColor = Color.getHSBColor(hue, saturation, brightness);
        	// Het object screen2D van het type Graphics2D een kleur en een font geven
        	screen2D.setColor(textColor);
        	screen2D.setFont(textFont);
		// Plaats de String text op (x, y) positie (textX, 30)
        	screen2D.drawString(text, textX, 30);
    	}

	/*
	* De methode update() maakt het scherm leeg alvorens paint() aan te roepen. Dit leegmaken van het scherm veroorzaakt
	* echter flikkeringen in een Java-programma als u het scherm vaak moet verversen. In deze code omzeilt u update()
	* dan ook. Later meer hierover!!!
	*/
    	public void update(Graphics screen){
        	paint(screen);
    	}

	/*
	* De methode pause() die het argument duration heeft, pauzeert de thread met de methode Thread.sleep(). Deze methode
	* heeft een argument dat de pauze in milliseconden aangeeft. Als u veranderende afbeeldingen of tekst toont, moet u soms
	* een pauze inlassen omdat de pagina anders te snel verandert!
	*/
    	void pause(int duration){
        	try{
            		Thread.sleep(duration);
        	}catch(InterruptedException e){}
    	}

	// Starten van de thread runner
    	public void start(){
        	if (runner == null){
            		runner = new Thread(this);
            		runner.start();
        	}
    	}

	// Stoppen van de thread runner
    	public void stop(){
        	if (runner != null)
            		runner = null;
        }

	
    	public void run(){
        	// Maak een thread-object thisThread dat de thread bevat die op het moment actief is
        	Thread thisThread = Thread.currentThread();
        	// thisThread wordt vergeleken met het object runner in een while-lus. Deze while-lus zorgt voor de animatie
        	while (runner == thisThread){
            		pause(75);// Laat de animatie steeds 75 milliseconden wachten voordat het scherm wordt bijgewerkt
            		brightness += 0.05;// Helderheid verhogen met 5%
            		if (brightness > 1){// deze slectie zet de helderheid weer op 0.0 als ze hoger wordt dan 1.0
                		brightness = (float) 0.0;
                		pause(75);
            		}
            		// Deze instructie ververst het scherm telkens als er iets gewijzigd is (zie helderheid)
            		// repaint() activeert de methode paint()
            		repaint();
        	}
    	}
}

Het zou je een beeld moeten geven hoe je contact zult kunnen zoeken met serverside
let op je soapclasses (jar)
 
Laatst bewerkt:
Beste,

bedankt voor dit stukje code! Op het eerste zicht zijn er wel zaken die ik kan gebruiken!

Enkel gebruik ik wel de Java Web start om mijn applet te starten (zie code)
Code:
<script src="http://www.java.com/js/deployJava.js"></script>
	<script>
        // using JavaScript to get location of JNLP
        // file relative to HTML page
        var dir = location.href.substring(0,location.href.lastIndexOf('/')+1);
        var url = dir + "PivotTableProject.jnlp";
        deployJava.createWebStartLaunchButton(url, '1.6.0');

ik zag ik jouw stukje code dat je gewoon de tag <applet> gebruikt in de html pagina en daar dus de parameter 'Text' meegeeft, kan ik dit ook met mijn code?
 
Nou als je met jnlp werkt ga je niet meer via een applet werken
test volgende code en plaats de xml eens op je eigen site en zie ook werkt
Code:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://www.djdb.be/webstart/" href="Documentor.jnlp">
    <information>
       <title>Documentor</title>
        <vendor>Lieven Roegiers</vendor>
        <description>Documentor</description>
        <homepage href="/webstart" />
        <offline-allowed/>
        <!-- een link op het bureaublad -->
        <icon href="img/icon.jpg"/>
        <shortcut>
            <desktop/>
        </shortcut>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.6+" />
        <jar href="./lib/Documentor.jar" download="eager" />
        <jar href="./lib/MY_LIBS.jar" download="eager" />
        
                 <!-- hieronder de fop.jar   http://archive.apache.org/dist/xmlgraphics/fop/binaries/fop-1.0-bin.zip lib die ik gebruik -->
        <jar href="./lib/fop.jar" download="eager" />
		<jar href="./lib/batik-all-1.7.jar" download="eager" />
		<jar href="./lib/serializer-2.7.0.jar" download="eager"/>
		<jar href="./lib/commons-io-1.3.1.jar" download="eager"/>
		<jar href="./lib/commons-logging-1.0.4.jar" download="eager"/>
		<jar href="./lib/xalan-2.7.0.jar" download="eager"/>
		<jar href="./lib/xmlgraphics-commons-1.3.jar" download="eager"/>
		<jar href="./lib/PDFRenderer.jar" download="eager"/>
		<jar href="./lib/avalon-framework-4.2.0.jar" download="eager"/>
		<jar href="./lib/xml-apis-1.3.04.jar" download="eager"/>
		<jar href="./lib/xml-apis-ext-1.3.04.jar" download="eager"/>
		<jar href="./lib/xercesImpl-2.7.1.jar" download="eager"/>
    </resources>
    <!-- hieronder de main dat ik opstart -->
    <application-desc main-class="be.djdb.documentor.Main">
	  	 <argument>http://www.djdb.be/webstart/xml/testfactuur.fo</argument>
		 <argument>http://www.djdb.be/webstart/xml/testFactuur.xml</argument>
    </application-desc>
</jnlp>
en als je dit erbij neemt let op bij mij php maar het kan ook jsp en exctra zijn
Code:
RewriteEngine on
AddType application/x-java-jnlp-file    .jnlp
RewriteRule ^(.*).jnlp$ $1.php
 
Laatst bewerkt:
Dit is mijn JNLP file:
Code:
<?xml version="1.0" encoding="utf-8"?> 

<jnlp codebase="file:///Users/glennboudaer/Documents/Aptana Studio Workspace/MyProject" href="PivotTableProject.jnlp"> 
  <information> 
    <title>Globis PivotTableProject X</title> 
    <vendor>Globis nv.</vendor> 
    <homepage href="index.html"/> 
    <description>This application is a demo of the capabilities of JIDE Docking Framework, JIDE Action Framework, JIDE Components, JIDE Grids and JIDE Dialogs</description> 
    <description kind="short">A demo of the capabilities of JIDE products.</description> 
  </information> 
  <security> 
      <all-permissions/> 
  </security> 
  <resources> 
    <j2se version="1.6+" initial-heap-size="256m" max-heap-size="512m"/>
    <jar href="globis_PivotTableProject.jar" main="true"/> 
<jar href="lib/batik-awt-util.jar"/>
<jar href="lib/commons-collections-3.1.jar"/>
<jar href="lib/commons-logging.jar"/>
<jar href="lib/commons-math-2.2.jar"/>
<jar href="lib/dom4j-1.6.1.jar"/>
<jar href="lib/hibernate-jpa-2.0-api-1.0.1.Final.jar"/>
<jar href="lib/hibernate3.jar"/>
<jar href="lib/hsqldb.jar"/>
<jar href="lib/informa.jar"/>
<jar href="lib/jdom.jar"/>
<jar href="lib/jide-action.jar"/>
<jar href="lib/jide-beaninfo.jar"/>
<jar href="lib/jide-charts.jar"/>
<jar href="lib/jide-common.jar"/>
<jar href="lib/jide-components.jar"/>
<jar href="lib/jide-dashboard.jar"/>
<jar href="lib/jide-data.jar"/>
<jar href="lib/jide-designer.jar"/>
<jar href="lib/jide-dialogs.jar"/>
<jar href="lib/jide-diff.jar"/>
<jar href="lib/jide-dock.jar"/>
<jar href="lib/jide-editor.jar"/>
<jar href="lib/jide-gantt.jar"/>
<jar href="lib/jide-grids.jar"/>
<jar href="lib/jide-pivot.jar"/>
<jar href="lib/jide-plaf-jdk7.jar"/>
<jar href="lib/jide-plaf.jar"/>
<jar href="lib/jide-properties.jar"/>
<jar href="lib/jide-rss.jar"/>
<jar href="lib/jide-shortcut.jar"/>
<jar href="lib/jide-treemap.jar"/>
<jar href="lib/jta-1.1.jar"/>
<jar href="lib/lucene-core-3.5.0.jar"/>
<jar href="lib/miglayout-3.7.4-swing.jar"/>
<jar href="lib/mysql-connector-java-5.1.18-bin.jar"/>
<jar href="lib/poi-3.5-FINAL-20090928.jar"/>
<jar href="lib/poi-ooxml-3.5-FINAL-20090928.jar"/>
<jar href="lib/servlet-api.jar"/>
<jar href="lib/velocity-dep-1.4.jar"/>
<jar href="lib/xerces.jar"/>
  </resources> 
  <applet-desc name="myapplet" main-class="MyTestResultSetTable" width="1000" height="600"/> 
</jnlp>

Dit werkt! De gegevens worden vanuit de database ingeladen in de applet, enkel heb ik nu geen mogelijkheid om de methodes binnen mijn applet, aan te roepen. Jij daarintegen wel door het gebruik maken van een gewone applet en hiervoor een param TEXT door te geven aan je code bij de init.

EDIT: u kunt niet echt een methode aanroepen maar u kunt wel een parameter meegeven en dat zou ook een mogelijke oplossing zijn. Dan kan ik het SQL-statement via deze parameter doorgeven en zo tijdens de init() van mijn applet, deze SQL-statement gebruiken om de juiste gegevens uit de DB te halen.
 
Laatst bewerkt:
Ik stel voor dat je een kleine jar maakt die de tekst van de parameter meegeeft
Onderstaande code is volgens mijn jnlp(is geen applet)
dit is het documentor programma
Code:
public class Main extends MYFORM{//JFRAME
	private ActionListener saveas;
	private JFileChooser fc ;
	private ActionListener save;
	private ActionListener savesettings;
	private ActionListener options;
	private WindowAdapter Close_Options;
	private String local;
	private Locale locale; 
	private PagePanel panel;
	private Document doc;
	private ActionListener open;
	private ActionListener about;
	private PdfFilter pdffilefilter =  new PdfFilter(".pdf","[PDF]Portable Document Format");
	public Main(String[] args){
		super(Statics.PROJECTNAME,Statics.PROJECTNAME,"documentor",false);
		//Map<String,String> setting = new HashMap<String, String>();
		local = super.settings.getProperty("locale",Locale.ENGLISH.toString());
		try {
			locale = new Locale(local);
		} catch (Exception e) {
			e.printStackTrace();
			locale= Locale.ENGLISH;
			super.settings.put("locale",locale.toString());
			super.settings.SaveSettings();
		}
		super.settings.setProperty("FactuurURL", args[1]);
		doc = new Document(args[0],args[1]);
		try {
			super.add(doc.createpdf());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		setLocale(locale);
		setMinimumSize(new Dimension(500,700));
		//settings.setfsettings(setting);
		actions();
		gui();
 		pack();
	}
	public static void main(final String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable(){
            public void run(){
                new Main(args).setVisible(true);
            }
        });
	}
    private void menusetup(){
        Menu menu= new Menu("Documentor");
     	menu.addmenuitem("File","open",new JMenuItem());
     	menu.addmenuitem("File","exit",new JMenuItem(),savesettings);
     	menu.addmenuitem("File","save",new JMenuItem(),save);
     	menu.addmenuitem("File","saveas",new JMenuItem(),saveas);
     	menu.addmenuitem("Edit","underconstruction",new JMenuItem());
     	menu.addmenuitem("Tools","options",new JMenuItem(),options);
     	menu.addmenuitem("Window","underconstruction",new JMenuItem());
     	menu.addmenuitem("Help","&About",new JMenuItem(),about);
		setJMenuBar(menu.getmenubar());
     }
	 private void gui(){
	 	if (Statics.DEBUG){log(Level.WARNING, "LOCAL_GUIsetup" );}
		menusetup();
		framesetup();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//addWindowListener(Close_Options);
	 }
	 private void framesetup(){
	 	if (Statics.DEBUG){ log(Level.WARNING, "LOCAL_Framesetup" ); }
	 	add(new JLabel("Documentor Lieven Roegiers =>Open source By Autosite "), BorderLayout.SOUTH);       	
	 }
	private static  void log(Level level, String msg ){
	    String tag ="<>>>>*"+Statics.LIBNAME+"-"+Statics.COPYRIGHTBY+"*<<<<>";
	    Logger.getLogger(Main.class.getName()).log(level, tag + msg);
	}
	private void actions(){
		fc = new JFileChooser();
		saveas = new ActionListener() {
			private String Filename;
			public void actionPerformed(ActionEvent evt) {
				if (Statics.DEBUG){log(Level.WARNING, "saveas action, event="+evt);}
				fc.addChoosableFileFilter(pdffilefilter);
				int returnVal = fc.showSaveDialog(Main.this);
				File file = fc.getSelectedFile();
	            if (returnVal == JFileChooser.APPROVE_OPTION) {
	            	doc.savedocas(file,(MYabstractFileFilter)fc.getFileFilter());
	            } else {
	                log(Level.WARNING, "Saveas command cancelled by user.");
	            }
			}
		};
		open = new ActionListener() {
			private String Filename;
			private File file;
			public void actionPerformed(ActionEvent evt) {
				if (Statics.DEBUG){log(Level.WARNING, "open action, event="+evt);}
				int returnVal = fc.showOpenDialog(Main.this);
	            fc.addChoosableFileFilter(new PdfFilter(".pdf","[PDF]Portable Document Format"));
	            fc.setFileSelectionMode(JFileChooser.FILES_ONLY );
		      if ( returnVal == JFileChooser.CANCEL_OPTION)
		         file = null;
		      else
		         file = fc.getSelectedFile();
			}
		};
		savesettings = new ActionListener() {
			public void actionPerformed(ActionEvent evt) {settings.SaveSettings();		log(Level.WARNING, "settings saved.");}
		};
		options =new ActionListener(){
			public void actionPerformed(ActionEvent evt) {
				settings.SaveSettings();//this that all settings from the prog are saved
		        final JFrame frame = new JFrame();
		        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		        MYpanel pnltools = new MYpanel("Documentor");
		        pnltools.addpanelitem("editorpanel","ok",new JButton(),new ActionListener(){
		        	public void actionPerformed (ActionEvent e){
		        		settings.SaveSettings();//this wil save all settings
		        		frame.dispose();
		        	}});
		        pnltools.addpanelitem("editorpanel","cancel",new JButton(),new ActionListener(){
		        	public void actionPerformed (ActionEvent e){
		        		settings.LoadSettings();//this wil reload all settings
		        		frame.dispose();
		        	}});
		        frame.add(pnltools.getpanel("editorpanel"), BorderLayout.SOUTH);
		        JPanel editor = settings.getEditor();
		        editor.setBounds(100, 100, 500, 500);
		        frame.add(editor,BorderLayout.NORTH);
		        frame.setVisible(true);
		        frame.pack();
			}
		};
		Close_Options = new WindowAdapter() {//sluitmessage
			@Override
			public void windowClosing(WindowEvent e){
			   int answer = JOptionPane.showConfirmDialog(null, "save settings ?", "sluiten", JOptionPane.YES_NO_OPTION);
			   if (answer == JOptionPane.YES_OPTION) {
				   savesettings.actionPerformed(null);
			   }else if (answer == JOptionPane.NO_OPTION){
			       return;
			   }
			 }
	        };
	    save = new ActionListener(){
	    	public void actionPerformed(ActionEvent evt) {
	    		
	    	}
	    };
	    about = new ActionListener(){
	    	public void actionPerformed(ActionEvent evt) {
	    		new  About();
			}
	    };
	}
	protected void finalize() throws Throwable{
		super.finalize();
	}
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan