原生java开发连接MySQL数据库

jdbc编程

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 1. MySQL数据库JDBC连接Demo
 2. 项目名称:MybatisDemo2<br/>
 3. 类名称:MySQLJDBCDemo<br/>
 4. 类描述:
 5. 时间 2018年6月25日 下午2:11:57
 6. @author wzw
 7. @version
 */
public class MySQLJDBCDemo {
    public static void main(String[] args) {
        //数据库连接路径
        String url = "jdbc:mysql://localhost:3306/mybatis1?characterEncoding=utf-8";

        //数据库用户名
        String user = "root";

        //数据库密码
        String password = "root";

        //SQL语句
        String sql = "select * from user where user_name = ?";

        //数据库连接
        Connection connection = null;
        //预编译处理
        PreparedStatement ps = null;
        //结果集
        ResultSet rs = null;

        try {
            //通过类加载机制,加载MySQL数据库连接驱动
            Class.forName("com.mysql.jdbc.Driver");
            //连接数据库
            connection = DriverManager.getConnection(url, user, password);
            //对SQL语句进行预编译
            ps = connection.prepareStatement(sql);
            //对SQL语句中的占位符进行设置
            ps.setString(1, "root");
            //执行SQL,获取结果集
            rs = ps.executeQuery();
            System.out.println("Connection: " + connection);
            System.out.println("PreparedStatement: " + ps);
            System.out.println("ResultSet: " + rs);
            /*
             * 若直接使用resultSet会报SQL异常,异常信息为在结果集开始之前 java.sql.SQLException: Before start of result set
             * 此外需要注意,rs.getString(0)会报java.sql.SQLException: Column Index out of range, 0 < 1.这是因为resultSet字段索引从1开始
             * System.out.println("user: " + rs.getString(0) + " " + rs.getString(1) + " " + rs.getString(2));
             */
            //遍历结果集
            while (rs.next()) {
                System.out.println("user: " + rs.getString(0) + " " + rs.getString(2) + " " + rs.getString(3));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

首先,jdbc编程至关重要的一点是,需要MySQL连接jar包,我们通过该jar包,使得我们的java代码可以连接上数据库,从而进行数据查询等操作。
在jdbc编程中三个类很重要,分别是数据库连接的Connection,处理SQL的PreparedStatement,存储结果的ResultSet。当然在jdbc中这三个只是其中的一部分。
我们若要想进行jdbc编程
1. 导入数据库连接jar包
2. 通过类加载机制,加载数据库连接驱动,既像代码中导入数据库连接所需要的类
3. 创建连接,连接数据库需要知道数据库路径,用户名,密码
4. 通过连接对象获取处理SQL的对象
5. 如果SQL语句中存在占位符,需要对占位符设置具体的值,注意,jdbc中索引是从1开始
6. 通过处理SQL的对象执行SQL语句获取结果集
7. 对结果集进行遍历,获取SQL执行后的结果
8. 关闭连接

jdbc编程的缺点

在成熟的数据库开发框架出现之前,一直使用的是这种原生的java语言连接数据库进行开发,而这种开发方式,步骤繁琐复杂,代码篇幅过长,存在各种各样的缺点。
1. 步骤繁琐,代码冗余
2. 各种java原生类,记忆繁琐,jdbc中存在过多的类与方法需要记忆
3. 硬编码,SQL语句需要硬编码,预编译处理中占位符需要硬编码,结果集获取时需要硬编码。ps:这里解释一下什么是硬编码,从代码中可以看出,所谓的硬编码就是需要经常变动的变量,直接嵌入java代码中。既,在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。
4. 数据库连接关闭过于频繁,影响效率,可以通过数据库连接池解决该问题
以上四点是我所能想到的jdbc编程中存在的问题,那么我们如何解决这些问题,框架可以帮我们解决。通过封装将繁琐的步骤简单化,通过配置文件解决硬编码的问题,通过数据库连接池解决数据库频繁连接关闭的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值