JDBC的总结
JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
- 连接数据源,如:数据库;
- 为数据库传递查询和更新指令;
- 处理数据库响应并返回的结果;
JDBC(Java Data Base Connectivity :java数据库连接)是SUN公司为了简化,统一对数据库的操作,定义的一套Java操作数据库的规范;
JDBC代码的编译步骤:
- 加载驱动
Class.forName(driverClass) //加载MySql驱动 Class.forName("com.mysql.jdbc.Driver") //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver")
- 获取与数据库的连接
DriverManager.registerDriver(new Driver());
DriverManager.getConnection(url, user, password);
- 采用registerDriver方法注册驱动,一方面是Driver的源码容易查看到,而且还会导致驱动程序注册两次,在内存中会出现两个Driver对象;另一方面程序依赖mysql的API,如果没有jar包,再次切换底层数据库是很麻烦的;所以一般不推荐使用
- Class.forName("com.mysql.jdbc.Driver");这种方法只需要一个字符串,不依靠驱动并且不会导致驱动内存对象重复出现;
- URL的写法: jdbc:mysql://localhost:3306/test?参数名:参数值
- 获取用于向数据库发送SQL语句的statement;
conn.createStatement();
conn.prepareStatement(sql);
Statement 对象用于向数据库发送SQL语句,Statement对象常用方法:
- executeQuery(String sql):用于向数据库发送查询语句;
- executeUpdate(String sql):用于向数据库发送inset,update,或delete语句;
- execute(String sql):用于向数据库发送任意的sql语句;
- addBatch(String sql):把多条sql语句放到一个批处理中;
- executeBatch():向数据库发送一批sql语句执行;
- 向数据库发SQL,并获取代表结果集的resultset;
ResultSet 用于代表sql语句的执行结果;一般会采用类似表格的方式封装执行结果;该对象提供获取数据的get()方法:
- getObject(int index)
- getObject(string columnName)
- getString(int index)
- getString(String columnName)
- 获取结果集的数据;
- 关闭链接,释放资源;
这里释放的是程序在运行的过程中,创建的那些与数据库进行交互的对象。通常是ResultSet,Statement,Connection;
JDBC增删改查
增操作(create):
Statement st = conn.createStatement(); String sql = "insert into user(….) values(…..) "; int num = st.executeUpdate(sql); if(num>0){ System.out.println("插入成功!!!"); }
更新操作(update):
Statement st = conn.createStatement(); String sql = “update user set name= ' ' where name= ' ' "; int num = st.executeUpdate(sql); if(num>0){ System.out.println(“修改成功!!!"); }
删除操作(delete):
Statement st = conn.createStatement(); String sql = “delete from user where id=1”; int num = st.executeUpdate(sql); if(num>0){ System.out.println(“删除成功!!!"); }
查操作(read):
Statement st = conn.createStatement(); String sql = “select * from user where id=1; ResultSet rs = st.executeQuery(sql); while(rs.next()){ //根据获取列的数据类型,分别调用rs的相应方法映射到java对象中 }
PreparedStatement与Statement的区别
- PreperedStatement是Statement的子类 ;
- 它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象 而言:PreperedStatement可以避免SQL注入的问题
- Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对 SQL进行预编译,从而提高数据库的执行效率
- PreperedStatement对于sql中的参数, 允许使用占位符的形式进行替换;
PreparedStatement 的占位符使用代码实例:
public static void main(String[] args) { int _id=1; String _name="张三"; String _gender="男"; Connection con=null; PreparedStatement ps=null; try { //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //使用驱动创建连接 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123456"); //定义sql语句 String sql="insert into hehe values(?,?,?)"; //创建执行命令对象 ps= con.prepareStatement(sql); //设置参数 ps.setInt(1, 1); ps.setString(2,_name); ps.setString(3, _gender); //执行命令并接受结果 int result=ps.executeUpdate(); System.out.println(result); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { if(null!=ps) ps.close(); if(null!=con) con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

浙公网安备 33010602011771号