上篇博客《深入浅出学习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程序(在这里给出源代码)

源代码:

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

结果截图:

下面介绍一下JDBC接口:

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

截图:

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

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

Statement和PreparedStatement:

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

举例:

Statement源代码:

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

PreparedStatement源代码:

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

ResultSet

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

举例:

源代码:

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

结果:

ResultSetMetaData

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

举例:

源代码:

[java] view plaincopyprint?
  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. public class ResultSetMetaDataTest {
  7. public static void main(String[] args) throws SQLException {
  8. String sql ="select * from User order by id";
  9. Connection conn=DBUtil.getConnection();
  10. //获得可以前后滚动的类型
  11. Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
  12. ResultSet rs=stmt.executeQuery(sql);
  13. ResultSetMetaData rsm=rs.getMetaData();
  14. System.out.println("共获的"+rsm.getColumnCount()+"列信息");
  15. for(int i=1;i<rsm.getColumnCount();i++){
  16. System.out.println("第"+i+"列的名称为"+rsm.getColumnName(i)+"类型为"+rsm.getColumnTypeName(i));
  17. }
  18. }
  19. }

结果:

总结:

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

转载于:https://www.cnblogs.com/Coda/p/3669474.html

深入浅出学习Hibernate框架(二):JDBC基础操作相关推荐

  1. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简单介绍hibernate框架,之后简单说一下hibernate的目录结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hibern ...

  2. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

  3. 深度学习(7)TensorFlow基础操作三: 索引与切片

    深度学习(7)TensorFlow基础操作三: 索引与切片 一. 基础索引 1. Basic indexing 2. Numpy-style indexing 3. start : end 4. 切片 ...

  4. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  5. pwn学习总结(二) —— 基础知识(持续更新)

    pwn学习总结(二) -- 基础知识(持续更新) Canary PLT表&GOT表 格式化字符串漏洞 GCC编译参数 ASLR 危险函数 输入流 syscall条件 shellcode 其它 ...

  6. 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战

    深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...

  7. 深度学习(10)TensorFlow基础操作六: 数学运算

    深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...

  8. 深度学习(9)TensorFlow基础操作五: Broadcasting

    深度学习(9)TensorFlow基础操作五: Broadcasting 1. 操作思想 2. 具体例子 3. 理解 (1) How to understand? (2) Why Broadcasti ...

  9. 深度学习(8)TensorFlow基础操作四: 维度变换

    深度学习(8)TensorFlow基础操作四: 维度变换 1. View 2. 示例 3. Reshape操作可能会导致潜在的bug 4. tf.transpose 5. Squeeze VS Exp ...

最新文章

  1. 探索Flutter_Image显示Webp逻辑
  2. Mule学习笔记(二)
  3. android签名文件查看工具,ionic 发布android,并查看签名文件。
  4. mysql 流量带宽_流量与带宽
  5. Python学习 Day7 Python3 函数
  6. 秋招准备之——计算机操作系统
  7. 选择正确的C/C++ runtime library
  8. 【数据库】SQL中的rollup() 函数的作用?
  9. 大数据第一季--Hadoop(day10)-徐培成-专题视频课程
  10. 迷宫算法总结(最短路径)
  11. Java Spring 框架详解
  12. 【转】本科生如何发表论文
  13. 接口地址没错但是报404
  14. Android 实现电话拨号界面带按键声demo
  15. 苹果se2_太快了!苹果已面向iPhone SE 2用户推送iOS 13.4.1
  16. 远程监控系统中关于TP-Link路由器的设置方法
  17. 基于matlab 宗晓萍,宗晓萍 - 河北大学 - 电子信息工程学院
  18. MATLAB矩阵基本运算的实现(一)
  19. tomcat官网如何下载低版本的tomcat
  20. XiaoMi-Ruby-15.6-UMA-only黑苹果efi引导文件

热门文章

  1. java保留两位小数 四种方式
  2. TCP三次握手建立连接和四次挥手关闭连接
  3. 2018全球100个最有价值的科技品牌榜:阿里当选中国科技品牌NO.1
  4. CCN(content centric networking)介绍
  5. 世界互联网大会:华三发安全平台天机
  6. 线程池的拒绝策略(重要)
  7. Fix Elementary Boot Screen (plymouth) After Installing Nvidia Drivers
  8. Express - NodeJS web开发框架
  9. silverlight经典案例
  10. Avast I Love You