JDBC的简单使用

获取数据库连接的5种方式
    1.导入Driver接口的驱动实现类import com.mysql.jdbc.Driver,并造Driver接口的实现类对象(面向接口编程)。2.编写连接数据库的参数url,username,password。3.调用对象的connect(url,ps)方法获取连接。


    2.方式2对比方式1,是使用反射来加载驱动实现类,再利用反射造驱动实现类的对象。其他一致。使用反射的话就不用导包,也不会出现第三方的API(也就是那个驱动实现类)。只是填写驱动实现类所在的路径就会自动去加载驱动实现类了。大大提高了程序的可移植性和解耦性,不会过度依赖第三方API的导入。


    3.方式3的话是在方式2的基础上迭代了,加入了驱动管理类DriverManager。使用驱动管理类去管理驱动Driver的实现类,可以直接使用驱动管理类的getConnection()方法来获取连接对象,不再需要直接使用Driver实现类来获取连接对象,但是驱动管理类的底层还是调用Driver.connect方法来获取连接的。


        提示:驱动管理类DriverManager只是帮我们更加方便的去调用驱动实现类的方法。
    4.方式4对比前三种,把数据库参数写入了一个properities的文件中,我们需要使用字节输入流把他读取出来并Properities的集合中。这样可以实现数据和代码的分离。


    5.使用druid德鲁伊数据库连接池来获取连接,思想也是面向接口编程。我们java提高了一个DataSource数据库连接池的接口,不同的数据库连接池厂商提供对应的实现类。druid德鲁伊数据库连接池提供了一个类DataSourceFactory数据库连接池工厂类,里面有一个静态方法createDataSource生产数据库连接池,这个方法的返回值就是数据库连接池,也就是DataSource的实现类了。


        得到数据库连接池后直接调用getConnection(Properities ps)获取连接即可。注意参数的命名和之前四种方式有所不同。
    连接数据库异常。一般是两种情况,一种是参数的名字或者密码错误。因为数据与代码的情况,数据被存进文件properities中,而用IO流读取出来要放在Map集和Properities中,等到获取连接时,按键的名字去获取值的。如果是不是用数据库连接池去获取的话,键分别为user,password,url,drverClass。如果是使用数据库连接池的话键分别为username,password,url,DriverClassName。记得区分开来。
        第二种情况一般是数据库的版本和java要连接数据库jar包版本不对应,一般来说sql8.0.25是对应jar包5.1.45和5.1.7都是没问题的,经本人亲自测试过。

进行数据库的更新数据操作
    1.获取数据库连接
    2.使用Connection.prepareStatement(String sql)预编译sql语句。会返回一个预编译的sql语句对象,方便后续填充参数。
    3使用Prestatement的setObject(int index,Object)。填充预编译sql语句里的参数(?表示参数)。
        提示,预编译的好处就是同样的sql语句只是因为参数不同的话,sql语句只需要编译一次,也就意味着只需要跟数据库交互一次。大大减少跟数据库交互此时,提高执行效率。
    4.执行sql语句。使用预编译sql语句对象PreparedStatement.execute()方法执行。
    关闭连接

进行数据库的查询操作
    1.获取数据库连接
    2.使用Connection.prepareStatement(String sql)预编译sql语句。会返回一个预编译的sql语句对象,方便后续填充参数。
    3.使用Prestatement的setObject(int index,Object)。填充预编译sql语句里的参数(?表示参数)。
    4.执行sql语句。使用预编译sql语句对象PreparedStatement.executeQuery()方法执行,返回一个结果集对象ResultSet。
        结果集ResultSet对象是一个Set集合(采用迭代器遍历集合中的数据)。具体到一行中的每一列数据我们就使用索引来取出来。注意一下,这里的索引值是从1开始的。
            再使用ResultSet.getMetaData()获取结果集的元数据ResultSetMetaData对象。利用这个对象就可以获取这一行中有多少列,每一列的列名是什么。(每一列的列名也是根据索引值获得的)
                获取了每一行有多少列数据后,再用循环根据索引值把每一列数据取出来。然后再利用反射思想,根据每一列的列名去获取对应类的属性出来然后再进行赋值。(反射技术获取属性并给属性赋值的技术)
    数据库表中的数据对应到java中的对象的指导思想
        指导逻辑思想:根据面向对象ORM思想,数据库中一个表对应一个类,一行数据对应一个对象。因为表有很多个,也就是有很多种数据类型,但是针对这些数据的操作都是一样的,所以我们结合泛型和反射来动态根据不同的表去造对应类的对象。大大增加程序的动态性和通用性。
            个人感觉ResultSe集合底层每一个元素存放的都是一个一维数组(也就意味他底层每一行存放的就是一个ArrayList类型的集合),然后再用指针遍历这些一维数组。所以根据迭代器的指针去遍历到具体的某一行,然后再获取这一行中有多少列数据。
    提示:对于聚合函数的查询,JDBC只支持返回聚合函数的结果,不支持分组查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值