zoukankan      html  css  js  c++  java
  • 深入浅出学习Hibernate框架(二):JDBC基础操作

    上篇博客《深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架》简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate。这篇博客将介绍JDBC的基本操作,说起这JDBC,大部分程序员是已经非常熟悉了,为了我的Hibernate学习的连载,所以在这篇要简单介绍一下JDBC的有关操作,因为这是Hibernate实现的基础,没有了JDBC也就没有了Hibernate框架,因为Hibernate框架是对JDBC做的高度封装。这篇博客主要介绍JDBC建立数据库配置连接和JDBC中的相关类和接口以及JDBC各种操作的实现。

    希望读者能够认真的学习学习JDBC,基础的东西才是最重要的,没有基础其它一切都是浮云,当然这篇也是以后要深入学习Hibernate框架的基础和伏笔,希望读者能够好好学习一下。

    先说什么是JDBC,JDBC是由一组用java编写的类和接口的组成。在具体的开发中,JDBC提供了一个标准的API,有了它我们能够用JAVA API来编写数据库应用程序。

    下面来说如何建立和配置连接。数据库连接是JDBC进行查询的先决条件,而且经过了开发的朋友门都知道,现在主流的数据库都提供了本身专用的数据库连接驱动,有了数据库连接驱动给我们带来了不少帮助,但是也给我们带来了许多麻烦,例如版本不兼容等等问题。

    下面以Mysql为例来建立和配置连接:

    1.        加入驱动程序。拷贝Mysql的JDBC驱动到运行程序能够找到的目录

    2.        确保Mysql数据库处于运行状态(前两步是傻瓜式级别的操作在这里就不介绍了)

    3.        编写JDBC程序(在这里给出源代码)

    源代码:

     

    1. import java.sql.Connection;  
    2. import java.sql.DriverManager;  
    3. import java.sql.SQLException;  
    4.    
    5. public classDBUtil {  
    6.    
    7.     /** 
    8.      * 取得Connection 
    9.      * @return 
    10.      */  
    11.     public static Connection getConnection() {  
    12.         
    13.        Connectionconn = null;  
    14.        try {  
    15.             
    16.            Class.forName("com.mysql.jdbc.Driver");  
    17.            Stringurl = "jdbc:mysql://localhost:3306/User";  
    18.            Stringusername = "root";  
    19.            Stringpassword = "123";  
    20.            conn= DriverManager.getConnection(url, username, password);  
    21.        }catch(ClassNotFoundException e) {  
    22.            e.printStackTrace();  
    23.        }catch(SQLException e) {  
    24.            e.printStackTrace();  
    25.        }  
    26.        return conn;  
    27.     }  
    28.      
    29.     public static void main(String []args){  
    30.        System.out.println("测试开始");  
    31.        System.out.println(DBUtil.getConnection());  
    32.        System.out.println("测试结束");  
    33.     }  
    34. }  



    结果截图:

     

    下面介绍一下JDBC接口:

    JDBC接口是指进行数据库操作提供的公共访问方法,使用这些方法可以简化对数据库的操作,JDBC的接口放在了JDK中的java.sql包里。

    截图:

     

    这里面就介绍几个比较重用的也是比较重要的几个接口和一个driverManager类。

    上面一部分都是枯燥的概念和理论,下面来看看JDBC如何利用这些接口和类来实现各种操作的。

    Statement和PreparedStatement:

    Statement接口代表一个数据库的状态,在向数据库发送相应的SQL语句时候都要用这两个接口。而statement是操作没有参数的sql语句,而preparedStatement即可以操作有参数的,也可以操作没有参数的,所以preparedStatement避免了sql注入问题。

    举例:

    Statement源代码:

    1. import java.sql.Connection;  
    2. import java.sql.SQLException;  
    3. import java.sql.Statement;  
    4.   
    5.   
    6. public class StatementTest {  
    7.   
    8.       
    9.     public static void main(String[] args) throws SQLException {  
    10.         String sql="insert into User (name,password,id) values ('1','2','11111')";  
    11.         Connection conn=DBUtil.getConnection();  
    12.         Statement stmt=conn.createStatement();  
    13.         stmt.executeUpdate(sql);  
    14.         System.out.println("执行成功");  
    15.           
    16.     }  
    17.   
    18. }  

    PreparedStatement源代码:

    1. import java.sql.Connection;  
    2. import java.sql.PreparedStatement;  
    3. import java.sql.SQLException;  
    4. import java.sql.Statement;  
    5.   
    6.   
    7. public class PreparedStatementTest {  
    8.   
    9.       
    10.     public static void main(String[] args) throws SQLException {  
    11.         String sql="insert into User (name,password,id) values (?,?,?)";  
    12.         Connection conn=DBUtil.getConnection();  
    13.         PreparedStatement pstmt=conn.prepareStatement(sql);  
    14.         pstmt.setString(1, "1");  
    15.         pstmt.setString(2, "2222");  
    16.         pstmt.setString(3,"3333");  
    17.         pstmt.executeUpdate();  
    18.         System.out.println("执行成功");  
    19.   
    20.     }  
    21.   
    22. }  



    ResultSet

    ResultSet接口是查询结果集接口,它返回的结果集进行处理。

    举例:

    源代码:

    1. import java.sql.Connection;  
    2. import java.sql.PreparedStatement;  
    3. import java.sql.ResultSet;  
    4. import java.sql.SQLException;  
    5.   
    6.   
    7. public class ResultSetTest {  
    8.   
    9.       
    10.     public static void main(String[] args) throws SQLException {  
    11.         String sql="select * from User where id=?";  
    12.         Connection conn=DBUtil.getConnection();  
    13.         PreparedStatement pstmt=conn.prepareStatement(sql);  
    14.         pstmt.setString(1, "11111");  
    15.         ResultSet rs=pstmt.executeQuery();  
    16.         if(rs.next()){  
    17.             System.out.println("name="+rs.getString("name"));  
    18.             System.out.println("password="+rs.getString("password"));  
    19.         }  
    20.     }  
    21.   
    22. }  



    结果:

     

    ResultSetMetaData

    ResultSetMetaData接口可以通过数组形式,遍历数据库的各个字段的属性,对于开发者来说,这个机制意义非常大。

    举例:

     源代码:

    1. import java.sql.Connection;  
    2. import java.sql.ResultSet;  
    3. import java.sql.ResultSetMetaData;  
    4. import java.sql.SQLException;  
    5. import java.sql.Statement;  
    6.   
    7.   
    8. public class ResultSetMetaDataTest {  
    9.   
    10.       
    11.     public static void main(String[] args) throws SQLException {  
    12.         String sql ="select * from User order by id";  
    13.         Connection conn=DBUtil.getConnection();  
    14.         //获得可以前后滚动的类型  
    15.         Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);  
    16.           
    17.         ResultSet rs=stmt.executeQuery(sql);  
    18.         ResultSetMetaData rsm=rs.getMetaData();  
    19.         System.out.println("共获的"+rsm.getColumnCount()+"列信息");  
    20.         for(int i=1;i<rsm.getColumnCount();i++){  
    21.             System.out.println("第"+i+"列的名称为"+rsm.getColumnName(i)+"类型为"+rsm.getColumnTypeName(i));  
    22.               
    23.         }  
    24.   
    25.     }  
    26.   
    27. }  



    结果:

     

    总结:

    这一篇博客对JDBC、JDBC一些重要接口做了简要的分析,主要是为了让读者对JDBC有所了解,对以后学习Hibernate有很大帮助,hibernate的操作最终也是转换为jdbc的操作。所以这篇博客的意义在于后面学习深入的引子。学习JDBC之后,在下一篇博客要介绍java反射机制,因为这个知识也对以后深入学习Hibernate有非常大的帮助。敬请期待!

  • 相关阅读:
    sql server 2016新特性 查询存储(Query Store)的性能影响
    Spring 事务管理详情介绍
    python爬虫之快速对js内容进行破解
    python爬虫的一个常见简单js反爬
    温习pycharm
    宋朝官员分析随堂理解笔记
    K-Means改进模式
    jupyter 饼图
    WebDriver常用的API使用详解
    从浏览器启动开始
  • 原文地址:https://www.cnblogs.com/Coda/p/3669474.html
Copyright © 2011-2022 走看看