一张Access的表,表名为test,字段a:string 字段b b:int
用executeUpdate执行一条insert语句往表中插记录,数据库连接成功了,也提示执行sql成功,可是打开表来看,仍然没有数据。
不知道为什么。刚开始学,大家帮忙import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement; 
public class Test{
    public static void main(String[] args) {
        Dbtest dbtest = new Dbtest();
    }
}class Dbtest {
    Statement stmt;
    Connection conn;    Dbtest() {
        conn = getConnection();
        String sqlstr;
        sqlstr = "insert into test(a,b) values ('1',1)";       
        try {
            stmt.executeUpdate(sqlstr);
            conn.commit();
            System.out.print("sql语句执行成功");  //执行能后现实该语句,应该实执行成功了。
        } catch (SQLException ex) {
            System.out.print("sql语句执行出错");
        }
    }    //获取数据库连结
    Connection getConnection() {
        String dbURL = "jdbc:odbc:go";
        String user = "";
        String psw = "";
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection(dbURL, user, psw);
            stmt = conn.createStatement();
        } catch (ClassNotFoundException ex) {
            System.out.println("数据库连结失败");
        } catch (SQLException ex1) {
            System.out.println("数据库连结失败");
        }
        return conn;
    }
}

解决方案 »

  1.   

    sqlstr = "insert into test(a,b) values ('1',1)";       把你的sqlstr打印出来看看,放到Access里执行看看报错么?
      

  2.   

    试过了,不报错。而且有错误的话程序肯定会走到System.out.print("sql语句执行出错")的吧。可是输出结果没有这个提示
      

  3.   

    这里你没有设定自动提交为false,就不用commit(),试试看好用不
      

  4.   

    增加 finally来关闭数据库的资源
      

  5.   

    正如楼楼上说的那样, stmt没有初始化。
    在stmt.executeUpdate(sqlstr); 前加上:stmt = conn.createStatement();试试。
      

  6.   

    楼主在getConnection里初始化stmt了和释不释放资源也没关系吧个人同意 liubeiqi(无爱无悔) 的说法,去掉conn.comit().默认好像commit是auto的
      

  7.   

    你把SQLSTR放到ACCESS里执行能插入数据??我觉不是JAVA代码的问题,楼主的JAVA代码好象没问题的。
      

  8.   

    vvpang(NullPointerException说的是对的,conn.close后就提交成功了
    autocommit为true时commit似乎不起作用
    查了一下文挡,autocommit为true时,commit动作发生在下一个update执行,或者statement结束的时候。