前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.1Java使用JDBC原生方式连接MySql数据库

1.1Java使用JDBC原生方式连接MySql数据库

作者头像
用户7886150
修改2020-12-02 14:27:03
1.3K0
修改2020-12-02 14:27:03
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Java数据库连接JDBC驱动程序

前言:今天有朋友问我原生的java连接数据库,因为框架的使用,如果基础不牢固的人,是很容易遗忘原生的连接方式。今天正好趁此做一下回顾: 

   这里只考虑原生方式,框架就不在这里细说。   一、先大体搞清楚连接时,常用元素都是什么作用:   在MySQL的官方文档中,这样解释说到: 

 java.sql.Driver 它在MySQL Connector / J 中实现的类的名称 是 com.mysql.jdbc.Driver,也就是驱动程序。你可以把它理解为发动机,没了它,其他都没扯。  URL 有了发动机之后,你要开始利用它的力量,也就是为它指明前进的方向,而URL就是它的方向。 值得一提的是,目前连接URL的通用格式是这样的:  

    protocol//[hosts][/database][?properties]

    protocol:一种连接协议,约定的规则。

    hosts:主机名,通常后跟端口号,例如当前主机默认就是localhost:3306,当然也可以多主机连接,这里暂时不表。

    database:数据库嘛

其实应用测试时也就是这样的: 

    jdbc:mysql://localhost:3306/test

username 数据库连接的用户名 passowrd 连接密码Connection 与数据库建立连接关系,通常为 DriverManager.getConnection(url, username, password)。这里可以很明显的感觉出来,每个元素所产生的作用。Statement / PreparedStatement ,需要特别注意的是,我们提倡使用后者,也就是预编译语句。 PreparedStatement好处: 简化Statement中的操作 提高执行语句的性能 可读性和可维护性更好 在代码示例中,语法会详细体现。有了PreparedStatement语句之后,我们可以采用以下语句进行执行: executeQuery(String) 查询 executeUpdate(String SQL) 更新数据 execute(String SQL) 如果你不知道是查询还是修改,可以使用这个语句 

二、示例代码及注释 准备: 首先要导入mysql-connector-java 的jar包 其次,在数据库中准备如下格式的表:  之后写基本的连接代码 为了实现代码的重用,我对两个基本方法添加和查询进行封装: 这是接口:(User类可自行写入) 

public interface UserDao {

    public void add(User user);

    public User findByUsername(String username);

}

下面是实现类: 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import cn.bang.user.domain.User;

public class JdbcUserDao implements UserDao {

    @Override

    public void add(User form) {

        String driverClassName = "com.mysql.jdbc.Driver";    //启动驱动

        String url = "jdbc:mysql://localhost:3306/test";    //设置连接路径

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

        String password = "123";    //数据库连接密码

        Connection con = null;        //连接

        PreparedStatement pstmt = null;    //使用预编译语句

        ResultSet rs = null;    //获取的结果集

        try {

            Class.forName(driverClassName); //执行驱动

            con = DriverManager.getConnection(url, username, password); //获取连接

            String sql = "INSERT INTO USER VALUES(?,?,?,?)"; //设置的预编译语句格式

            pstmt = con.prepareStatement(sql);

            pstmt.setString(1, form.getUsername());

            pstmt.setString(2, form.getPassword());

            pstmt.setInt(3, form.getAge());

            pstmt.setString(4, form.getGender());

            pstmt.executeUpdate();

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //关闭资源,倒关

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必须要关

            } catch (Exception e) {

            }

        }

    }

    @Override

    public User findByUsername(String username) {

        String driverClassName = "com.mysql.jdbc.Driver";

        String url = "jdbc:mysql://localhost:3306/test";

        String mysqlusername = "root";

        String password = "123";

        Connection con = null;

        PreparedStatement pstmt = null;

        ResultSet rs = null;

        try {

            Class.forName(driverClassName);

            con = DriverManager.getConnection(url, mysqlusername, password);

            String sql = "SELECT * FROM USER WHERE username=?";

            pstmt = con.prepareStatement(sql);

            pstmt.setNString(1, username);

            rs = pstmt.executeQuery();

            if(rs == null) {

                return null;

            }

            if(rs.next()) {

            User user = new User();

            user.setUsername(rs.getString("username"));

            user.setPassword(rs.getString("password"));

            user.setAge(rs.getInt("age"));

            user.setGender(rs.getString("gender"));

            return user;

        } else {

            return null;

        }

        } catch (Exception e) {

            throw new RuntimeException(e);

        }finally {

            //关闭资源,倒关

            try {

            if(rs != null) rs.close();

            if(pstmt != null) pstmt.close();

            if(con != null) con.close();  //必须要关

            } catch (Exception e) {

            }

        }

    }

}

开始进行测试   

这时候我们去数据库中查看:    

其中验证码我简单使用的一个类引入的。 

资料引导: MySQL官方文档

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档