数据库连接步骤如下:
1、 下载mysql-connector-java的jar包,并导入
2、加载注册驱动程序,Class.forName(“com.mysql.jdbc.Driver”)
3、 连接数据库
conn = DriverManager.getCOnnection(DB_URL,USER,PASS)
4、执行sql语句
//创建用于执行sql语句的Statement对象
stmt = (Stattement)conn.createStatement();
//执行查询语句,返回查询结果
ResultSet rs = stmt.executeQuery("SELECT id,name FROM test");
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
out.println("..."+id+"..."+name);
out.println("
")
}
//执行插入语句,返回插入行数
String 失去了= “INSERT INTO test ...VALUES(...)”
stmt = (Statement)conn.create.Statement();
int count = stmt.executeUpdate(sql);
//数据库更新(删除)和插入相似
5、 关闭数据库连接
rs.close();
stmt.close();
conn.close();
6、PrepareStatement
是Statement的子接口,可以传入带占位符的sqlyuju,提供补充占位符变量的方法
String sql = "insert into mysql_test values(?,?,?)"
PrepareStatement ps = conn.preprareStatement(sql);
ps.setString(1, '');
ps.setString(2, '');
ps.setString(3, '');
ps.execteUpdate();
何为事物: 所有的操作要么同时完成,要么同时失败。在mysql中提供Commit和Rollback命令进行事务的提交与回滚。
java的事务处理类型有三种,JDBC、JTA(Java Transaction API)事务、容器事务。容器事务多用于Spring中。
JDBC一切行为包括事务是基于一个connection的.
JDBC事务处理步骤:
取消JDBC的自动提交
void setAutoCommit(bollean autoCommit)=>setAutoCommit(false)
执行各个sql语句,加入到批处理之中
如若所有语句都执行成功,则提交事务commit(),如果出现错误,则回滚:roolback()
基本核心如下:
//取消自动提交
conn.setAutoCommit(false)
//将sql加入到批处理
stmt.addBatch();
stmt.addBatch();
//执行批处理操作
stmt.execteBatch();
//提交事务
commit();
//发生错误
try{
rollback();
}
优缺点:
实例如下所示:
public static void example(){
Connection conn = null;
}try{
Class.forName("com.mysql.jdbc.Driver");
conn = DreiverManager.getConnection("jdbc:ysql://localhost:3306/mysqltest", USSR, PASS);
conn.setAutoCommit(false);//取消自动提交,改为手动提交
String sql_1 = "update test_table set name='...' where name='...'";
String sql_2 = "insert test_table (name,url) values('...',''),('','')";
stmt = (Statement)conn.create.Statement();
int count = stmt.executeUpdate(sql_1);
//若所有结果执行完成,则执行提交事务
stmt.execteUpdate(sql_2);
conn.commit();
ps.close();
conn.close()
catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
try{
//只要有一个sql语句错误,则事务回滚
conn.rollback();
}catch(SQLException e){
e.printStackTrace();
}
}
}
JDBC事务无法满足分布式数据库的处理,所以使用JTA,JTA是一个java企业版的应用程序接口,在java中,允许完成跨越多个XA资源的分布式事务
XA(数据库与事务管理器的接口标准,Oracle,DB2,Sybase提供XA支持)
JTA提供了java.transaction.UserTansaction,主要方法为:
要想使用用 JTA 事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。XAConnection 是参与 JTA 事务的 JDBC 连接。
要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。
XA连接(javax.sql.XAConnection)和非XA(java.sql.Connection)连接的区别在于:XA可以参与JTA的事务,而且不支持自动提交。
public void JtaTransfer() {
javax.transaction.UserTransaction tx = null;
java.sql.Connection conn = null;
try{
tx = (javax.transaction.UserTransaction) context.lookup("java:comp/UserTransaction"); //取得JTA事务,本例中是由Jboss容器管理
javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/XAOracleDS"); //取得数据库连接池,必须有支持XA的数据库、驱动程序
tx.begin();
conn = ds.getConnection();
// 将自动提交设置为 false,
//若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
// 将 A 账户中的金额减少 500
stmt.execute("\
update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmt.execute("\
update t_account set amount = amount + 500 where account_id = 'B'");
// 提交事务
tx.commit();
// 事务提交:转账的两步操作同时成功
} catch(SQLException sqle){
try{
// 发生异常,回滚在本事务中的操做
tx.rollback();
// 事务回滚:转账的两步操作完全撤销
stmt.close();
conn.close();
}catch(Exception ignore){
}
sqle.printStackTrace();
}
}