认识Java13种规范(一)>>>JDBC(java Database Connectivity)

版权声明:本文为作者原创,如有引用,请标明出处。 https://blog.csdn.net/WiuLuS/article/details/83035410

目录

JDBC基本功能的若干接口和类(java.sql包中):

Statement和PreparedStatement------SQL语句执行接口  

ResultSet 接口 :

ResultSetMetaData----元数据操作接口:

JDBC应用程序的基本步骤:


  • JDBC基本功能的若干接口和类(java.sql包中):

  1. Driver 接口:代表驱动程序 
  2. DriverManager 类:驱动程序管理员
  3. Connection 接口:代表数据库连接
  4. Statement 、PreparedStatement、CallableStatement 接口:代表数据库操作对象
  5. ResultSet 接口:代表结果集
  6. DatabaseMetadata、ResultSetMetadata接口:代表元数据
  7. Types 类:代表JDBC类型

  • Statement和PreparedStatement------SQL语句执行接口  

Statement :

Statement 用于执行静态 SQL 语句并返回它所生成结果的对象。比如增、删、改。

在默认情况下,同一时间每个 Statement 对象只能打开一个 ResultSet 对象。因此,如果读取一个 ResultSet 对象与另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,Statement 接口中的所有执行方法都会隐式关闭它。  
如以下操作:创建statement对象
          Statement stat=conn.createStatement();
          String sql="insert into lover values(6,'suxingxing',to_date('21-9-2016','dd-mm-yyyy'))";
          stat.execute(sql);//这里提交时应该有sql语句,不同于PreparedStatment

PreparedStatement :

关于PreparedStatement接口,需要重点记住的是: 
1. PreparedStatement可以写参数化查询,比Statement能获得更好的性能。 
2. 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,这种预处理语句查询比普通的查询运行速度更快。 
3. PreparedStatement可以阻止常见的SQL注入式攻击。 
4. PreparedStatement可以写动态查询语句 
5. PreparedStatement与java.sql.Connection对象是关联的,一旦你关闭了connection,PreparedStatement也没法使用了。 
6. “?” 叫做占位符。 
7. PreparedStatement查询默认返回FORWARD_ONLY的ResultSet,你只能往一个方向移动结果集的游标。当然你还可以设定为其他类型的值如:”CONCUR_READ_ONLY”。 
8. 不支持预编译SQL查询的JDBC驱动,在调用connection.prepareStatement(sql)的时候,它不会把SQL查询语句发送给数据库做预处理,而是等到执行查询动作的时候(调用executeQuery()方法时)才把查询语句发送个数据库,这种情况和使用Statement是一样的。 
9. 占位符的索引位置从1开始而不是0,如果填入0会导致java.sql.SQLException invalid column index异常。所以如果PreparedStatement有两个占位符,那么第一个参数的索引时1,第二个参数的索引是2.

以上就是为什么要使用PreparedStatement的全部理由,不过你仍然可以使用Statement对象用来做做测试。但是在生产环境下你一定要考虑使用 PreparedStatement 。
--------------------- 
原文:https://blog.csdn.net/xuebing1995/article/details/72235380?utm_source=copy 

  • ResultSet 接口 :

ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必须接口。

  • ResultSetMetaData----元数据操作接口:

ResultSetMetaData 是对元数据进行操作的接口,可以实现很多高级功能。Hibernate运行数据库的操作,大多是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData可以通过数据的形式,来遍历数据库各个字段的属性。对于开发者来说,此机制意义重大。

JDBC通过元数据(MetaData)来获取具体的表相关的信息,例如,可以查询数据库中有哪些表、标有哪些字段、字段的属性等。MetaData 通过一系列的getXXX将这些信息返回给我们。

MetaData元数据包括 数据库源数据DatabaseMetadata和 结果集元数据ResultSetMetaData

数据库源数据DatabaseMetadata:使用connection.getMetaData() 获得了关于数据库整体的元数据信息。

结果集元数据ResultSetMetaData:resultSet.getDataMeta() 获得的比较重要的是表的列名、列的属性等信息。

结果集元数据对象:ResultSetMetaData meta = rs.getDataMeta();

                   字段个数:meta.getColumnCount();

                   字段名字:meta.getColumnName();

                   字段JDBC类型:meta.getColumnType();

                   字段数据库类型:meta.getColumnTypeName();

数据库元数据对象:DatabaseMetaData meta = con.getMetaData();

                    数据库名:meta.getDatabaseProductName();

                    数据库版本号:meta.getDatabaseProductVersion();

                    数据库驱动名:meta.getDriverName();

                    数据库驱动版本号:meta.getDriverVersion();

                    数据库URL:meta.getURL();

                   该连接的数据库登录名:meta.getUserName();
--------------------- 
原文:https://blog.csdn.net/zhangjikuan/article/details/76177434?utm_source=copy 

  • JDBC应用程序的基本步骤:

  1. 注册驱动
  2. 建立数据库连接
  3. 创建数据库操作对象
  4. 执行SQL
  5. 处理结果集
  6. 关闭JDBC对象

1.注册一个驱动driver

         注册驱动程序的三种方式:

         方式一:Class.forName("Oracle.jdbc.driver.OracleDriver");

         方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver();

                   DriverManager.registerDriver(driver);

         方式三:编译时在虚拟机中加载驱动

                   javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java

                   java -D jabc.drivers = 驱动全名   类名

                   使用系统属性名,加载驱动 -D表示为系统属性赋值

              附:mysql 的Driver全名:com.mysql.jdbc.Driver

                   sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver

2.建立连接    

         conn=DriverManager.getConnection

                   ("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password");

        上面括号中放的是:oracle自协议+@+ip:port /数据库实例名,数据库用户名,用户密码。

         mysql url写法:jdbc:mysql://192.168.254:3306/test

3.获得一个Statement对象

        sta = conn.createStatement();

4.通过Statement执行sql语句

        sta.excuteQuery(sql);//返回一个查询结果集

        sta.executeUpdate(sql);//返回值为 int 型,表示影响记录的条数

        将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。

5.处理结果集

        使用Connection对象获得一个Stagement,Statement中的executeQuery(String  sql)方法可以使用select语句查询,并返回一个结果集 ResultSet 。通过遍历这个结果集,可以获得select语句的查询结果。ResultSet的next()方法会操作一个游标从第一条记录开始读取,直到最后一天记 录。 executeUpdate(String sql)方法用于执行 DDL /DML 语句,比如update,delete等。

         只有select语句才有返回结果集。

         例:Statement sta = con.createStatement(); //创建statement对象

              String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") ";

              sta.executeUpdate(sql); //执行sql语句

              String sql = "select * from test";

              ReslutSet rs = sta.executeQuery(sql);//执行sql语句后有结果集

              //遍历处理结果集

              while(rs.next()){

                   System.out.println(rs.getInt("id"));

                   System.out.println(rs.getString("name"));

              }

6.关闭数据库连接(释放资源)

   调用close()方法:

        rs.close();         

        sta.close();          

        conn.close();

        ResultSet 、Statement 和Connetction是依次依赖的。

        注意:要按先 ResultSet ,再Statement,最后Connetction的顺序关闭资源。因ResultSet和Statement在连接的情况下才能使用,所以在连使用束 后可能还有其他的statement还在连接,所以不能先关闭Connection。
--------------------- 
原文:https://blog.csdn.net/zhangjikuan/article/details/76177434?utm_source=copy 

猜你喜欢

转载自blog.csdn.net/WiuLuS/article/details/83035410