热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Java中基于mysql驱动包连接MySQL数据库

MySQL驱动包Java程序要连接MySQL数据库,需要使用MySQL驱动包(jar包),当前驱动包的最新版本是ÿ

MySQL驱动包

Java程序要连接MySQL数据库,需要使用MySQL驱动包(jar包),当前驱动包的最新版本是:mysql-connector-java-8.0.21.zip。解压这个压缩包,会看到如下的文件夹结构,其中的mysql-connector-java-8.0.21.jar就是我们需要的MySQL驱动包。把这个jar包复制到Java项目的用于存储库文件的libs文件夹中,再在IDE里导入这个jar包,如此就可以使用jar包里的API了。
在这里插入图片描述


代码示例

mysql-connector在8.0之前和之后的jar包是不同的,在使用时会一定的区别。在进行如下操作前:需保证已安装了MySQL数据库,并打开了MySQL数据服务器(启动服务器:“net start mysql”,停止服务器:“net stop mysql”),其次,还需保证创建了数据库(可通过附录中的mysql.sql数据库脚本来创建数据库,并插入相应的数据)。

1、连接数据库需要四个信息:驱动名、数据库url、用户名和密码,一般被声明为静态常量。

// mysql-connector 8.0版本之前-JDBC驱动名及数据库URL(8.0之前和之后的区别就在于驱动名和URL这两项上)static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; // JDBC驱动名static final String DB_URL = "jdbc:mysql://localhost:3306/auction"; // 数据库URL// mysql-connector 8.0版本之后-JDBC驱动名及数据库URL//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";// 8.0版本之后必须要在数据库URL中添加上服务器时区参数,否则会出错//static final String DB_URL = "jdbc:mysql://localhost:3306/auction?serverTimezone=UTC";//一般情况下,会在数据库URL中添加上如下的参数//final static String url = "jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root"; // 数据库用户名static final String PASS = "123456"; // 用户密码

2、对数据库操作一般分为如下的三个步骤:
a、注册驱动和连接数据库

// 注册JDBC驱动Class.forName(JDBC_DRIVER);// 打开链接System.out.println("连接数据库...");Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);

b、进行增删改查等数据操作

// 执行查询System.out.println(" 实例化Statement对象...");Statement stmt = conn.createStatement();String sql;sql = "SELECT user_id, username, userpass, email FROM auction_user";ResultSet rs = stmt.executeQuery(sql);// 打印从数据库中查询返回的结果集while(rs.next()){// 通过字段检索int user_id = rs.getInt("user_id");String username = rs.getString("username");String userpass = rs.getString("userpass");String email = rs.getString("email");// 打印数据System.out.print("用户ID: " + user_id);System.out.print(", 用户名称: " + username);System.out.print(", 用户密码: " + userpass);System.out.print(", 邮箱: " + email);System.out.print("\n");}

c、按顺序关闭资源

rs.close(); // 结果集stmt.close(); // 语句conn.close(); // 数据库连接

附录

mysql.sql脚本的使用方式:(1)登录进MySQL数据库(在cmd中输入命令“mysql -u username -p”,按回车,待提示输入密码时,再输入用户密码),(2)执行mysql脚本(source ***/mysql.sql)。

脚本文件:mysql.sql

drop database if exists auction;create database auction;use auction;#用户表
create table auction_user(user_id int(11) auto_increment,username varchar(50) not null,userpass varchar(50) not null,email varchar(100) not null,primary key(user_id),unique(username)
);INSERT INTO auction_user (username,userpass,email) VALUES ('tomcat','tomcat','spring_test@163.com');
INSERT INTO auction_user (username,userpass,email) VALUES ('mysql','mysql','spring_test@163.com');#物品种类表
create table kind(kind_id int(11) auto_increment,kind_name varchar(50) not null, kind_desc varchar(255) not null,primary key(kind_id)
);INSERT INTO kind (kind_name,kind_desc) VALUES ('电脑硬件','这里并不是很主流的产品,但价格绝对令你心动');
INSERT INTO kind (kind_name,kind_desc) VALUES ('房产','提供非常稀缺的房源');#物品状态表
create table state(state_id int(11) auto_increment,state_name varchar(10),primary key(state_id)
);INSERT INTO state (state_name) VALUES ('拍卖中');
INSERT INTO state (state_name) VALUES ('拍卖成功');
INSERT INTO state (state_name) VALUES ('流拍');#物品表
create table item(item_id int(11) auto_increment,item_name varchar(255) not null,item_remark varchar(255),item_desc varchar(255),kind_id int(11) not null, addtime date not null,endtime date not null,init_price double not null, max_price double not null, owner_id int(11) not null, winer_id int(11), state_id int(11) not null, primary key(item_id),FOREIGN KEY(kind_id) REFERENCES kind(kind_id), FOREIGN KEY(owner_id) REFERENCES auction_user(user_id),FOREIGN KEY(winer_id) REFERENCES auction_user(user_id),FOREIGN KEY(state_id) REFERENCES state(state_id)
); # 拍卖中的物品
INSERT INTO item ( item_name , item_remark , item_desc, kind_id, addtime , endtime, init_price, max_price, owner_id, winer_id, state_id)VALUES ( '主板', '老式主板', '老主板,还可以用', 1, ADDDATE(CURDATE(), -5), ADDDATE(CURDATE(), 30) , 230, 250, 1, null, 1);
# 流派的物品
INSERT INTO item ( item_name , item_remark , item_desc, kind_id, addtime , endtime, init_price, max_price, owner_id, winer_id, state_id)VALUES ( '显卡', '老式显卡', '老显卡,还可以用', 1, ADDDATE(CURDATE(), -9), ADDDATE(CURDATE(), -2), 210, 210, 2, null, 3);
# 被竞得的物品
INSERT INTO item ( item_name , item_remark , item_desc, kind_id, addtime , endtime, init_price, max_price, owner_id, winer_id, state_id)VALUES ( '老房子', '老式房子', '40年的老房子', 2, ADDDATE(CURDATE(), -9), ADDDATE(CURDATE(), -5), 21000, 25000, 2, 1, 2);#竞标历史表
create table bid(bid_id int(11) auto_increment,user_id int(11) not null,item_id int(11) not null,bid_price double not null,bid_date date not null, primary key(bid_id),unique(item_id , bid_price),FOREIGN KEY(user_id) REFERENCES auction_user(user_id), FOREIGN KEY(item_id) REFERENCES item(item_id)
);INSERT INTO bid ( user_id , item_id , bid_price, bid_date)VALUES ( 2, 1, 250, ADDDATE(CURDATE(), -2));
INSERT INTO bid ( user_id , item_id , bid_price, bid_date)VALUES ( 1, 3, 25000, ADDDATE(CURDATE(), -6));

推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
author-avatar
淇蒴_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有