# SQL Eintrag mit AutoWert



## TS-JC (17. März 2004)

```
String updateString = "INSERT INTO " +
         "services "         +
         "VALUES ("          +
         "'', "             +
         portNumber          +
         ", '"              +
         protocolType.trim() +
         "', '"              +
         serviceAlias.trim() +
         "', '"              +
         comment.trim()      +
         "');";
```

portNumber ist Integer, der Rest ist String
Ausgelesen werden die Wert aus der Datei services im Win-Ordner "system32\drivers\etc"

Die Datenbank ist aufgebaut:
AutoWert, Long Integer, String 3, String 20, String 50

Als Meldung bekomme ich von Java:
Fehler java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Datentypen in Kriterienausdruck unverträglich.
Fehler java.lang.NullPointerException


Wenn mir jemand helfen kann, big thx =)


----------



## Christian Fein (17. März 2004)

Wenn der Wert automatisch gesetzt werden soll dann gib gar keinen Wert an,
geb dazu die spalten an in denen du was eingeben willst.

insert into services (bla,blub,blem) values (...

Und lass dabei die Spalte mit autowert aus.


----------



## TS-JC (17. März 2004)

wenn ich die spalte auslasse, bekomme ich die meldung:
Anzahl der Abfragewerte und Zielfelder stimmt nicht überein.

was ja auch sinn macht =)

also keinen plan wies gehen könnte, grr


----------



## Thomas Darimont (20. März 2004)

Hallo!

Versuch mal folgendes:

Die passende Access DB ist im Anhang.


```
/*
 * Created on 20.03.2004
 *
 * To change the template for this generated file go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
public class Test {

	static {
		try {
			Thread
				.currentThread()
				.getContextClassLoader()
				.loadClass("sun.jdbc.odbc.JdbcOdbcDriver")
				.newInstance();
			System.out.println("Driver was loaded!");
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private Connection con;
	private ResultSet rs;
	private PreparedStatement ps;

	public Test() {
		try {
			con =
				DriverManager.getConnection(
					"jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:/db2.mdb;");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new Test().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub
		if (con == null)
			throw new RuntimeException("con was null");

		try {
			con.setAutoCommit(false);

			ps =
				con.prepareStatement(
					"INSERT INTO Tabelle1 (Test,Nr) VALUES (?,?);");

			if (ps == null)
				throw new RuntimeException("ps was null");

			for (int i = 0; i < 100; i++) {
				ps.setString(1, "Test" + i);
				ps.setInt(2, i);
				ps.execute();
			}
			
			con.commit();
			
			System.out.println("Commit!");
			
			ps.close();
			con.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
```

Gruß Tom


----------



## TS-JC (20. März 2004)

meins hat nun funktioniert, allerdings erst als ich den code von jemand anders bekam, ob wohl ich das selbe vorher auchs chon probiert hatte...naja

hier meine code zeile


```
String updateString = "INSERT INTO services (portNumber, protocolType, serviceAlias, comment) VALUES (" + portNumber + ", '" + protocolType.trim() + "', '" + serviceAlias.trim() + "', '" + comment.trim() + "')";
```

das autowertfeld wurde einfach rausgelassen udn wird dann automatisch gefüllt


----------

