jsp学习 jdbc访问数据库

因为我目前在学校有一门课程叫做javaweb,其中涉及到JavaScript中进行数据库访问的测试,经过学习发现与我们之前通过配置数据源结合spring提供的模板以及mybatis提供的方法进行数据库的操作不同的是,java的jdbc相关还是很值得学习的,但是代码耦合度太高,重复性太高,不适合项目开发。


数据库表jsp.user


自建一个jdbc.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.sql.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    int sno;
    String sname;
    String clazz;
    String sql = "select * from jsp.user";
    Class.forName("com.mysql.jdbc.Driver");
    Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp", "root", "123456");
    PreparedStatement preparedStatement = root.prepareStatement(sql);
    System.out.println(prepardStatement);
    ResultSet resultSet = preparedStatement.executeQuery();
    while (resultSet.next()) {
        sno = resultSet.getInt("sno");
        sname = resultSet.getString("sname");
        clazz = resultSet.getString("clazz");
        System.out.println("User{" + "sno=" + sno + ", sname='" + sname + '\'' + ", clazz='" + clazz + '\'' + '}');
    }
    preparedStatement.close();
    root.close();
%>
</body>
</html>

分析一下代码:

jdbc获取数据库连接connection创建SQL会话对象(PreparedStatement与Statement)的三部曲:

1、加载数据库驱动,这里利用反射的原理获取一系列关于Driver的API(注意导入驱动的坐标,如果在pom里导入成功,在外部库里可以看到这个maven依赖项的存在)

 Class.forName("com.mysql.jdbc.Driver");


2、利用DriverManger的getConnection方法获取数据库连接对象root(图片显示的是getConnection方法的源码,需要的三个参数:URL,user,password)


    Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp", "root", "123456");


3、创建sql会话对象preparedStatement(注意这个动态的preparedStatement类它的父类其实是Statement)
    PreparedStatement preparedStatement = root.prepareStatement(sql);

这里的sql语句就是自定义的String字符串了。


总结:

jdbc访问数据库的基本步骤(参考我上面的jdbc.jsp代码):

  1. 加载数据库驱动 Class.forName
  2. 获取数据连接对象 DriverManager.getConnection
  3. 获取sql会话对象root.prepareStatement
  4. 执行sql语句preparedStatement.executeQuery
  5. 处理返回的结果集resultset
  6. 关闭资源

我们使用mybatis访问数据库时的三板斧与jdbc访问数据库的三部曲之间的对比:
 

InputStream resourceAsStream = Resources.getResourceAsStream("config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession session = sqlSessionFactory.openSession();


config配置文件的关键代码:
<properties resource="jdbc.properties"/>
    <typeAliases>
        <typeAlias type="com.hlc.pojo.User" alias="user"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
数据源类型选择池化
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
Class.forName("com.mysql.jdbc.Driver");
    Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp", "root", "123456");
    PreparedStatement preparedStatement = root.prepareStatement(sql);

用连接池与不用连接池到底有什么区别?在我个人看来,每一次加载驱动的方式只能用于少量的数据库连接操作中,如果有很多的数据库访问呢?耦合量惊人,代码量也会增加很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestSpringH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值