数据库中无法进行update和insert
是怎么回事?
我的java数据库连接类(connect.java):import java.sql.*;public class connect { private Connection con = null;
static String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
static String sDbURL =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=puds";
static String sDbLogin ="sa";
static String sDbPassword =""; public connect() {
} public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sDbURL, sDbLogin, sDbPassword);
conn.setAutoCommit(false);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
我把sql语句写在一个静态类里(sql.java)public class sql {
public sql() {
}
public static final String sql_login = "insert into jobmem(username,email,pwd,truename,pdate,type) values(?,?,?,?,getDate(),?)";
}
我在myoper.java中调用: private Connection con = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
public boolean getlogin(String username, String truename, String pwd,
String type) {
try {
connect co = new connect();
con = co.getConnection();
ps = con.prepareStatement(sql.sql_login);
ps.setString(1, username);
ps.setString(2, username);
ps.setString(3, pwd);
ps.setString(4, truename);
ps.setString(5, type);
int q = ps.executeUpdate();
if (q > 0) {
System.out.println("q="+q);
return true;
}
} catch (Exception ex) {
System.out.println("用户注册失败:" + ex.getMessage().toString());
} finally {
try {
con.close();
} catch (SQLException ex1) {
}
}
return false;
}
我将q输出:1
但是我到数据库中去查看就是不更新数据库,
但是手动填写数据,却能从数据库中读出来,请问高手们,这是怎么回事?
是怎么回事?
我的java数据库连接类(connect.java):import java.sql.*;public class connect { private Connection con = null;
static String sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
static String sDbURL =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=puds";
static String sDbLogin ="sa";
static String sDbPassword =""; public connect() {
} public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sDbURL, sDbLogin, sDbPassword);
conn.setAutoCommit(false);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
我把sql语句写在一个静态类里(sql.java)public class sql {
public sql() {
}
public static final String sql_login = "insert into jobmem(username,email,pwd,truename,pdate,type) values(?,?,?,?,getDate(),?)";
}
我在myoper.java中调用: private Connection con = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
public boolean getlogin(String username, String truename, String pwd,
String type) {
try {
connect co = new connect();
con = co.getConnection();
ps = con.prepareStatement(sql.sql_login);
ps.setString(1, username);
ps.setString(2, username);
ps.setString(3, pwd);
ps.setString(4, truename);
ps.setString(5, type);
int q = ps.executeUpdate();
if (q > 0) {
System.out.println("q="+q);
return true;
}
} catch (Exception ex) {
System.out.println("用户注册失败:" + ex.getMessage().toString());
} finally {
try {
con.close();
} catch (SQLException ex1) {
}
}
return false;
}
我将q输出:1
但是我到数据库中去查看就是不更新数据库,
但是手动填写数据,却能从数据库中读出来,请问高手们,这是怎么回事?
conn.setAutoCommit(false);
这是将JDBC事务设置为不自动提交
也就是说每执行完一个SQL命令后你必须使用conn.commit();进行手动提交才能真正的插入数据库
当执行失败的时候conn.rollback();进行回滚事务所以你的数据库无法更新,是因为你没有提交事务
修改方法:
1.conn.setAutoCommit(false); 把这一行删除,让JDBC自动处理事务
2.int q = ps.executeUpdate();
在这一行后面加上conn.commit();手动提交事务
同时在这里加上conn.rollback();回滚事务
catch (Exception ex) {
System.out.println("用户注册失败:" + ex.getMessage().toString());
conn.rollback();
}
嘿嘿,帮我解决下这个问题好吗??
sql server+tomcat5.5连接池配置问题谢谢您了,大好人!!