Avatar billede simm Nybegynder
29. december 2004 - 21:36 Der er 24 kommentarer og
1 løsning

JDBC åbne connection fra applet til database

Hejsa!

Jeg skal til at udvikle en applet, der bl.a. skal kunne koble på MySQL-databaser - men målgruppen kunne være folk som ikke får hosted deres webshop på deres egen dedikerede server. Udfra hvad jeg har læst om JDBC skal den installeres på klienten.. men kan man ikke inkludere den i applet'en så det eneste krav for klienten er, at JRE'et er installeret?
Avatar billede arne_v Ekspert
29. december 2004 - 21:38 #1
Hvis du pakker dine applet class filer i en jar fil og du laver et manifest til
den med et Class-Path direktiv med navnet på MySQL JDBC driver jar filen, så vil denne
kunne downloades fra samme server som din jar fil.
Avatar billede simm Nybegynder
29. december 2004 - 22:14 #2
Takker! Det vil jeg udforske lidt sammen med Google :)
Avatar billede arne_v Ekspert
29. december 2004 - 22:22 #3
Avatar billede simm Nybegynder
30. december 2004 - 21:52 #4
takker Arne, du er en knag :) sender du lige et svar?
Avatar billede arne_v Ekspert
30. december 2004 - 21:53 #5
ok
Avatar billede arne_v Ekspert
30. december 2004 - 21:54 #6
Har du fået det til at virke ?
Avatar billede simm Nybegynder
31. december 2004 - 16:31 #7
Jepper :)
Avatar billede simm Nybegynder
31. december 2004 - 16:31 #8
Godt nytår :D
Avatar billede arne_v Ekspert
31. december 2004 - 16:49 #9
I lige måde.
Avatar billede arne_v Ekspert
31. december 2004 - 16:50 #10
PS: Du er opmærksom på at folk kan downloade din applet, decompile den og
    lave et andet program som connecter til databasen med de oplysninger
    som stod i appletten ?
Avatar billede simm Nybegynder
01. januar 2005 - 21:02 #11
Nej, men nu du nævner det, kan jeg huske at det er rimelig nemt at decompile en java-applet. Hvad foreslår du jeg gør i stedet? Man kan vel få programmer der scrambler koden, så den den ikke kan dekompileres?
Avatar billede arne_v Ekspert
01. januar 2005 - 21:04 #12
Ja men de er ikke 100% sikre. Langtfra.

Den sikre løsning er:

applet--------server side script (JSP eller ASP eller PHP)--------database
Avatar billede arne_v Ekspert
01. januar 2005 - 21:08 #13
applet--------database

er kun sikker hvis brugeren skal angive et password som bruges til at connecte
til databasen med

Med password i koden kan det dog også bruges til internt brug i et firma for
"trivielle" oplysninger (ingen medarbejdere gider blive fyret for at hacke firmaets
database med oplysninger om papir clips).
Avatar billede simm Nybegynder
01. januar 2005 - 21:10 #14
okay så bliver det sådan, tak endnu engang :)
Avatar billede arne_v Ekspert
01. januar 2005 - 21:12 #15
Jeg har iøvrigt nogle simple kode eksempler som du kan starte med hvis
du er interesseret.
Avatar billede simm Nybegynder
01. januar 2005 - 21:12 #16
hehe, nej det har du ret i :) - men nu sad jeg også lige og lurede efter om .net-platformen er lige så sårbar over for decompiling.. det ser sådan ud.. gælder det alle programmeringssprog hvor der kompiles til bytecode?
Avatar billede simm Nybegynder
01. januar 2005 - 21:14 #17
dem må du du meget gerne sende, hvis du har lyst.. :)
Avatar billede arne_v Ekspert
01. januar 2005 - 21:21 #18
Ja - .NET har helt samme problem.

Principielt nej - en native EXE er jo principielt også byte code bare til en rigtige
maskine fremfor en virtuel maskine.

Men i praksis ja - fordi det man normalt kalder byte code jo har nogle yderligere
karakteristika:
  - ikke optimeret fordi optimeringen sker senere
  - interface information så koden kan bruges af anden kode
som gør det nemt at decompile.
Avatar billede arne_v Ekspert
01. januar 2005 - 21:21 #19
JSP eller ASP eller PHP ?
Avatar billede simm Nybegynder
01. januar 2005 - 21:32 #20
Okay, det undrer mig lidt at man ikke gør mere for at gøre det sværere at lave reverse engineering, men sådan har det jo altid været .. der er altid nogle der er et skridt foran. Man kunne ligeledes sagtens forestille sig, at der er et formål med at koden ikke er fuldstændigt beskyttet, nemlig at et firma kunne tjekke et andet firmas kode for ligheder, og afsløre om der evt. er stjålet lidt hist og pist. men det er bare min teori.. Det er vist aldrig noget, der direkte er blevet beskrevet :)
Avatar billede simm Nybegynder
01. januar 2005 - 21:33 #21
PHP
Avatar billede arne_v Ekspert
01. januar 2005 - 21:37 #22
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;

public class DatabaseApplet extends Applet implements ActionListener {
    TextArea select = new TextArea();
    TextField f1 = new TextField();
    TextField f2 = new TextField();
    Button insert = new Button();
    public void init() {
        select.setColumns(40);
        select.setRows(20);
        select.setText(select());
        f1.setColumns(10);
        f2.setColumns(20);
        insert.setLabel("Add");
        insert.addActionListener(this);
        add(select, null);
        add(f1, null);
        add(f2, null);
        add(insert, null);
        setVisible(true);
    }
    public void actionPerformed(ActionEvent ev) {
        insert(f1.getText(), f2.getText());
        select.setText(select());
        repaint();
    }
    private String select() {
        StringBuffer res = new StringBuffer("");
        try {
            URL url = new URL("http://localhost/select.php");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String line;
                while ( (line = br.readLine()) != null) {
                    res.append(line);
                    res.append("\r\n");
                }
                con.disconnect();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return res.toString();
    }
    private void insert(String f1, String f2) {
        try {
            URL url = new URL("http://localhost/insert.php");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            String info = "F1=" + f1 + "&F2=" + f2;
            con.setDoOutput(true);
            con.getOutputStream().write(info.getBytes());
            con.connect();
            if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
                System.err.println("POST failed");
            }
            con.disconnect();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
01. januar 2005 - 21:37 #23
<?php
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Test") or die(mysql_error());
$rs = mysql_query("SELECT * FROM T1") or die(mysql_error());
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {
    print $row["F1"] . " " . $row["F2"] . "\n";
}
mysql_free_result($rs);
mysql_close($con);
?>
Avatar billede arne_v Ekspert
01. januar 2005 - 21:37 #24
<?php
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Test") or die(mysql_error());
$f1 = $_POST["F1"];
$f2 = $_POST["F2"];
mysql_query("INSERT INTO T1(F1,F2) VALUES($f1,'$f2')") or die(mysql_error());
mysql_close($con);
?>
Avatar billede simm Nybegynder
01. januar 2005 - 21:45 #25
1000 gange tak, det vil jeg da lige prøve at lege lidt videre med :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester