首页 > 数据库 >数据库-jdbc的使用

数据库-jdbc的使用

时间:2022-10-21 22:47:14浏览次数:80  
标签:jdbc String mysql 数据库 使用 sql catch import

1、execute与executeUpdate异同点
摘自

相同点:execute 与 executeUpdate 都可以执行增加,删除,修改的操作。

package jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
public class TestJDBC {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
            Statement s = c.createStatement();) {
 
            String sqlInsert = "insert into Hero values (null,'盖伦',616,100)";
            String sqlDelete = "delete from Hero where id = 100";
            String sqlUpdate = "update Hero set hp = 300 where id = 100";
 
            // 相同点:都可以执行增加,删除,修改
 
            s.execute(sqlInsert);
            s.execute(sqlDelete);
            s.execute(sqlUpdate);
            s.executeUpdate(sqlInsert);
            s.executeUpdate(sqlDelete);
            s.executeUpdate(sqlUpdate);
 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

不同点

1、execute可以执行查询语句,然后通过 getResultSet,把结果集取出来,executeUpdate不能执行查询语句
2、execute 返回boolean类型,true 表示执行的是查询语句,false表示执行的是insert,delete,update等等, executeUpdate返回的是int类型,表示有多少条数据受到了影响(受影响的行数)

package jdbc;
  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
  
public class TestJDBC {
    public static void main(String[] args) {
  
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
 
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
            Statement s = c.createStatement();) {
  
            // 不同1:execute可以执行查询语句
            // 然后通过getResultSet,把结果集取出来
            String sqlSelect = "select * from hero";
  
            s.execute(sqlSelect);
            ResultSet rs = s.getResultSet();
            while (rs.next()) {
                System.out.println(rs.getInt("id"));
            }
  
            // executeUpdate不能执行查询语句
            // s.executeUpdate(sqlSelect);
  
            // 不同2:
            // execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
            boolean isSelect = s.execute(sqlSelect);
            System.out.println(isSelect);
  
            // executeUpdate返回的是int,表示有多少条数据受到了影响
            String sqlUpdate = "update Hero set hp = 300 where id < 100";
            int number = s.executeUpdate(sqlUpdate);
            System.out.println(number);
  
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  
    }
}

Q&A

基础配置如何定义

    // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
 
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";


注:当MySQL 8.0 以上的驱动时控制台会出现报红提示

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
译文:
正在加载类com.mysql.jdbc.Driver。这是不推荐的。新的驱动程序类是com.mysql.cj.jdbc.driver。驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。

说明:SPI SPI(system packet interface,系统包接口)用于物理层和链路层的链接,广泛地应用在通信接口中。。。 大致就是指接口吧。

serverTimezone

1、概念: serverTimezone连接mysql数据库时指定了时差

2、时区示例:

//北京时间东八区
serverTimezone=GMT%2B8
//上海时间
serverTimezone=Asia/Shanghai
3、重要性
(1)时差会导致插入的date数据发生变化(自动更换时差)
(2)UTC是全球标准时间,北京地区早标准时间8小时
(3)注意使用useSSL=false
————————————————
版权声明:本文为CSDN博主「成长中的码农Mr.Yellow」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

附:DBUtil工具类

package zpb.practice.db;

import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/**
 * @author Peter Cheung
 * @user PerCheung
 * @date 2021/8/22 15:11
 */
public class DBUtil {
    //连接信息
    private static String driverName;
    private static String url;
    private static String username;
    private static String password;

    //注册驱动,使用静态块,只需注册一次
    static {
        //初始化连接信息
        Properties properties = new Properties();
        try {
            properties.load(new FileReader("src/db.properties"));
            driverName = properties.getProperty("driverName");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //1、注册驱动
        try {
            //通过反射,注册驱动
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //jdbc对象
    private Connection connection = null;
    private PreparedStatement preparedStatement = null;
    private ResultSet resultSet = null;

    //获取连接
    public void getConnection() {
        try {
            //2、建立连接
            connection = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //更新操作:增删改
    public int update(String sql, Object[] objs) {
        int i = 0;
        try {
            getConnection();
            //3、创建sql对象
            preparedStatement = connection.prepareStatement(sql);
            for (int j = 0; j < objs.length; j++) {
                preparedStatement.setObject(j + 1, objs[j]);
            }
            //4、执行sql,返回改变的行数
            i = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }

    //查询操作
    public ResultSet select(String sql, Object[] objs) {
        try {
            getConnection();
            //3、创建sql对象
            preparedStatement = connection.prepareStatement(sql);
            for (int j = 0; j < objs.length; j++) {
                preparedStatement.setObject(j + 1, objs[j]);
            }
            //4、执行sql,返回查询到的set集合
            resultSet = preparedStatement.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return resultSet;
    }

    //断开连接
    public void closeConnection() {
        //5、断开连接
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

标签:jdbc,String,mysql,数据库,使用,sql,catch,import
From: https://www.cnblogs.com/polish/p/16814801.html

相关文章

  • Python RabbitMQ pika的安装及work消息模型的使用
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有......
  • SQL Server附加数据库*.mdf文件被拒绝访问解决方法
    方法一:修改权限法1打开要附加的数据库文件所在的文件夹,即扩展名为mdf的文件所在的文件夹,如下图所示:2右键单击mdf文件,选择“属性”,如下图所示:3单击“......
  • 数据库中DDL操作表
    数据库数据库中DDL操作表修改表修改表名:altertable表名renameto新的表名; 添加一列:altertable表名add列名数据类型;修改数据类型:altertable表名modify......
  • ubuntu更新glibc后出现段错误、将libc软链接到别的地方以后,找不到从c库、ls、mv等都不
    问题:在ubuntu18.04中不小心使用软链接将libc.so.6和ld-linux-x86-64.so.2链接到别的地方了。这个时候ls、mv等命令就都不能使用了,因为这些命令依赖libc和ld-linux-x86-64。......
  • 3.Python 注释和函数使用
    注释三总:单行注释直接#+内容多行注释三个单引号括起来的内容指定编码注释可以指定文件的中文编码例:#作者:咸瑜#代码时间:2022/10/1715:57''''多行注......
  • 了解 Flutter 开发者们的 IDE 使用情况
    作者/JaYoungLee,UXResearcheratGoogleGoogle的Flutter团队负责构建和维护AndroidStudio(基于IntelliJ-IDEA)和VisualStudioCode(VSCode)的支持。......
  • MyBatis基础使用五
    MyBatis基础使用五MyBatis缓存(了解即可,现在主流的缓存通过redis)MyBatis的一级缓存一级缓存是SqlSession级别的,通过同一个SqlSession查阅的数据会被缓存,下次查阅相同的数......
  • 使用vscode创建我的第一个python程序
    软件配置:首先打开vscode,点击红色方框按钮:  在搜索栏输入【python】,并下载python插件:   如果觉得软件是英文不好理解可以下一个中文插件:   创建 第......
  • robotframework自动化测试框架实战教程:创建及使用监听器(listener)接口
    RobotFramework提供了一个监听器(listener)接口可以用来接收测试执行过程中的通知. 监听器通过在命令行中设置选项 --listener 来启用,和导入测试库类似,你也可以指定......
  • sar与ksar使用显示监控数据
    一、Ksar:1)下载ksar地址:https://github.com/vlsi/ksar/releases/tag/v5.2.4-snapshot.10-gf0680722)启动:java-jar ksar-5.2.4-b396_gf0680721-SNAPSHOT-all.jar注意,如......