I have the datasoure and drivers set up, but for some reason this code is not updating the database.

import java.sql.*;

public class TestCreateCoffeeTable
{
	public TestCreateCoffeeTable()
	{
	}
	public static void main(String[] args)
	{
	   try
	   {
		String createStatement;
		
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		
		String dataSource = "jdbc:odbc:Coffeebreak";
		
		Connection con = DriverManager.getConnection(dataSource);
		
		Statement statement1 = con.createStatement();
		
		[B]String insert;
		
		//add the info
		insert = "INSERT INTO Coffeebreak VALUES( 'Bob', 24, 23)";
		
		statement1.executeUpdate(insert);[/B]
		
	   }
	   catch(ClassNotFoundException cnfe)
	   {
		   System.err.println(cnfe);
	   }
	   catch(SQLException sqle)
	   {
		   System.err.println(sqle);
	   }
	   catch(Exception e)
	   {
		   System.err.println(e);
	   }
	}
}

I'm sure that the problem has to be with what's in bold, but it looks right...
I do have the code that created the table if you need that. It created three columns, Name, ID_NUM, and Pay...But none of those are being populated.

Recommended Answers

All 7 Replies

Are you getting any errors?
Unless you have a DSN named exactly the same as the table you're trying to update that may be your problem.

Also remember that (unlike SQL standard...) MSAccess I think uses case sensitive table and field names.
The most correct form of the insert statement would also include the field names in the statement to ensure that they're in the order you want.
Furthermore you may or may not need to add a semicolon to the SQL statement. Officially it shouldn't be needed but some drivers and databases aren't as nice as others :)

So your SQL should be INSERT INTO Coffeebreak (Name, ID_NUM, Pay) VALUES ('Bob', 24, 23)

I tried that, but it's still not working. There's not exceptions thrown, and I made sure no DNS has the same name...I checked case sensitivity, and everything was correct..Did I enter everything correctly according to the data types?

Name is a String
ID_NUM is an int
Pay is an int

**************************************
Statement statement1 = con.createStatement();
****************************************

here is the problem u hav to give the query inside createStatement()

like

Statement statement1 = con.createStatement(string);

then it'll work

there is no createStatement() method taking a String...

What's the returnvalue you get from executeUpdate()? That's the number of records the database reports inserted.

If it's 1 and afterwards you don't see them appearing, autocommit may be off on the database.
Either do an explicit commit or set autocommit to on.

I tried something like this:

System.out.println(statement1.executeUpdate(insert));

but it throws an sql exception saying simply "general error"

If I shouldn't use System.out for checking the return val, please let me know how I should be checking it.. I do have the code that created the table, so I could post that if you think it's something in effect to it..

no, the executeUpdate threw an SQLException.
If there's no more detailed information given, you got to hope your database server has a log somewhere.

I finally figured it out.. When I created the table, I specified the data type after the name of the field...I don't know how I could be that stupid(which is why I'm blaming my computer this time)... It did update the single test field like I wanted, but for some reason the same sql exception is being thrown. I guess it doesn't matter much now, but do you have any idea why it's still being thrown.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.