一、数据库的访问
a)JDBC直接访问数据库
b)第三方O/R工具,如Hibernate、ibatis等
二、JDBC:
是一个独立于特定数据库管理系统,通用的SQL数据库存取和操作的公共接口。
JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层,由java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成
三、事物:指一组逻辑操作单元,使数据从一种状态变换到另一种状态
1、事物的操作:
先定义开启一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久的保存下来。如果回退(ROLLBACK),数据库管理系统将放弃所作的所有修改而回到开始事务时的状态
2、事物的ACID属性:
a)、原子性:即事物是一个不可分割的工作单位,事物中的操作要么发生,要么不发生。
b)、一致性:即事物必须使数据库从一个一致性状态变换到另一个一致性状态,这样数据才不会被破坏
c)、隔离性:即事物的执行不能被其他的事物干扰,亦即对一个事物内部的操作及使用的数据对并发的其他事物是隔离的,并发执行的各个事物之间不能相互干扰
d)、持久性:即一个事物一旦被提交,他对数据库中的数据的改变是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
3、事物处理:保证所有事物都作为一个工作单元来执行,既是出现了故障都不能改变这种执行方式。
当一个事物中执行多个操作时,要么所有的事物都被提交(commit),要么整个事物回滚(rollback)到最初的状态
四、通过JDBC操作数据库的步骤:
1)、通过通过Class.forName加载数据库驱动
2)、通过DriverManager的getConnection方法连接数据库,返回连接对象Connection
3)、通过连接对象的prepareStatement方法获取PreparedStatement对象,将将要执行的sql作为参数进行传递
4)、如果要设置参数,就通过setXXX方法动态设置参数
5)、通过executeUpdate或executeQuery方法执行sql
五、封装ToolsJDBC工具类:
1 package com.st.comm; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 8 public class ToolsJDBC { 9 10 /** 11 * @Tiyle: getConnection 12 * @Description: 获取Connection连接 方法为static是为了在dao中使用的时候直接.出来,而不用重新new一个对象 13 * @Param: @return 14 * @return: Connection 15 */ 16 public static Connection getConnection(){ 17 18 Connection conn = null; 19 20 try { 21 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; 22 //1、通过Class.forName加载数据库驱动 23 Class.forName("oracle.jdbc.OracleDriver"); 24 // 2、通过DriverManager获取连接对象 25 conn = DriverManager.getConnection(url,"scott","tiger"); 26 27 } catch (Exception e) { 28 e.printStackTrace(); 29 } 30 // System.out.println("conn-------"+conn); 31 return conn; 32 } 33 34 /** 35 * @Tiyle: closeJDBC 36 * @Description: 关闭Connection连接 这里用static类型的方法是为了在调用该方法时可以直接点出来,而不用重新new一个对象 37 * @Param: @param conn 38 * @Param: @param ps 39 * @Param: @param rs 40 * @return: void 41 */ 42 public static void closeJDBC(Connection conn,PreparedStatement ps,ResultSet rs){ 43 try{ 44 if(rs!=null){ 45 rs.close(); 46 } 47 if(ps!=null){ 48 ps.close(); 49 } 50 if(conn!=null){ 51 conn.close(); 52 } 53 }catch(Exception e){ 54 e.printStackTrace(); 55 } 56 } 57 /** 58 * @Tiyle: oracleCom 59 * @Description: 直接通过sql语句对数据库进行操作 60 * @Param: @param mode :0-增删改 1:查 61 * @Param: @param sql 62 * @Param: @return 63 * @return: Object 64 */ 65 public static Object oracleCom(int mode,String sql) 66 { 67 Connection conn = null; 68 PreparedStatement ps = null; 69 ResultSet rs = null; 70 Object a=null; 71 try{ 72 //获取connection连接对象 73 conn = getConnection(); 74 //将要执行的sql作为参数进行传递,并返回PrepareStatement类 75 ps = conn.prepareStatement(sql); 76 //设置要添加的参数 77 //conn.setAutoCommit(false); 78 //执行sql语句 79 if(mode==0) 80 { 81 if(ps.executeUpdate()==1) //返回值为1就代表添加,删除,修改成功 82 a=1; 83 } 84 else if(mode==1) 85 { 86 87 rs=ps.executeQuery(); //返回ResultSet类型 用于查询方法 88 // ps.execute(); //返回一个布尔值,表示是否返回ResultSet 89 // System.out.println(rs.next()); 90 if(rs.next()) 91 a=true; 92 else 93 a=false; 94 95 } 96 conn.commit(); 97 }catch(Exception e){ 98 e.printStackTrace(); 99 }finally{ 100 closeJDBC(conn, ps, rs); 101 } 102 return a; 103 } 104 }
用拼接法写SQL语句
1 package com.st.dao; 2 3 4 import com.st.action.TempE_mail; 5 import com.st.bean.ETempBean; 6 import com.st.bean.E_mailBean; 7 import com.st.comm.ToolsJDBC; 8 9 10 public class E_mailDaoIm implements E_mailDao{ 11 //实现添加用户方法 12 public boolean E_mailAddUser(E_mailBean user) { 13 String sql="insert into e_mail values('"+user.getUserName()+"@czj.com','"+user.getPassWord()+"','member')"; 14 System.out.println(sql); 15 System.out.println(ToolsJDBC.oracleCom(0, sql)); 16 return true; 17 } 18 //实现用户匹配方法-----------用于登陆 19 public boolean E_mailMatching(E_mailBean user) { 20 boolean flag = false; 21 String sql = "select *from e_mail e where e.ename = '"+user.getUserName()+"' and e.epassword = '"+user.getPassWord()+"'"; 22 // System.out.println(sql); 23 flag = (Boolean)ToolsJDBC.oracleCom(1, sql); //将Object类型强制转换为Boolean类型的数据,这样才能返回 24 // System.out.println(ToolsJDBC.oracleCom(1, sql)); 25 // System.out.println(flag); 26 return flag; 27 } 28 //实现tempE_mail添加数据并返回id方法 29 public int AddTempE_mail(ETempBean eTempBean){ 30 int id = 0; 31 String sql = "insert into tempE_mail(recipients,Addresser) values('"+eTempBean.getRecipients()+"','"+eTempBean.geteAddresser()+"')"; 32 ToolsJDBC.oracleCom(0, sql); 33 return id; 34 } 35 }