# Problem bei Werteübergabe, MSQL verbindung



## MurderItachi (11. Dez 2015)

Hey Leute,

ich bin dabei eine App zu programmieren, die Codes abscannt und diese dann in eine Datenbank schreibt. Das Scannen funktioniert. Das schreiben von Werten in eine Datenbank auch, zumindest wenn man es als normales Java Projekt ausführt.
Bei einer mysql connection braucht man ja den Treiber dazu, den man normal als externes Jar file Importiert. Das hat normal auch gut geklappt, wenn ich das jar file aber meine App hinzufüge, brüllt Lint, dass die Klassen Feherhaft sind. Desweiteren denke ich, dass ich Probleme mit der übergabe der Werte habe zwischen und innerhalb der zwei Klassen, obwohl für mich alles logisch aussieht. Jedes mal wenn ich den Send butten drücke, beendet sich die App.

Möchte da jemand einen Blick riskieren?


```
package com.example.appfinal;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

public class MainActivity extends Activity implements OnClickListener {
    //UI instance variables
    private Button scanBtn;
    private Button sendBtn;
    private EditText preis_eingabe;

    public String getScan_result() {
        return scan_result;
    }

    public String getPrice() {
        return price;
    }

    public String scan_result="0";
    public String price="0";
    private TextView formatTxt, contentTxt, textView1, textView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //instantiate UI items
        this.scanBtn = (Button)findViewById(R.id.scan_button);
        this.formatTxt = (TextView)findViewById(R.id.scan_format);
        this.contentTxt = (TextView)findViewById(R.id.scan_content);
        this.sendBtn =    (Button)findViewById(R.id.send_button);
        this.preis_eingabe= (EditText)findViewById(R.id.editText1);
        this.textView2=(TextView)findViewById(R.id.textView2);
        this.textView1= (TextView)findViewById(R.id.textView1);
        //listen for clicks
        scanBtn.setOnClickListener(this);
        sendBtn.setOnClickListener(this);
    }

    public void onClick(View v) {     
        this.price=preis_eingabe.getText().toString();     
        //check for scan button
        if (v.getId() == R.id.scan_button) {
            //instantiate ZXing integration class
            IntentIntegrator scanIntegrator = new IntentIntegrator(this);
            //start scanning
            scanIntegrator.initiateScan();
        } else if (v.getId() == R.id.send_button) { 
            work.setScan_rs(scan_result);
            work.setPrice_rs(price);
            new work().execute();
        }
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        //retrieve result of scanning - instantiate ZXing object
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        //check we have a valid result
        if (scanningResult != null) {
            //get content from Intent Result
            String scanContent = scanningResult.getContents();
            this.scan_result=scanContent;
            //get format name of data scanned
            String scanFormat = scanningResult.getFormatName();
            //output to UI
            formatTxt.setText("FORMAT: "+scanFormat);
            contentTxt.setText("CONTENT: "+scanContent);     
            //zur Kontrolle der werteübergabe, die Ergebnisse in ein Textfeld schreiben-funktioniert allerdings nicht         
            textView1.setText(this.scan_result);
            textView2.setText(this.price);
        } else{
            //invalid scan data or scan canceled
            Toast toast = Toast.makeText(getApplicationContext(),
                    "No scan data received!", Toast.LENGTH_SHORT);
            toast.show();
        }
    }
}
```


```
package com.example.appfinal;

import android.media.AsyncPlayer;
import android.os.AsyncTask;

import java.sql.BatchUpdateException;
import java.sql.*;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
* Created by Alex on 10.12.2015.
*/
public class work extends AsyncTask <Void, Void, Void>{

    public String url= "jdbc:mysql://sql4.freesqldatabase.com:3306/sql499392";
    public String user= "******";
    public String pw="******";
    public static String price_rs;
    Connection con=null;
    public static String scan_rs;

    public static void setPrice_rs(String price_rss) {
        price_rs = price_rss;
    }

    public static void setScan_rs(String scan_rss) {
        scan_rs = scan_rss;
    }

    @Override
    protected Void doInBackground(Void... args0){
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // Blï¿½d: Treiber konnte nicht geladen werden.
            System.out.println("Treiber konnte nicht geladen werden");
        }
        try {
            con = DriverManager.getConnection(url, user, pw);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            PreparedStatement stmt = (PreparedStatement) con.prepareStatement("INSERT INTO barcode VALUES (?, ?)");

            stmt.setString(1, scan_rs);
            stmt.setString(2, price_rs);
            stmt.executeUpdate();
            System.out.println("hat alles geklappt");
        } catch (SQLException e) {
  e.printStackTrace();
System.out.println("fehler2");}

        try {
            con.close();
        } catch(SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("connection konnte nicht geschlossen werden");
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result){
        super.onPostExecute(result);
  e.printStackTrace();
    }
}
```


----------



## Thallius (11. Dez 2015)

Du solltest auf gar gar gar keinen Fall von einer Android App aus auf irgendeinen mysql server direkt zugreifen! Was Du da machst ist technischer Selbstmord. Wenn Du die App verbreitest, kann ich innerhalb von 10min Deine ganze Datenbank löschen wenn ich lustig bin.

Gruß

Claus


----------



## MurderItachi (11. Dez 2015)

Die App soll als kleines Pilot projekt dienen und nicht veröffentlicht werden, aber gut zu wissen. Wäre eine Alternative, die Daten vom Handy auf einen Pc zu schicken, der das dann wiederum Weiterleitet an die Datenbank? Und wenn ja, wie geht das in etwa?


----------



## buggy84 (11. Dez 2015)

Thallius möchte damit sagen, dass man für sowas Webservices oder eine PHP-Bridge benutzt.
Wie in deinem anderen Thread sehe ich keine Fehlermeldung. Wie soll man Dir helfen, wenn wir nichts von Dir sehen?


----------

