jdbc简记

JDBC:Java DataBase Connectivity:是用于java编程中与数据库连接的API。

一、jdbc编程步骤:

导入的包:
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

1)注册、加载数据库驱动,把Driver类装载进jvm:

  Class.forName("com.mysql.jdbc.Driver");

2)创建并获取数据库链接(数据库的地址,用户名,账号密码):

  con=DriverManager.getConnection(url,user,password);

3)创建jdbc statement对象:

  stmt=con.createStatement();#Or:preparedStatement = con.prepareStatement("sql语句");

4)设置sql语句。

5)通过statement执行sql并获取结果:

  ResultSet rs=stmt.executeQuery("sql查询语句");

7)对sql执行结果进行解析处理:

  while(rs.next())

  {

    int id = rs.getInt("user_id");

    system.out.println("id:" + id);

  }  

8)释放资源,关闭连接(resultSet.prepareStatement.connection):

  rs.close();

  stmt.close();

  conn.close();

二、JDBC两层体系结构的简记:

  1)JDBC API:提供应用程序到JDBC管理器连接

  2)JDBC驱动程序API:支持JDBC管理器到驱动程序连接。

三、Statement、preparedStatement的区别(CallableStatement对象:用于执行对存储过程的调用;继承自PreparedStatement,支持带参数的SQL操作):

1)三者都是接口,之间的继承关系:Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。Statement接口提供了执行语句和获取结果的基本方法;PreparedStatement接口添加了处理 IN 参数的方法。CallableStatement接口添加了处理 OUT 参数的方法。

2)statement创建时是不传参的,preparestatement创建时是需要传入sql语句的(自然获取结果集的时候也是有传参的不同):

例如:Statement sta=con.createStatement(); ResultSet rst=sta.executeQuery(“select * from book”);

   PreparedStatement pst=con.prepareStatement(“select * from book”); ResultSet rst=pst.executeQuery();

3)PreparedStatement继承Statement,PreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。

4)execute、 executeQuery 和 executeUpdate 已被preparedment更改:使之不再需要参数。

5)preparedstatement的一个占位符对应一个值。sql语句是确定的,也就是说一个占位符只能对应一个值。而statement没有此限制。

6)PreparedStatement对象用于执行预编译SQL语句(可变参数的SQL),编译一次,执行多次,效率高;安全性好,有效防止Sql注入等问题(因为注入只对sql语句的编译过程有破坏作用,PreparedStatement已经预编译过了,不再需要对sql语句进行解析了,所以就避免了sql注入问题);

四、jdbc的问题

1)数据库链接创建释放频繁造成系统资源浪费,进而影响性能。使用数据库连接池可以解决此问题。

2)sql语句变动需要经常改动java语句。

3)使用preparedStatement向占位符传参存在硬编码(需要修改代码),对结果集解析存在硬编码(查询列名),系统不易维护。如果能将数据库记录封装成pojo对象解析比较方便。

五、mybatis解决jdbc编码的问题(顺便提提)

1)在sqlMapconfig.xml中配置数据链接池,使用连接池管理数据库链接。

2)将sql语句配置在xxxmapper.xml文件中与java代码分离。

3)Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4)Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

posted @ 2019-12-11 16:11  scnu-yang  阅读(122)  评论(0编辑  收藏  举报