JDBC六部曲

JDBC

l  什么是JDBC?

n  Java DataBase Connectivity

l  接口有什么作用?

n  使程序“可插拔”,易于扩展。

n  接口是一套规范,程序员应该面向接口去调用,不需要关心接口底层的具体实现。

l  JDBC的本质是一套规范一套接口,是SUN定义的J2EE规范之一。所有的java程序员面向JDBC接口调用,所有的数据库厂商程序员面向JDBC规范实现。实现类被称作“驱动”。所有的驱动都是以.jar结尾的文件。所以在编写JDBC程序之前需要将驱动配置到环境变量CLASSPATH中,如:

u  CLASSPATH= .;F:\bjpowernode\MySQL\mysql-connector-java-5.0.8-bin.jar

u  注意配置后一定要重启启动cmd

l  JDBC编程六步曲

n  注册驱动

//创建驱动对象

java.sql.Driver driver = new com.mysql.jdbc.Driver();

//java.sql.Driver driver = new oracle.jdbc.driver.OracleDriver();

java.sql.DriverManager.registerDriver(driver);

n  获取数据库连接

//URL格式:   协议---IP---Port---DBNAME

//Mysql       jdbc:mysql://127.0.0.1:3306/bjpowernode

//Oracle       jdbc:oracle:thin:@ 127.0.0.1:1521:bjpowernode

String url = “jdbc:mysql://127.0.0.1:3306/bjpowernode”;

String username = “root”;

String password = “root”;

java.sql.Connection conn = DriverManager.getConnection(url,username,password);

n  获取数据库操作对象

Statement stmt = conn.createStatement();

n  执行SQL语句

String sql = “DELETE FROM EMP_BAK WHERE EMPNO=7369”;

stmt.executeUpdate(sql);  //执行insert,update,delete (DML)

String sql = “SELECT ENAME,SAL FROM EMP”;

ResultSet  rs = stmt.executeQuery(sql);   //执行查询语句(DQL)

n  如果执行的是查询语句,处理结果集

while(rs.next()){ //SELECT  ENAME  AS  A,SAL  AS  B FROM EMP;

  //通过查询结果的字段位置获取数据,获取为字符串类型

  String ename = rs.getString(1);

  //通过查询结果的字段位置获取数据,获取为指定类型

  double sal = rs.getDouble(2);

  //通过查询结果的字段名称获取数据(推荐),获取为字符串类型

  String ename = rs.getString(“A”);

  //通过查询结果的字段名称获取数据(推荐),获取为指定类型

  double sal = rs.getDouble(“B”);

}

n  释放资源(在finally语句块中释放)

//释放原则:从小到大依次释放,分别try…catch…

finally{

  if(rs!=null){

  try{rs.close();}catch(SQLException e){}

}

if(stmt!=null){

  try{stmt.close();}catch(SQLException e){}

}

if(conn!=null){

  try{conn.close();}catch(SQLException e){}

}

}

 

注册驱动的第二种方式

Class.forName(“com.jdbc.mysql.Driver”);

原理:

package  com.mysql.jdbc;

public class Driver{

   try

    {

       DriverManager.registerDriver(new Driver());

    } catch (SQLException E) {

       throw new RuntimeException("Can't register driver!");

}

}

l  不修改java程序,做到动态平滑移植数据库

编写一个属性文件dbinfo.properties,文件内容如下:

driverClass=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/bjpowernode

username=root

password=root

如果要连接其他数据库则修改该属性文件即可。

l  编写JDBC代码完成简单的用户登录业务。理解使用Statement数据库操作对象会存在SQL注入现象。思考:如何防止SQL注入。

l  使用预编译数据库操作对象PreparedStatement防止SQL注入。

PreparedStatement优点:

1.       PreparedStatement可以将SQL语句框架预先编译。用户传递信息过来之后,即使信息中含有SQL语句关键字,那么该信息也会被看做普通的字符串处理,不会当做SQL语句的一部分被编译进去,从而解决了SQL注入问题。

2.       批量执行同构的SQL语句PreparedStatement效率高,因为编译一次执行多次。

3.       PreparedStatement是类型安全的。

l  JDBC事务处理

JDBC默认情况下采用的是自动提交机制,每执行一条DML(insert,update,delete)语句就提交一次。在现实的业务逻辑中应该一个完整的业务(完整事务,批量的DML语句)执行结束之后再提交。若业务处理过程中某个DML语句执行失败,则应该全部回滚。代码应该如下控制:

1.       conn.setAutoCommit(false); //自动提交关闭

2.       conn.commit(); //完整业务结束之后手动提交

3.       conn.rollback(); //出现异常之后回滚

l  JDBC批处理操作

批量执行同构的SQL语句应该采用JDBC提供的批处理。代码如下:

第一,     参数添加到batch中 ps.addBatch();

第二,     batch中的参数达到一定数目之后,批量发送batch中的参数  ps.executeBatch();

第三,     清空batch   ps.clearBatch();

l  连接池初步

为了提高(Java)Server连接数据库的效率,可以在JavaServer服务器中创建一个集合存储多个连接对象,该集合被称作“连接池”,用户如果访问服务器,那么服务器只需要从“连接池”中拿连接对象即可。连接池有如下属性:

1.       最大连接数(连接池中连接对象的上限)

2.       最小连接数(连接池中最少的连接对象数目)

3.       最大等待时间(客户如果获取不到空闲连接对象则进入等待状态,最大等待时间设置,如果超时则抛出异常。)

4.       URL

5.       username

6.       password

7.       driverclass

l  关于模糊查询

String sql = “select table_name from user_tables where table_name like ?”;

ps = conn.prepareStatement(sql);

ps.setString(1,”%T%”);

rs = ps.executeQuery();

      

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值