首页 > 数据库 >MySql - 基础学习 - JDBC

MySql - 基础学习 - JDBC

时间:2022-11-11 16:25:09浏览次数:37  
标签:JDBC String sql resultSet st 学习 MySql null conn

一.为什么要学习JDBC

SUM公司为了简化开发人员的操作(对数据库的统一),提供了一个规范(Java操作数据库的规范),俗称:JDBC

这些规范的实现是由厂商们去做~

对于开发人员来说,我们只需要掌握JDBC即可。

我们如果要使用JDBC,还需要导入一个数据库驱动包(我选择maven导入):

      <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

 编写第一JDBC程序

1.创建一个数据库测试表:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `NAME` varchar(40) DEFAULT NULL,
  `PASSWORD` varchar(40) DEFAULT NULL,
  `email` varchar(60) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert  into `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values 
(1,'zhangsan','123456','[email protected]','1980-12-04'),
(2,'lisi','123456','[email protected]','1981-12-04'),
(3,'wangwu','123456','[email protected]','1979-12-04');

 

2.导入数据库驱动:

这里我使用maven自动导入

3.在Java中代码实现

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.加载驱动
        Class.forName("com.mysql.jdbc.Driver");   // 固定写法 ,加载驱动用
        // 2.用户信息和url :useUnicode=true&characterEncoding=utf8&useSSL=true
        String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";
        String username="root";
        String password="123456";

        //3.创建连接,创建数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);
        //4.执行sql的对象
        Statement statement = connection.createStatement();
        //5.使用sql对象去执行 SQL  可能存在返回,需要输出
        String sql="SELECT  * FROM `users`";
        ResultSet resultSet = statement.executeQuery(sql);// 把查询sql命令的数据内容全部放到了 resultSet 中,返回了一个结果集
        while (resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("name="+resultSet.getObject("NAME"));
            System.out.println("password="+resultSet.getObject("PASSWORD"));
            System.out.println("email="+resultSet.getObject("email"));
            System.out.println("birthday="+resultSet.getObject("birthday"));
        }
        //6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }

Java实现步骤:

  1. 加载驱动
  2. 连接数据库  DriverManger
  3. 获得执行的sql对象,statement(不安全的)
  4. 获得返回的结果集
  5. 释放链接

二。JDBC对象的解释

Driver:

Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用

URL:

String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";

jdbc:mysql://主机地址:端口号(3306)/数据库名?参数1&参数2&参数3

jdbc:oracle:thin:@localhost:1521:sid

DriverManager:

Connection connection = DriverManager.getConnection(url, username, password);

  • connection  代表数据库
  • 数据库设置的自动提交
  • 事务提交
  • 事务回滚
  1. connection.rollback()事务回滚
  2. connection.xommit()事务提交
  3. connection.setAutoCommit()  自动提交

statement:执行类  -----Preparestatement:也可以执行sql对象

执行sql的对象

        statement.executeQuery();//查询操作的专用语句
        statement.execute();     //可以执行所有sql,但是非常慢,因为它有个判断的过程
        statement.executeUpdate();//跟新,插入,删除记录都是它,返回一个受影响的行数

ResulSet  :查询语句产生的结果集(statement.executeQuery()),封装了所有的查询结果

        //获得返回的数据类型
        resultSet.getObject();//不知道返回类型的时候用最高级的
        resultSet.getInt();   //返回值为int
        resultSet.getString();//返回值为字符串
        resultSet.getFloat(); //返回值为单精度浮点数

 

        resultSet.beforeFirst();  //  指针移动到最前面
        resultSet.afterLast();   //指针移动到最后面
        resultSet.next();       //指针移动到下一个数据
        resultSet.absolute(row);//移动到指定行 

释放资源必须做;很占用资源

resultSet.close();

statement.close();   

connection.close();

三.statement对象详解

executeUpdate:插入数据(insert)

  public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        try {
            conn=JdbcUtils.getConnection();  //获取数据库链接
            st=conn.createStatement();// 获得SQL的执行对象
            String sql="insert into `users`(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(6,'maming','1234567','[email protected]','2022-11-04')";
            int i =st.executeUpdate(sql);
            if(i>0)
            {
                System.out.println("插入成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    }

executeUpdate:删除数据(delete)

    public static void main(String[] args) {
        Connection conn =null;
        Statement tr=null;
        ResultSet rs=null;
        try {
            conn=JdbcUtils.getConnection();
            tr=conn.createStatement();
            String sql="delete from `users` where id <=6 and id>=4";
            int i=tr.executeUpdate(sql);
            if(i>0){
                System.out.println("删除成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,tr,rs);
        }
    }

executeUpdate:修改数据(update)

    public static void main(String[] args) {
        Connection conn=null;
        Statement st =null;
        ResultSet rs =null;
        try {
            conn=JdbcUtils.getConnection();
            st=conn.createStatement();
            String sql="update `users` set `NAME`='maming' where id=1";
            int i =st.executeUpdate(sql);
            if(i>0){
                System.out.println("更改成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    } 

executeQuery:查询数据(select)

    public static void main(String[] args) {
        Connection conn=null;
        Statement st =null;
        ResultSet rs =null;
        try {
            conn= JdbcUtils.getConnection();
            st=conn.createStatement();
            String sql="select * from `users` WHERE  id=1";
             rs = st.executeQuery(sql);
            while (rs.next()){
                System.out.println("name="+rs.getString("NAME"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    } 

提取工具类

public class JdbcUtils {
    public static String driver =null;
    private static String url =null;
    private static String username =null;
    private static String password =null;
    static {
        try{
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);
           driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            // 驱动只需要要加载一次
            Class.forName("driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 获取链接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }
    //释放链接
    public static void release(Connection conn, Statement st, ResultSet re){
        if(re!=null){
            try {
                re.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

  

  

 

标签:JDBC,String,sql,resultSet,st,学习,MySql,null,conn
From: https://www.cnblogs.com/5ran2yl/p/16879014.html

相关文章

  • 强化学习代码实战-04时序差分算法(Q-learning)
    On-policy和Off-policy差异,更新量方式不同Q-learning是srasa的改进版,效果要更好更实用,从悬崖问题中看出,Q-learning智能体可以贴着悬崖达到目标点(而saras总是离悬崖最远......
  • MySQL慢查询(中):正确的处理姿势,你get到了吗?
    正文共: 5156字 6图  预计阅读时间: 13分钟上篇回顾继上篇:​​MySQL慢查询(上):你知道为啥会慢么?​​在上一篇内容中,我们一起探索了这些内容:SQL执行过程查询SQL为什么会慢......
  • Multi-task Learning 理论(多任务学习)
    一.多任务学习理论1.1多任务学习的定义如果有\(n\)个任务(传统的深度学习方法旨在使用一种特定模型仅解决一项任务),而这\(n\)个任务或它们的一个子集彼此相关但不完全相......
  • Mysql详解
    Mysql的介绍【1】MySQL是一个轻量级关系型数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。【2】sql语言分类:名......
  • jdbc连接Oracle数据库
    importjava.sql.*;publicclassMain{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");Connectionconnection......
  • 第二周 学习进度汇报
    第二周本周学习进度汇报:理论学习了解学习了Encoder-Decoder架构、Attention模型、Transformer原理;实践学习基于Transformer原理实现德语->英语机器翻译小例子;Transf......
  • JDBCTemplate-快速入门和执行DML语句
    Spring框架对DBC的简单封装。提供了一个DBCTemplate对象简化JDBC的开发步骤:1、导入jar包2、创建jdbcTemplate对象。依赖于数据源Datasource jdbcTemplatetemplate......
  • mac中mysql3306端口被占用
    需求:本地mysql端口连到k8s集群中 报错:Unabletolistenonport3306:Listenersfailedtocreatewiththefollowingerrors:[unabletocreatelistener:Errorl......
  • React框架学习基础篇-HelloReact-01
    一直想掌握一门前端技术,于是想跟着张天宇老师学习,便开始学习React,以此来记录一下我的学习之旅。学习一门新的技术首先是去官网看看,React官网链接是[https://zh-hans.react......
  • MySQL-sql_mode=only_full_group_by解决方式
    报错问题:SQLSyntaxErrorException:Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'selad.id'whichisnotfunctionally......