jdbc连接mysql数据库 - Java数据库基础

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: jdbc连接mysql数据库 - Java数据库基础

最近复习了一下Java的基础,包括封装、继承、多态、IO、多线程、反射等等,但我感觉JDBC是个大块,花了半天时间实践总结了一下,顺带记录一波。主要是模板,在以后编程中大概率会用到,尤其是下学期的《数据库编程》课程。

就记录一下基础的,至于游标、触发器、存储过程以后有机会了再详细写吧。

JDBC

JDBC是Java和数据库之间的一个桥梁。Java代码需要连接数据库,就可以通过JDBC来连接。

首先是应用模板,因为我每次来看博客,都是因为某段代码忘记则么敲了。需要看具体原理实现的请往下拉。

以下所有代码纯手打,我都亲自试过好几遍,复制即可用。


使用前提:

  1. 导入一个jar包,包全名是mysql-connector-java-5.1.22-bin.jar
  2. mysql数据库名称为test,表名为dbtable,账户名为root,密码为123456    当然也可以自行修改
  3. test数据库中,有dbtable表,三个字段:a_id (int),a_name(String),a_password(String)   可自行修改

第1/3步:新建一个 JdbcUtils 类,该类作用只是连接上mysql数据库,仅仅如此。

getConnection()方法用来获取连接,static静态,执行一次即可

1. import java.sql.*;
2. 
3. public class JdbcUtils {
4. 
5. static {
6. try {
7.             Class.forName("com.mysql.jdbc.Driver");
8.         } catch (ClassNotFoundException e) {
9.             e.printStackTrace();
10.         }
11.     }
12. 
13. public static Connection getConnection() throws SQLException {
14. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
15. "root","123456");
16. return conn;
17.     }
18. 
19. public static void close(ResultSet rs, Statement st,Connection conn){
20. if (rs != null){
21. try {
22.                 rs.close();
23.             } catch (SQLException e) {
24.                 e.printStackTrace();
25.             }
26.         }
27. if(st != null){
28. try {
29.                 st.close();
30.             } catch (SQLException e) {
31.                 e.printStackTrace();
32.             }
33.         }
34. if (conn != null){
35. try {
36.                 conn.close();
37.             } catch (SQLException e) {
38.                 e.printStackTrace();
39.             }
40.         }
41.     }
42. }

第2/3步:新建一个 JdbcDao 类,该类是用来对数据库进行增删改查的,在测试函数内可以直接调用insert(),等方法使用。

1. import java.sql.Connection;
2. import java.sql.PreparedStatement;
3. import java.sql.ResultSet;
4. import java.sql.SQLException;
5. 
6. public class JdbcDao {
7. 
8. private JdbcUtils jdbcUtils = new JdbcUtils();
9. private String TableName = "dbtable";
10. 
11. public int insert(User user) throws SQLException {
12. Connection conn = jdbcUtils.getConnection();
13. String sql = "insert into " + TableName +" values(?,?,?)";
14. PreparedStatement ps = conn.prepareStatement(sql); // 预编译
15. 
16. int a_id = user.getId();
17. String a_name = user.getName();
18. String a_password = user.getPassword();
19. 
20.         ps.setInt(1,a_id);
21.         ps.setString(2,a_name);
22.         ps.setString(3,a_password);
23. 
24. int ans = ps.executeUpdate();
25. return ans;
26.     }
27. public int update(String name,String password) throws SQLException {
28. Connection conn = jdbcUtils.getConnection();
29. String sql = "update " + TableName + " set a_password = ? where a_name = ?";
30. PreparedStatement ps = conn.prepareStatement(sql); // 预编译
31. 
32.         ps.setString(1,password);
33.         ps.setString(2,name);
34. 
35. int ans = ps.executeUpdate();
36. return ans;
37.     }
38. public int delete(int id) throws SQLException {
39. Connection conn = jdbcUtils.getConnection();
40. String sql = "delete from "+ TableName +" where a_id = ?";
41. PreparedStatement ps = conn.prepareStatement(sql); // 预编译
42.         ps.setInt(1,id);
43. int ans = ps.executeUpdate();
44. return ans;
45.     }
46. public void findPassword(String name) throws SQLException {
47. Connection conn = jdbcUtils.getConnection();
48. String sql = "select a_password from "+ TableName + " where a_name = ?";
49. PreparedStatement ps = conn.prepareStatement(sql); // 预编译
50.         ps.setString(1,name);
51.         ps.execute();
52. ResultSet rs = ps.executeQuery();
53. while(rs.next()){
54.             System.out.println("密码为  " +  rs.getString("a_password"));
55.         }
56.     }
57. }

第3/3步:新建测试函数 DbMain ,分别对 JdbcDao 的增删改查方法进行测试。

1. import java.sql.SQLException;
2. 
3. public class DbMain {
4. public static void main(String[] args) throws SQLException {
5. JdbcDao jdbcDao = new JdbcDao();
6.         jdbcDao.insert(new User(1,"zwz","123"));
7.         jdbcDao.update("zwz","123456789");
8.         jdbcDao.findPassword("zwz");
9.         jdbcDao.delete(1);
10.     }
11. }

以上是实际编程的时候,经常需要用到的模板。

接着来好好总结一下这几天看的JDBC

第一步:首先最最基础的,就是连接上mysql

1.     Class.forName("com.mysql.jdbc.Driver");
2. String URL = "jdbc:mysql://localhost:3306/test";
3. String USER = "root";
4. String PASS = "123456";
5. Connection conn = DriverManager.getConnection(URL,USER,PASS);

代码第一行 Class.forName()的用途,是利用Java的反射机制,加载mysql的驱动。就好比有了声卡驱动,才有可能有声音;有了打印机驱动,你的打印机才可能正常运行。

第五行 DriverManager.getConnection方法,是用来创建一个对象和mysql数据库(以mysql为例)进行连接,并返回这个Collection对象。是数据库编程中最重要的一个对象,就好比一个信使,客户端与数据库所有交互都是通过connection对象完成的。

第二步:连接mysql成功之后,就是利用sql代码进行一系列操作

这里有两个类供我们选择,一个是Statement,另外一个是PreparedStatement(前者的子类)。他们都是用于向数据库发送SQL语句。但是Statement只能发送静态的SQL语句,比如“select * from admin where name = 'zwz' ”,其中的属性不能修改,而且存在SQL注入等安全性问题,所以我推荐使用PreparedStatement,一者是安全性高,再者是功能强大。

我们先用Statement试一下,Statement 对象 st 获取用于向数据库发送sql语句。

ResultSet 对象 rs 用于接受数据库返回的查询结果。

1. Statement st = conn.createStatement();
2. String sql = "select * from admin";
3. ResultSet rs =  st.executeQuery(sql);

接着,我们可以对查询结果进行输出显示

1. while(rs.next()){
2. String id = rs.getString("a_id");
3. String user = rs.getString("a_name");
4. String passwd = rs.getString("a_password");
5.         System.out.println(id + " " + user + " " + passwd);
6.     }

Statement的最大缺点就是只能静态,而PreparedStatement类可以弥补这个缺陷。PreparedStatement也是一样,是一个缓存中转站,用于向数据库发送SQL语句。

1. String sql = "select * from admin where a_id = ?";
2. int idd = 1;
3. PreparedStatement ps = conn.prepareStatement(sql);//预编译
4.     ps.setInt(1,idd);
5.     ps.executeQuery();
6. ResultSet rs = ps.executeQuery();
7. while(rs.next()){
8. String id = rs.getString("a_id");
9. String name = rs.getString("a_name");
10. String passwd = rs.getString("a_password");
11.         System.out.println(id + " " + name + " " + passwd);
12.     }

以上代码,可以实现where字句对查询结果的筛选。一个很明显的语法格式,就是预编译

其中SQL语句有若干个问号,代表某个值我等下要放进去,等PreparedStatement预编译完成之后,再通过set方法插入刚刚缺少的值,最后提交到数据库。

不管是什么SQL语句,某个字段需要动态改变的,都预先放一个问号,然后再set导入即可。

第三步 释放对象

养成良好的习惯,new了什么,就关闭什么。

if(conn != null)   conn.close();


游标、触发器、存储过程也用成功了,有点小复杂,以后再补充


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 Java 关系型数据库
高效连接之道:Java连接池原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。频繁创建和关闭连接会消耗大量资源,导致性能瓶颈。为此,Java连接池技术通过复用连接,实现高效、稳定的数据库连接管理。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接池的基本操作、配置和使用方法,以及在电商应用中的具体应用示例。
33 5
|
14天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
14天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
31 1
|
20天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
27天前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
91 1
|
1月前
|
SQL 存储 Java
Java中使用ClickHouseDriver连接和基本操作
通过上述步骤,你可以轻松地在Java应用中集成ClickHouse数据库,执行基本的CRUD操作。需要注意的是,实际开发中应当根据实际情况调整数据库连接配置(如URL中的主机、端口、数据库名等),并根据应用需求选择合适的异常处理策略,确保代码的健壮性和资源的有效管理。此外,对于复杂查询和大批量数据处理,建议充分利用ClickHouse的特性(如分布式处理、列式存储优化等),以进一步提升性能。
62 2
|
1月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
23 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
80 0
|
7天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
20 4