• JAVA 连接 MySql


    // 文件路径 D:ApacheServerweb_javaHelloWorldsrccom	estTestMysql.java
    package com.test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    public class TestMysql {
    
        public void testfun() {
            
            // 需要下载 MySQL 驱动 jar 包,下载地址 https://mvnrepository.com/artifact/mysql/mysql-connector-java,这里用到的是 mysql-connector-java-8.0.17.jar,下载的 jar 包 要放在 Tomcat 安装目录下的 lib 文件夹内,这里路径是 D:ApacheServerapache-tomcatlibmysql-connector-java-8.0.17.jar
            // 连接 MySQL 需要 MySQL 的时区和 java 一致(MySQL 默认 UTC 时区),这里本地是北京时区。修改  MySQL 配置文件 my.ini 在 [mysqld] 项下添加一行 default-time-zone = '+8:00' 重启 MySQL 即可。如果不能修改MySQL配置文件,则将如下 jdbc:mysql://localhost:3306/testdb 改为 jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC 亦可
            try{
                // 注册 JDBC 驱动器
                // 如果下载的 MySQL jar 包是 5 系列版本,则需要用 com.mysql.jdbc.Driver 注册驱动,而且必须写
                //Class.forName("com.mysql.jdbc.Driver");
                // MySQL jar包 6 以上版本用 com.mysql.cj.jdbc.Driver 注册,或者不写也可,这里没有写,已注释掉
                //Class.forName("com.mysql.cj.jdbc.Driver");
                // 打开一个连接
                Connection conn = null;
                // localhost 为数据库连接地址,3306 端口号,testDB 为数据库名称
                String db_host  = "jdbc:mysql://localhost:3306/testdb";
                // 用户名
                String user     = "root";
                // 密码
                String password = "123456";
                conn = DriverManager.getConnection(db_host,user,password);
                
                // ==================================================== Statement 类处理
                // Statement 对象执行查询 SQL 语句
                Statement statement = conn.createStatement();
                String sql_sel      = "SELECT id, name, age FROM test_table";
                ResultSet result    = statement.executeQuery(sql_sel);
                //遍历结果集
                int i = 1;
                while(result.next()){
                    int id      = result.getInt("id");
                    String name = result.getString("name");
                    int age     = result.getInt("age");
                    System.out.println("第 " + i + "行 id : " + id + " name : " + name + " age : " + age);
                    i++;
                }
                // ==================================================== PreparedStatement 类处理
                // PreparedStatement 执行插入语句效果更好,原因:1可以写动态参数化的查询,2PreparedStatement比 Statement 更快,3PreparedStatement可以防止SQL注入式攻击
                // preparedStatement对象的 executeUpdate() 方法可执行 insert,update,delete 语句以及 SQL DDL(如建表,改表,删除表等), executeQuery() 方法执行select语句,execute()执行所有语句,效率也最慢
                // ============================ executeUpdate 方法
                //编写预处理 SQL 语句
                String sql_ins= "INSERT INTO `test_table`(id, name, age) VALUES(?, ?, ?)";
                PreparedStatement preparedStatement = conn.prepareStatement(sql_ins);
                preparedStatement.setInt(1, 3); //插入表数据的 id
                preparedStatement.setString(2, "testName"); // 名称
                preparedStatement.setInt(3, 40); // 年龄
                // 返回值是一个整数,指示受影响的行数(即更新计数)建表,删表等不操作行的语句总返回 0。
                int updateCount = preparedStatement.executeUpdate();
                System.out.println("插入结果 " + updateCount);
                // ============================ executeQuery 方法
                // 执行 select 语句
                preparedStatement = conn.prepareStatement(sql_sel);
                // 获取查询结果,result 遍历查询结果与之前 Statement 类方式一致
                result = preparedStatement.executeQuery();
                // ============================ execute 方法
                preparedStatement = conn.prepareStatement(sql_sel);
                // execute 可用于执行任何SQL语,返回一个 boolean 值,如果执行后第一个结果(有可能返回的是多个结果集合)是 ResultSet(即查询语句结果),则返回 true,否则返回 false。
                boolean isResult = preparedStatement.execute();
                // 如果 execute() 执行的 sql 语句能返回多个结果集合时,PreparedStatement 对象获取下个 getResultSet() 或者 getUpdateCount() 前要先执行 getMoreResults() 使指针下移,然后再执行 getResultSet() 或 getUpdateCount() 获取当前指针指向结果
                //preparedStatement.getMoreResults(); // 多个结果集时,获取下一个结果时才执行,如在 while 循环语句里用,获取第一个结果时不需要执行此语句
                if(isResult) {
                    // 如果结果集当前指针指向的返回结果是个 select 查询结果,用 getResultSet 获取,如果执行的是更新语句,则返回的是更新计数,这时就要用 getUpdateCount来获取
                    result = preparedStatement.getResultSet();
                    // ...
                }else {
                    //当某个过程返回两个更新计数,则首先调用方法getUpdateCount()
                    updateCount = preparedStatement.getUpdateCount();
                    System.out.println("插入结果 " + updateCount);
                }
                // 完成后关闭
                preparedStatement.close();
                result.close();
                statement.close();
                conn.close();
            }catch(SQLException sqlException) {
                // 处理 JDBC 错误
                sqlException.printStackTrace();
            }catch(Exception exception) {
                // 处理 Class.forName 错误
                exception.printStackTrace();
            }
        }
    }
  • 相关阅读:
    Azure Messaging-ServiceBus Messaging消息队列技术系列6-消息回执
    Azure Messaging-ServiceBus Messaging消息队列技术系列7-消息事务
    Azure Messaging
    消息队列技术之基本概念
    Azure IoT 技术研究系列1
    Azure IoT 技术研究系列3
    Azure IoT 技术研究系列2
    Azure IoT 技术研究系列4
    memset()
    C++ GetComputerName()
  • 原文地址:https://www.cnblogs.com/dreamhome/p/11486670.html
Copyright © 2020-2023  润新知