# Data Truncated



## Guest (26. Okt 2005)

Hallo Leute!
Also ich bin gerade am Programmieren, und jetzt komm ich nicht mehr weiter.
Kurz zur info, ich muss eine Seite erstellen wo sich wer Registrieren kann.
Datenbank sieht so aus:

BenutzerID    int(9)        unsigned      auto_increment
Name            Text
Nachname     Text
..usw.


```
INSERT INTO `benutzer` ( `BenutzerID` , `Nickname` , `Name` , `Nachname` , `Passwort` , `email` , `Strasse` , `PLZ` , `Ort` , `Nation` )VALUES ('', 'Nickname', 'basdaf', 'afdsaf', 'dd', 'fsdafsd','fsd', 'sdfsdaf', 'dsaf', 'sdfdsa');
```

Das ist das was ich in die Datenbank schreibe. Wenn ichs direkt in per SQL im phpmyadmin eingebe funktionierts wunderbar, jedoch wenn ichs über JAVA eingebe spuckt er mir das aus:


```
Fehler beim Ausfuehren des SQL Befehls! => EXECUTE-BEFEHL com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'BenutzerID' at row 1
```

Bitte helft mir so schnell als möglich, da ich schon ziemlich einen Zeitdruck habe.

Danke im vorraus 

Mfg Leo


----------



## André Uhres (26. Okt 2005)

Ich weiss nicht so recht ... aber die "Value" für "BenutzerID" ('') sieht 
mir doch nicht so sehr nach einem "int" aus, oder?


----------



## JaLeo (26. Okt 2005)

Hi, (bin der GAST)
Vorerst mal danke für deine schnelle Antwort.
Jap, ich weiß das das kein int ist, aber in ein AUTO_INCREMENT schreibt man doch keinen INT rein, wenns eh von alleine hochzaehlt oder?
Was hätte das dann für einen sinn?

Und wie schon gesagt, wenn ichs direkt in die Datenbankreinschreib dann gehts ohne probleme.

Mfg Leo


----------



## André Uhres (26. Okt 2005)

Sorry, hab das "AUTO_INCREMENT" übersehen.
Vielleicht wird dann diese Funktion nicht vom java-sql Treiber unterstützt.
Versuchs mal ohne das "AUTO_INCREMENT", und vergib die "BenutzerID"
im Programm als "int".


----------



## JaLeo (26. Okt 2005)

Das hab ich eh schon probiert das ich statt dem '' eine Zahl übergebe. dann haut alles super hin.
Nur zur eindeutigen Identifikation brauch ich ja eine ID.
Ich hab keine ahnung wie ich das jetzt anstellen sollte.

MFg Leo


----------



## André Uhres (26. Okt 2005)

Also mit "MySQL" und "JdbcOdbcDriver" funktioniert's bei mir ohne Weiteres, 
sowohl mit "AUTO_INCREMENT" als auch mit einem programmierten Zähler.
Tut mir leid, aber ich weiß jetzt wirklich nicht mehr was ich sagen soll.


----------



## JaLeo (26. Okt 2005)

Naja.. ich verwende den "mysql-connector-java-3.2.0-alpha.zip" und bei dem gehts leider nicht.. -.-
Aber danke für deine mühe!

EDIT:// mir kommt vor mit dem JDBC Connector ist man viel flexibler..


----------



## André Uhres (26. Okt 2005)

Super ! Dann haben wir ja die Lösung:

```
DriverManager.registerDriver( new sun.jdbc.odbc.JdbcOdbcDriver() );
...
    private final String DATABASE_URL = "jdbc:odbc:" + DATABASE_NAME;
```


----------



## JaLeo (26. Okt 2005)

einen ODBC Treiber installieren? ôO


----------



## André Uhres (26. Okt 2005)

Nein, nein!
Probiers einfach mit dem angegeben Code !
Der "JdbcOdbcDriver" braucht nicht installiert zu werden weil er im java runtime schon drin ist !


----------



## JaLeo (26. Okt 2005)

```
public class DBConnect {
	static Connection con;
            private final String url = "jdbc:odbc:" + "//localhost:3306/matura";
    
	/** Stellt die Verbindung zur Datenbank her*/
	public DBConnect(){
            	
       try{
        	DriverManager.registerDriver( new sun.jdbc.odbc.JdbcOdbcDriver() ); 
	
		} catch (Exception ex){
			System.out.println("FEHLER BEIM LADEN DES TREIBERS " + ex.toString());
		}
		
		//String url = "jdbc:mysql://localhost:3306/matura";
		String user = "test";
		String pwd = "test";
		
		try{
			con = DriverManager.getConnection(url,user,pwd);
		}catch (SQLException ex){
			System.out.println("Fehler beim verbinden!" + ex.toString());	
		}	
	}}
```

Ähm.. so in der art? gg


----------



## André Uhres (26. Okt 2005)

Das "localhost"-Zeugs kannst du vergessen, ansonsten müsste alles hinhauen:

```
private final String url = "jdbc:odbc:matura";
```


----------



## JaLeo (26. Okt 2005)

Naja.. gibts da irgendwas was ich zusätzlich in den classpath hinzu fügen muss?

Mir gibts diesen fehler aus.. 


```
Fehler beim verbinden! java.sql.SQLException: 
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
```

ich verwende die j2sdk mit der neuen j2se..
und da ist das ganze Enterprise zeugs auch dabei.

Mfg Leo


----------



## André Uhres (26. Okt 2005)

Sorry, ich hab was vergessen: wir müssen die Datenquelle in Windows definieren.
Ich meld mich gleich wieder um dir zu zeigen wie das geht.


----------



## André Uhres (26. Okt 2005)

Download MySQL ODBC Driver

```
/* 
* Daten_Quellen.java 
*/ 
import java.awt.*; 
import javax.swing.*; 
public class Daten_Quellen extends JFrame { 
    public Daten_Quellen() { 
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
        setTitle("Datenquellen"); 
        JTextArea textarea = new JTextArea(); 
        textarea.setEditable(false); 
        textarea.setBackground(new Color(255, 255, 204)); 
        textarea.setFont(new Font("SansSerif", 1, 13));
        textarea.setText("Du nimmst jetzt den Reiter 'Benutzer-Datenquellen/Benutzer-DSN' (erster Reiter) \n" + 
                "und klickst du auf den Knopf 'Hinzufügen...' \n" + 
                "Jetzt erscheint die Treiber-Liste. \n" + 
                "Du wählst du den Treiber 'MySQL ODBC 3.51 Driver' (oder ähnlich) \n" + 
                "und klickst auf 'Fertig stellen'. Das war's dann für 'Windows'. \n\n" + 
                "Jetzt erscheint ein neues Fenster von 'MySQL'. \n\n" + 
                "Im ersten Reiter 'Login' gibt du dies an: \n" + 
                "Data source name = matura \nDescription = matura data \n" + 
                "Server = localhost \n" + 
                "User = test \n" + 
                "Password = test \n" + 
                "Database = matura \n\n" + 
                "Im zweiten Reiter 'Connect Options': \n" + 
                "Port = 3306 \n\n" + 
                "Dann 'OK' klicken, und nochmals 'OK'. \n" + 
                "Fertig!"); 
        getContentPane().add(new JScrollPane(textarea)); 
        try{Runtime.getRuntime().exec("c:\\windows\\system32\\odbcad32.exe");
        }catch (Exception ex) {
            try{Runtime.getRuntime().exec("c:\\winnt\\system32\\odbcad32.exe");
            }catch (Exception ex2) { ex2.printStackTrace();}
        }
        setExtendedState(JFrame.MAXIMIZED_BOTH); 
    } 
    public static void main(String args[]) { new Daten_Quellen().setVisible(true); } 
}
```
*EDIT: letzte Änderung: 27.10.2005 17:40*


----------



## JaLeo (27. Okt 2005)

Vielen Dank für deine Mühe.
Habs jetzt hinbracht.. funktioniert super.. 

einen kleinen fehler hab ich noch beim auslesen..


```
[Microsoft][ODBC Driver Manager] Ungültiger Cursorstatus
```



```
String queryString = "SELECT * FROM `benutzer` WHERE `BenutzerID` =" + benutzerID +" LIMIT 0 , 1";
			ResultSet rsBenutzer = con.dbQuery(queryString);
			
			while(rsBenutzer.next()){
				nickname = rsBenutzer.getString("Nickname");
				name = rsBenutzer.getString("Name");
				NName = rsBenutzer.getString("Nachname");
				email = rsBenutzer.getString("email");
				strasse = rsBenutzer.getString("Strasse");
				ort = rsBenutzer.getString("Ort");
				plz = rsBenutzer.getString("PLZ");
				nation = rsBenutzer.getString("Nation");
			}
			rsBenutzer.close();
```


dabei gib ich in einem Formular die eingebenen Daten nochmal aus..

Mfg Leo


----------



## André Uhres (28. Okt 2005)

Dein Code müsste eigentlich funktionieren.
Die Anweisung "while(rsBenutzer.next()){ " stellt sicher, daß in dieser Schleife
kein ungültiger Cursorstatus auftreten kann.
Daher nehme ich an, daß die SQLException an einer anderen Stelle geworfen wird.

_[Edit von Andre_Uhres, 29.10.2009 (06:50): Ich habe meinen Beitrag ein wenig gekürzt]_


----------



## JaLeo (28. Okt 2005)

Das wär der Source von der ganzen funktion..


```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		DBConnect con = new DBConnect();
		String nickname = null;
		String name = null;
		String NName = null;
		String strasse = null;
		String plz = null;
		String ort = null;
		String nation = null;
		String email = null;
		String urlName = null;
		String urlAdresse = null;
		
		RegistrationInfo info = new RegistrationInfo();
		BeanUtilities.populateBean(info,request);
		String benutzerID = null;
		
		/**Neuer Benutzer wird angelegt.*/
		con.dbExecute("INSERT INTO `benutzer` ( `BenutzerID` , `Nickname` , `Name` , `Nachname` , `Passwort` , `email` , `Strasse` , `PLZ` , `Ort` , `Nation` )"+ 
						"VALUES ("+
						"'', '"+ info.getNickname() +"', '"+ info.getName() +"', '"+ info.getNachname() +"', '"+ info.getPasswort() +"', '"+ info.getEmail() + "'," +
						"'"+ info.getStrasse()+ "', '"+ info.getPlz() +"', '"+ info.getOrt() +"', '"+ info.getNation() + "'" +
						");");
		
		//Es wird eine SQL Abrage gesendet, welche BenutzerID der Neue Benutzer hat.
		ResultSet rsID = con.dbQuery("SELECT `BenutzerID` , `Nickname` " +
										"FROM `benutzer` "+
										"WHERE `Nickname` LIKE CONVERT( _utf8 '"+ info.getNickname() +"'"+
										"USING latin1 )" +
										"COLLATE latin1_general_ci");
		
		//BenutzerID wird ausgelesen
		try {
			while(rsID.next() == true){
				benutzerID = rsID.getString("BenutzerID");
				nickname = rsID.getString("Nickname");
				System.out.println(benutzerID);
			
				con.dbExecute("INSERT INTO `url` ( `URLID` , `URLName` , `URLAdresse` , `BenutzerID` , `UserID` )" +
					"VALUES (" +
					"'', '" + info.getUrlName() + "', '" + info.getUrl() + "', '" + benutzerID + "', '0'" +
					")");
			}
		}catch (SQLException SQLex){
			System.out.println("Fehler beim Auslesen der BuntzerID! " + SQLex.toString());
		}
		
		PrintWriter out = response.getWriter();
		
		try{
			//BenutzerID  Nickname  Name  Nachname  Passwort  email  Strasse  PLZ  Ort  Nation
			
			benutzerID = rsID.getString("BenutzerID");
			rsID.close();
			System.out.println(benutzerID);	
			
			String queryString = "SELECT * FROM `benutzer` WHERE `BenutzerID` =" + benutzerID +" LIMIT 0 , 1";
			ResultSet rsBenutzer = con.dbQuery(queryString);
			
			while(rsBenutzer.next()){
				nickname = rsBenutzer.getString("Nickname");
				name = rsBenutzer.getString("Name");
				NName = rsBenutzer.getString("Nachname");
				email = rsBenutzer.getString("email");
				strasse = rsBenutzer.getString("Strasse");
				ort = rsBenutzer.getString("Ort");
				plz = rsBenutzer.getString("PLZ");
				nation = rsBenutzer.getString("Nation");
			}
			rsBenutzer.close();
			
			
			//URLID  URLName  URLAdresse  BenutzerID  UserID 
			queryString = "SELECT * FROM `url` WHERE `BenutzerID` =" + benutzerID +" LIMIT 0 , 1";
			ResultSet rsURL = con.dbQuery(queryString);
			
			while(rsURL.next()){
				urlName = rsURL.getString("URLName");
				urlAdresse = rsURL.getString("URLAdresse");
			}
			rsURL.close();
		} catch (SQLException ex){
			System.out.println("Fehler beim auslesen aus der Datenbank. " + ex.toString());
			System.out.println("MESSAGE: " + ex.getMessage());
		}
		
		finally{
			out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n" +
						"\"http://www.w3.org/TR/html4/loose.dtd\">\n" +
						"<html> \n" +
						"<head> \n" +
						"<title>Webtracer</title> \n"+
						"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n" +
	
						"<style type=\"text/css\">\n" +
						"<!--\n" +
						"body {\n" +
							"background-color: #FFCC33;\n" +
						"}\n" +
						"-->\n" +
						"</style></head>\n" +
						"<body> \n"+
						"<table width=\"715\" height=\"515\" border=\"0\"> \n"+
						"  <tr>  \n"+
						"    <td width=\"705\" valign=\"top\" bgcolor=\"#FFFF66\"><div align=\"left\"> \n"+
						"      <h1>Herzlich Willkommen " + name + " " + NName + "!</h1> \n"+
						"      <h3>&</h3> \n"+
						"      <h3>Ihre pers&nlichen Daten: </h3> \n"+
						"      <div align=\"center\"> \n"+
						"        <table width=\"395\" height=\"163\" border=\"0\"> \n"+
						"            <tr> \n"+
						"              <td width=\"117\">

BenutzerID:</p>            </td> \n"+
						"              <td width=\"268\">" + benutzerID + "</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"            <tr> \n"+
						"              <td>Nickname:</td> \n"+
						"              <td>"+ nickname +"</td> \n"+
						"            </tr> \n"+
						"              <td>Name:</td> \n"+
						"              <td>"+ name +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td>Nachname:</td> \n"+
						"              <td>"+ NName +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td>Strasse:</td> \n"+
						"              <td>"+ strasse +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td height=\"21\">PLZ:</td> \n"+
						"              <td>"+ plz +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td height=\"21\">Ort:</td> \n"+
						"              <td>"+ ort +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td height=\"21\">Nation:</td> \n"+
						"              <td>"+ nation +"</td> \n"+
						"            </tr> \n"+
						"            <tr> \n"+
						"              <td height=\"21\">e-mail:</td> \n"+
						"              <td>"+ email +"</td> \n"+
						"            </tr> \n"+
						"              </table> \n"+
						"        <h3 align=\"left\">&</h3> \n"+
						"        <h3 align=\"left\">Ihre zu &berwachende URL:</h3> \n"+
						"        <table width=\"387\" border=\"0\"> \n"+
						"          <tr>  \n"+
						"            <td width=\"108\">URL Name:</td> \n"+
						"            <td width=\"263\">"+ urlName +"</td> \n"+
						"          </tr> \n"+
						"          <tr> \n"+
						"            <td>URL Adresse:</td> \n"+
						"            <td>"+ urlAdresse +"</td> \n"+
						"          </tr> \n"+
						"        </table> \n"+
						"        <p align=\"left\">&</p> \n"+
						"        <p align=\"left\">Sie k&nnen Ihre Daten jederzeit unter &Mein Konto& &ndern. </p> \n"+
						"      </div> \n"+
						"    </div></td> \n"+
						"  </tr> \n"+
						"</table> \n"+
						"</body> \n"+
						"</html> \n"); 
			

			con.dbClose();  
		} //try-catch
	} //funktion
```


Und ausgebn tuts mir:

BenutzerID = 24
Nickname = Leo
Name = null
Nachname = null
usw.

also hauts mich glaub ich bei der gesagten stelle raus

Lg Leo


----------



## sliwalker (28. Okt 2005)

Ja was denn nun???

phpmyadmin --> MySQl Datenbank oder ODBC --> Access-Datei?

Wenn Du mir das sagts kann ich Dir vllt helfen...


----------



## Guest (28. Okt 2005)

Ich verwende jetzt eine ODBC Bridge mit der ich über JAVA auf die MySQL Datenbank zugreif.

Und über phpmyadmin schau ich ob alles hinghaut hat.. 
hoff hab deine frage damit beanwortet zu haben.


----------



## JaLeo (29. Okt 2005)

PS: es gibt einen ODBC Treiber für eine MySQL Datenbank!

Mfg Leo


----------



## André Uhres (29. Okt 2005)

> also hauts mich glaub ich bei der gesagten stelle raus 

Du liegst fast richtig. Die Anweisung die den Fehler auslöst liegt nur etwa 3 Zeilen höher:
"benutzerID = rsID.getString("BenutzerID");"
Wie lösen wir denn das Problemchen?

*Lösung 1:*
Die besagte Anweisung streichen, da sie sowieso überflüssig ist (sie steht einige Zeilen höher noch einmal).

*Lösung 2:*
Ersetz bitte dies:

```
while(rsID.next() == true){
```
durch das:

```
if(rsID.next()){
```
Du kannst auch beide Lösungen kombinieren.
Beste Grüsse
Andre_Uhres

PS: @sliwalker: dein Zwischenruf hat mich ein wenig :?


----------



## JaLeo (29. Okt 2005)

Vielen Vielen Dank Andre!

Jetzt funktionierts einwandfrei (mit Compiler 1.4) .. bei 5.0 gibts einen fehler.. 

aber ich werd einfach nur mitn 1.4 copmilieren..

Und nochmals danke für deine Mühe


----------



## sliwalker (29. Okt 2005)

Andre_Uhres hat gesagt.:
			
		

> PS: @sliwalker: dein Zwischenruf hat mich ein wenig :?


Na dann. Versteh ich zwar nicht, aber wenn Du meinst.
Mir war nunmal nicht ganz klar was er meint. Ich lese oft (und vor allem nicht mehr so spät) nur über die Texte rüber und achte mehr auf den Quellcode wenn es einen gibt. Dazu kommt noch, das ich die zweite Seite übersehen hab. :/

Aber mit seiner Antwort hat er mir alle Fragen bestens beantwortet.
Kein Grund :? zu sein


----------

