JAVA中JDBC连接Mysql数据库简单测试

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、引用库

  maven库:mysql:mysql-connector-java:6.0.6

二、SDK环境

  JAVA JDK10

三、测试代码

  

复制代码
package com.mysql.mysqlconnector;

import java.sql.*;

public class DbMain {
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println("Data base connection test:");
        Connection connection;
        var driver = "com.mysql.cj.jdbc.Driver";
        var url = "jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai"; //注意,新版要求必须加上serverTimezone
        var user = "root";
        var password = "password";
        try {
            Class.forName(driver);
            var conn = DriverManager.getConnection(url, user, password);
            if (!conn.isClosed())
                System.out.println(String.format("conection to %s successfully.", url));
            //statement   执行不能使用参数的SQL
            Statement statement = conn.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM student WHERE  RowId<999 ");
            ResultSetMetaData md = resultSet.getMetaData();
            var columnCount = md.getColumnCount();
            for (var i = 1; i <= columnCount; i++) {//注意起始数字
                System.out.println("---------------------");
                System.out.print(md.getColumnClassName(i) + "\t"); //java.lang.String
                System.out.print(md.getColumnDisplaySize(i) + "\t"); //255
                System.out.print(md.getColumnName(i) + "\t"); //name
                System.out.print(md.getColumnType(i) + "\t"); //12
                System.out.print(md.getColumnTypeName(i) + "\t"); //VARCHAR
                System.out.println(md.getColumnClassName(i) + "\t"); //java.lang.String
            }
            while (resultSet.next()) {
                for (var i = 1; i <= columnCount; i++) {
                    System.out.print(resultSet.getObject(i));
                    System.out.print("\t");
                }
                System.out.println();
            }
            statement.close();
            // prepareStatement
            var prepareStatement = conn.prepareStatement("SELECT * FROM student WHERE RowId<?");
            prepareStatement.setInt(1, 999);//注意这里,JDBC中的ColumnIndex是从1开始的。
            ResultSet results = prepareStatement.executeQuery();
            while (results.next()) {
                var rowId = results.getInt(1); //注意这里,JDBC中的ColumnIndex是从1开始的。
                var name = results.getString(2);
                var age = results.getInt(3);
                System.out.println(rowId + "\t" + name + "\t" + age);
            }
            prepareStatement.close();
            // insert
            var insertPrepareStatement = conn.prepareStatement("INSERT  INTO student(name,age) VALUES (?,?)", Statement.RETURN_GENERATED_KEYS);
            insertPrepareStatement.setString(1, "Sindrol");
            insertPrepareStatement.setInt(2, 28);

            if (insertPrepareStatement.executeUpdate() > 0) {
                ResultSet gk = insertPrepareStatement.getGeneratedKeys();
                if (gk.next())
                    System.out.println("Insert into success. primary key RowId =" + gk.getInt("GENERATED_KEY"));
            }
            insertPrepareStatement.close();

            //batch commit.
            conn.setAutoCommit(false);//先停止自动提交。
            var batchPrepareStatement = conn.prepareStatement("INSERT INTO student(name,age) VALUES (?,?)", Statement.RETURN_GENERATED_KEYS);
            for (int i = 0; i < 5; i++) {
                batchPrepareStatement.setString(1, "Lingling_" + i);
                batchPrepareStatement.setInt(2, (20 + i));
                batchPrepareStatement.addBatch();
            }
            try {
                var intArrs = batchPrepareStatement.executeBatch();
                for (var eff : intArrs)
                    System.out.println("eff:" + eff);
                conn.commit();
batchPrepareStatement.clearBatch();//提交后,清空Batch。 var keys
= batchPrepareStatement.getGeneratedKeys(); while (keys.next()) { int rowId = keys.getInt("GENERATED_KEY"); System.out.println("rowid:" + rowId); } } catch (Exception ex) { System.out.println("commit failed and will rollback:" + ex.getMessage()); conn.rollback(); }finally { batchPrepareStatement.close(); } if (!conn.isClosed()) conn.close(); } catch (Exception ex) { System.out.println("SQL操作异常:" + ex.getMessage()); } } }
复制代码

 

四、运行效果

复制代码
"C:\Program Files\Java\jdk-10\bin\java" -javaagent:D:\Applicaton\DevTools\JetBrains\IntelliJIdea\lib\idea_rt.jar=33464:D:\Applicaton\DevTools\JetBrains\IntelliJIdea\bin -Dfile.encoding=UTF-8 -classpath D:\Project\JavaProject\JavaDemo\out\production\JavaDemo;C:\Users\yungoal\.m2\repository\com\alibaba\fastjson\1.2.16\fastjson-1.2.16.jar;C:\Users\yungoal\.m2\repository\mysql\mysql-connector-java\6.0.6\mysql-connector-java-6.0.6.jar com.mysql.mysqlconnector.DbMain
Data base connection test:
conection to jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai successfully.
---------------------
java.lang.Integer    11    rowid    4    INT    java.lang.Integer    
---------------------
java.lang.String    255    name    12    VARCHAR    java.lang.String    
---------------------
java.lang.Integer    11    age    4    INT    java.lang.Integer    
1    songxingzhu    27    
2    wanghaixing    28    
3    Sindrol    28    
4    Sindrol    28    
5    Sindrol    28    
6    Sindrol    28    
7    Sindrol    28    
8    Sindrol    28    
9    Lingling_0    20    
10    Lingling_1    21    
11    Lingling_2    22    
12    Lingling_3    23    
13    Lingling_4    24    
1    songxingzhu    27
2    wanghaixing    28
3    Sindrol    28
4    Sindrol    28
5    Sindrol    28
6    Sindrol    28
7    Sindrol    28
8    Sindrol    28
9    Lingling_0    20
10    Lingling_1    21
11    Lingling_2    22
12    Lingling_3    23
13    Lingling_4    24
Insert into success. primary key RowId =14
eff:1
eff:1
eff:1
eff:1
eff:1
rowid:15
rowid:16
rowid:17
rowid:18
rowid:19

Process finished with exit code 0
复制代码

 

  

宋兴柱(Sindrol):转载内容,请标明出处,谢谢!

本文转自 宋兴柱 博客园博客,原文链接: http://www.cnblogs.com/songxingzhu/p/8656669.html   ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
测试技术 API Android开发
《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)
【7月更文挑战第15天】这是关于自动化测试框架中Selenium API二次封装的教程总结。教程中介绍了如何设计一个支持不同浏览器测试的页面基类(BasePage),该基类包含了对Selenium方法的二次封装,如元素的输入、点击、清除等常用操作,以减少重复代码。此外,页面基类还提供了获取页面标题和URL的方法。
27 2
|
9天前
|
关系型数据库 MySQL Java
|
11天前
|
Web App开发 XML Java
《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
【7月更文挑战第14天】这篇教程介绍了如何使用Java和Selenium构建一个支持跨浏览器测试的自动化测试框架。设计的核心是通过读取配置文件来切换不同浏览器执行测试用例。配置文件中定义了浏览器类型(如Firefox、Chrome)和测试服务器的URL。代码包括一个`BrowserEngine`类,它初始化配置数据,根据配置启动指定的浏览器,并提供关闭浏览器的方法。测试脚本`TestLaunchBrowser`使用`BrowserEngine`来启动浏览器并执行测试。整个框架允许在不同浏览器上运行相同的测试,以确保兼容性和一致性。
25 3
|
13天前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
49 5
|
16天前
|
设计模式 测试技术 Python
《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
【7月更文挑战第10天】Page Object Model (POM)是Selenium自动化测试中的设计模式,用于提高代码的可读性和维护性。POM将每个页面表示为一个类,封装元素定位和交互操作,使得测试脚本与页面元素分离。当页面元素改变时,只需更新对应页面类,减少了脚本的重复工作和维护复杂度,有利于团队协作。POM通过创建页面对象,管理页面元素集合,将业务逻辑与元素定位解耦合,增强了代码的复用性。示例展示了不使用POM时,脚本直接混杂了元素定位和业务逻辑,而POM则能解决这一问题。
32 6
|
13天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
【7月更文挑战第12天】在本文中,作者宏哥介绍了如何在不使用PageFactory的情况下,用Java和Selenium实现Page Object Model (POM)。文章通过一个百度首页登录的实战例子来说明。首先,创建了一个名为`BaiduHomePage1`的页面对象类,其中包含了页面元素的定位和相关操作方法。接着,创建了测试类`TestWithPOM1`,在测试类中初始化WebDriver,设置驱动路径,最大化窗口,并调用页面对象类的方法进行登录操作。这样,测试脚本保持简洁,遵循了POM模式的高可读性和可维护性原则。
17 2
|
16天前
|
IDE Java 测试技术
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
Java面试题:什么是Java中的单元测试以及如何编写单元测试?
21 1
|
16天前
|
Java 关系型数据库 MySQL
班级通讯录管理系统(Java+MySQL)
构建了一个Java Swing应用,搭配MySQL,实现班级通讯录管理。系统具备管理员登录、班级与学生信息的增删改查功能,每个班级窗口独立且自适应布局。利用GBK编码处理中文,JDBC连接数据库,优化窗口复用和代码结构,数据变更实时同步。示例截图展示详细界面。
班级通讯录管理系统(Java+MySQL)
|
2天前
|
网络协议 Java
如何在Java中使用Socket编程实现TCP连接?
在Java中,通过Socket编程实现TCP连接非常常见。以下演示了基本的TCP通信流程,可根据具体需求进行扩展。
|
14天前
|
设计模式 Java 测试技术
《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
【7月更文挑战第11天】页面对象模型(POM)通过Page Factory在Java Selenium测试中被应用,简化了代码维护。在POM中,每个网页对应一个Page Class,其中包含页面元素和相关操作。对比之下,非POM实现直接在测试脚本中处理元素定位和交互,代码可读性和可维护性较低。
14 0