一.JDBC简介
全名:java database connection
java代码与数据库相连的工具,java>JDBC>(oracle mysql sql server)
二.四大件
- DriverManager:根据不同数据库,调用正确的Driver
- Connection:由Driver产生,负责数据库的连接
- Statement:由connection产生,负责传送SQL指令
- ResultSet:负责接收Statement(sql语句)执行结果
三.JDBC具体步骤
- 安装驱动,驱动为一个jar包,mysql的驱动和oracle的驱动不同
- 复制到src目录下,build path>addto
- 加载驱动-------Class.forName("com.mysql.jdbc.Driver");
- 与数据库相连----------Connection con=DriverManager.getConnection(url,user,psw);(此处会发生异常)
- 写sql语句---------Statement st=con.createStatement();(异常)
- 执行sql语句-----------int rows=st.executeUpdate(sql);//更新操作:此处返回受影响的行数
- 关闭四大件-------st.close();con.close();
以上为更新数据,下面的例子为插入数据,具体代码如下
public class StudentDao{ private Connection con; private Statement st; private ResultSet rs; public void insert(Student s)throws SQLExp{ String sql="insert****"; con=DbUtils.getConnection(); st=con.createStatement(); int rows=st.executeUpdate(sql);
DbUtils.close(con,st,rs); return rows; } public static void close(Connection con,Statement st,ResultSet rs){ try{ if(con!=null) con.close(); if(st!=null) st.close(); if(rs!=null) rs.close(); }catch(SQLExp e){ syso(连接失败); e.printStackTrace(); } } }
另有优化的方法PreparedStatement:预编译:可有效防止sql注入
public class StudentDao{ private Connection con; private PreparedStatement ps;// private ResultSet rs; public void insert(Student s)throws SQLExp{ String sql="insert into Student values(?,?,?,?)"; con=DbUtils.getConnection(); ps=con.prepareStatement(); ps.setInt(1,s.getId()); ps.setString(2,s.getName()); ps.setInt(3,s.getAge()); ps.setDouble(4,s.getScore()); int rows=st.executeUpdate(sql); DbUtils.close(con,st,rs); return rows; } }
关于JDBC的批处理,一般用到较少
//传入参数非一个学生,二是一个学生的List数组 for(Student s:l){ String sql="insertXXXX"; st.addBatch(sql); } int arr[]=st.executeBatch(); //预编译: String sql="insert into student values(?,?,?,?)"; ps=con.preparedStatement(sql); for(Student s:l){ ps.setInt(1,s.getId()); ps.setString(2,s.getName()); ps.addBatch(sql); //批处理 }
test类
StudentDao sd=new StudentDao(); List<Student>l=new ArrayList<Student>(); Student s=new Student(1015,"zhangwenfang",54.2,"sdad"); Student s1=new Student(1004,"zhangwefsng",54.2,"sfdsad"); Student s2=new Student(1003,"zhsfdang",54.2,"gasad"); l.add(s); l.add(s2); l.add(s1); try { sd.inserts(l); System.out.print("插入成功"); } catch (SQLException e) { System.out.println("插入失败"); e.printStackTrace(); }
四.关于事务
理解银行转账的过程,要么全成功,要么全失败。你给人转账,你银行得-钱,别人得+钱
三要素:
- 保证Connection 是同一个
- 关闭自动提交
- 不要忘了手动提交
浙公网安备 33010602011771号