# Fehler in Abfrage



## T1M (9. Aug 2005)

Hi,
ich bekomm n fehler bei einer abfrage:
Fehler in Abfrage: java.sql.SQLException: [CA][Ingres ODBC Driver][Ingres]line 1, You cannot assign  a value of type 'varchar' to a column of type 'integer'. Explicitly convert the value to the required type.

aber des kann eigentlich net sein. des sind alles Strings, bis auf vier ausnahmen. des sind ints. und alle richtig zugewiesen.
er holt mir auch alles schön aus der db raus. nur reinschreiben mag er net. da kommt der fehler.
hier mal code ...

```
...
//Tafel aktualisieren
        tafel_aktual.addActionListener(new ActionListener()
        		{
			public void actionPerformed(ActionEvent e)
			{
				int b = Integer.parseInt(dbfrids.getRowCount());
				try
				{
					//KreissaalPat[] pats = new KreissaalPat[b];
					for (int i=0; i<b; i++)
					{
						dbfrids.insertKrsTable();
					}
					table.repaint();
				}
				catch(Exception ex)
				{
					String a = "Fehler bei update";
				}
			}
		});
...
```


```
...
    public void insertKrsTable()
    {
    	KreissaalPat[] patienten= new KreissaalPat[100];
    	int i=0;
    	Statement query = null;
        ResultSet daten = null;
String sql = "insert into krstafel2 " +
					 "values( " + Station + ", " + Name + ", '" + P_ + "'," + 
                      ET + ", " + SSW + ", " + G + ", " + P + ", '" + F + "', '" +
                      Lage + "', '" + Diagnose + "', '" + Therapie + "', '" + v + 
                      ", " + v + ", " + CTG + ", " + Pädiater_informiert+ ", '" + AN_Aufklärung
					  + "', '" +"') "+
						 "Where station = " + Station + "and name = " + Name + "and privat = " +
						 P_ + "and et = "+  ET + "and ssw = " + SSW + "and gravida = " + G +
						 "and para = " + P + "and foeten = " + F + "kindslage = " + Lage +
						 "and diag = " + Diagnose + "and ther = " + Therapie + "and lila = " + 
						 v + "and ctg_ges = " + CTG + "and paedinf = " + Pädiater_informiert + 
						 "and anauf = " + AN_Aufklärung;
    	try
		{
    		query = db.createStatement();
            daten = query.executeQuery(sql);
            while(daten.next())
            {
            	patienten[i] = new KreissaalPat(Station, Name, P_, ET, SSW, G, P, F,
    					Lage, Diagnose, Therapie, v, CTG, 
    				Pädiater_informiert, AN_Aufklärung);
            }
            daten.close();
            query.close();
		}
    	catch(Exception e)
		{
    		System.out.println("Fehler in Abfrage: "+ e);
    	}
    	
    	System.out.println("Station: " + Station);
     	System.out.println("Name: " + Name);
     	System.out.println("privat: " + P_);
     	System.out.println("et: " + ET);
    	exeSql(sql);
    }
...
```
in Station, etc. steht nach drücken des buttons null.

```
...
private void exeSql(String sql)
     {
         //dbg.debug(sql);
            try
            {
               Statement statement = db.createStatement();
                statement.execute(sql);
                statement.close();
                db.commit();
                
            } catch (Exception e)
            {
                dbg.debug("Fehler in exeSql: " + e.toString());
                //System.out.println("in exeSql: " + e.toString());
                rollbackMeth();
            }    
           
     }
...
```
Dank schön.is bestimmt nur n plöder fehler den ich jetzt nimmer seh ...


----------



## Bleiglanz (9. Aug 2005)

ein insert liefert doch kein resultset???

und hat auch keine WHERE klausel???


```
String sql = "insert into krstafel2 " +
                "values( " + Station + ", " + Name + ", '" + P_ + "'," +
                      ET + ", " + SSW + ", " + G + ", " + P + ", '" + F + "', '" +
                      Lage + "', '" + Diagnose + "', '" + Therapie + "', '" + v +
                      ", " + v + ", " + CTG + ", " + Pädiater_informiert+ ", '" + AN_Aufklärung
                 + "', '" +"') "+
                   "Where station = " + Station + "and name = " + Name + "and privat = " +
                   P_ + "and et = "+  ET + "and ssw = " + SSW + "and gravida = " + G +
                   "and para = " + P + "and foeten = " + F + "kindslage = " + Lage +
                   "and diag = " + Diagnose + "and ther = " + Therapie + "and lila = " +
                   v + "and ctg_ges = " + CTG + "and paedinf = " + Pädiater_informiert +
                   "and anauf = " + AN_Aufklärung;
```
ist bescheuert, nimm ein preparedStatment


----------



## KSG9|sebastian (9. Aug 2005)

preparedStatement 

oder wenn, dann zumindest mit nem StringBuffer, dann lässt du dir das SQL mal ausgeben und schaust, wo du ein ' vergessen hast


----------



## T1M (10. Aug 2005)

HI,
habs mal umgeschrieben (so ungefähr 100000 mal :roll: ), es tut trotzdem nix.

prepearedStatement kann ich net verwenden, muß mit Statement arbeiten. die methode exeSql is fest vorgegeben.

```
...
private void exeSql(String sql)
     {
         //dbg.debug(sql);
            try
            {
               Statement statement = db.createStatement();
                statement.execute(sql);
                statement.close();
                db.commit();
                
            } catch (Exception e)
            {
                dbg.debug("Fehler in exeSql: " + e.toString());
                //System.out.println("in exeSql: " + e.toString());
                rollbackMeth();
            }    
           
     }
...

public void insertKrsTafel(String Station, String Name, String P_, Date ET, String SSW,
			int G, int P, int F, String Lage, String Diagnose, String Therapie,
			String v, int CTG, String Pädiater_informiert, String AN_Aufklärung)
   // public void insertKrsTafel()
    {
    	String sql = "insert into krstafel2 " +
					 "(station, name, privat, et, ssw, gravida, para, foeten, kindslage, " +
					 "diag, ther, lila, ctg_ges, paedinf, anauf)" +
					 "values( '" + Station + "', '" + Name + "', '" + P_ + "', " + 
                      ET + ", '" + SSW + "', " + G + ", " + P + ", " + F + ", '" +
                      Lage + "', '" + Diagnose + "', '" + Therapie + "', '" + v + "', "
					  + CTG + ", '" + Pädiater_informiert+ "', '" + AN_Aufklärung
					  + "') ";
    	System.out.println("Station: " + Station);
     	System.out.println("Name: " + Name);
     	System.out.println("privat: " + P_);
     	System.out.println("et: " + ET);
    	exeSql(sql);
    }
```
in Station, Name, P_ und ET steht bei ausführen der methode: null


----------



## Bleiglanz (10. Aug 2005)

ja und? wurde eben beim Aufruf der Mehtode so übergeben?




nebenbei:

ja, wenn der string null ist,

dann wird durch das + verketten die zeichenkette 

'null'

erzeugt, das passt wahrscheinlich nicht

das musst du mit if abfragen und falls null einfach 

NULL

schreiben (OHNE hochkommas)


----------



## T1M (10. Aug 2005)

hmm, ja ne. da hab ich mich mißverständlich ausgedrückt.
hab ja am ende der methode System.out.println(Station), etc stehen.
in der konsole kommt dann, nach drücken auf den entsprechenden button, station: null (Name: null, ...).
und warum die hochkommata weglassen? bei insert into brauch man die doch!


----------



## Bleiglanz (10. Aug 2005)

ja und? wo ist das problem??


Frage:


wenn der string==null ist, willst du dann

den Text "null" in der spalte haben oder die DatenbankNULL


----------



## T1M (10. Aug 2005)

aaaalso, ich schreibe was in meine tabelle. und die felder in die ich was reingeschrieben hab, die sollen türlich net null sein. und in die db eingetragen werden, wenn ich den button klicke.
nicht mehr, nicht weniger.


----------



## Bleiglanz (10. Aug 2005)

JA UND

bei dir wurde eben insertKrsTafel augerufen und die Parameter von denen du schreibst waren null

hast du jetzt eine Fehlermeldung oder nicht?

geht was nicht?

oder?


----------



## T1M (10. Aug 2005)

ne, hab keine fehlermeldung.
aber er schreibt auch nüscht in meine db.


----------



## Bleiglanz (10. Aug 2005)

und

was macht  dbg.debug("Fehler in exeSql: " + e.toString());
                rollbackMeth();

???


----------



## T1M (10. Aug 2005)

ich habe keinerlei ahnung.
ich erweitere nur eine bereits bestehende db-klasse. da sind zig verschiedene packages mit noch mehr klassen drin, die irgendwie alle aufeinander zugreifen.
zum glück hab ich ab morgen ne woche urlaub! :lol:  :roll:


----------



## Bleiglanz (10. Aug 2005)

wie wärs mit dem guten alten 

System.out.println

in der catch Klausel?


----------

