JDBC

来源:互联网 发布:java架构师 实战篇 编辑:程序博客网 时间:2024/05/21 06:23

操作数据库的三种操作

数据库连接被用于向数据库服务器发送命令和SQL 语句,在连接建立后,
需要对数据库进行访问,执行sql语句
在java.sql包中有 3个接口分别定义了对数据库的调用的不同方式:

•Statement(接口)

l通过调用Connection 对象的createStatement 方法创建该对象


l该对象用于执行静态的SQL 语句,并且返回执行结果


lStatement 接口中定义了下列方法用于执行SQL 语句:


•int
excuteUpdate(String sql) (针对DDL和DML操作)


•ResultSet
excuteQuery(String sql) (针对DQL操作)


public void createStatement(){String url="jdbc:mysql://localhost:3306/test";Connection conn=null;Statement stmt=null;ResultSet rs=null;try {Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection(url, "root",""); String sql="select * from test"; stmt=conn.createStatement(); rs=stmt.executeQuery(sql);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}


•PrepatedStatement(implements Statment)

Statement的不安全性

PreparedStatement VS  Statement








l可以通过调用Connection对象的preparedStatement()方法获取PreparedStatement对象

lPreparedStatement接口是Statement的子接口,它表示一条预编译过的SQL语句

lPreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示
,调用PreparedStatement对象的setXXX()方法
来设置这些参数.setXXX()方法有两个参数,第一个参数是要设置的SQL 
语句中的参数的索引(1开始),第二个是设置的SQL语句中的参数的值
String sql ="select * from test where id=?";PreparedStatement pstmt=conn.prepareStatement(sql);pstmt.setInt(1,1);



•CallableStatement (implements PrepatedStatment)

l当不直接使用SQL语句,而是调用数据库中的Store Procedure,

要用到CallableStatement(主要针对oracle等大型数据库)



ResultSet

通过调用Statement 对象的excuteQuery()方法创建该对象
ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现
ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet对象的 next()方法移动到下一行
ResultSet接口的常用方法:
boolean next()
getString()......

可滚动的ResultSet(了解)

l要使用可滚动的结果集,必须使用不同于前面所定义的Statement
l//创建一个Statement对象,该对象将生成具有给定类型和并发性的ResultSet对象。

Statement stmt = conn.createStatement(type,concurrency);PreparedStatement stmt = conn.prepareStatement(sql,type,concurrency)



lMysql数据库无效:总是可以前后滚动lOralce数据有用


next()
previous()
first()
last()
absolute()
relative()
beforeFirst()
afterLast()
isFirst()
isLast()
isBeforeFirst()
isAfterLast()



getXxxx方法 Xxxx数据类型


SQL与Java数据类型的对应关系


总结

java.sql.DriverManager用来装载驱动程序,获取数据库连接。
java.sql.Connection完成对某一指定数据库的联接,获取数据库操作对象
java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型。
•Java.sql.PreparedSatement用于执行预编译的sql声明
•Java.sql.CallableStatement用于执行数据库中存储过程的调用
java.sql.ResultSet对于给定声明取得结果的途径



JDBCUtils

package cn.itcast.mysql.util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * mysql数据库服务的数据库jdbc操作的帮助类 * @author Administrator * */public final class JDBCUtils {private static final String URL = "jdbc:mysql://localhost:3306/dbjdbc";private static final String USER = "root";private static final String PASSWORD = "root";static {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/** * 得到连接对象 */public static Connection getConnection() {Connection conn = null;try {conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (SQLException e) {e.printStackTrace();}return conn;}/** * 关闭指定的资源 */public static void closeResource(Connection conn, Statement stmt, ResultSet rs) {if(rs!=null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt!=null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/** * 关闭指定的资源 */private static void closeResource2(Connection conn, Statement stmt, ResultSet rs) {try {if(rs!=null) {rs.close();}} catch (SQLException e) {e.printStackTrace();} finally {try {if(stmt!=null) {stmt.close();}} catch (SQLException e) {e.printStackTrace();} finally {try {if(conn!=null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}}/** * 关闭指定的资源 *  * 必须严重不行 */private static void closeResource3(Connection conn, Statement stmt, ResultSet rs) {if(rs!=null) {//rs=nulltry {rs.close();} catch (SQLException e) {e.printStackTrace();} finally {if(stmt!=null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if(conn!=null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}}}}}




0 0
原创粉丝点击