程序与数据库连接工具与案例代码


前言

提示:在这里先说下 DBUtil.java 文件:

JDBC能完成三件事:
同一个数据库建立连接
向数据库发送SQL语句
处理数据库返回结果
它是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

JDBC访问数据库流程

在这里插入图片描述

JDBC访问数据库的步骤

1、开始JDBC操作前要将驱动放到WEB-INF的lib目录下

2、程序中首先导包import java.sql.*

3、执行查询操作

①、加载正确的数据库驱动程序

每种数据库驱动程序的名字和数据库URL的写法都不同

Class.forName("oracle.jdbc.driver.OracleDriver"); //使用Oracle的JDBC驱动程序
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //使用SQL Server的JDBC驱动程序
Class.forName("com.ibm.db2.jdbc.app.DB2Driver"); //使用DB2的JDBC驱动程序
Class.forName("com.mysql.cj.jdbc.Driver"); //使用MySql的JDBC驱动程序

关于使用使用MySql的JDBC驱动程序,如果连不上可以试试下面这个驱动
在 mysql和 jdbc中间加个【.cj】

driver="com.mysql.cj.jdbc.Driver";

②、定义所要连接数据库的地址

此处 dbname为数据库的名字

String url = "jdbc:mysql://localhost:3306/dbname";

③、建立与数据库的连接

Connection con=DriverManager.getConnection(url,"root", "root");

Connection接口连接MySQL数据库

Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

Connection接口连接ORACLE数据库

Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:port:databse","user","password");

④、创建语句对象

String sql="select * from food where material like ?"
PreparedStatement  pstmt=conn.prepareStatement(sql);
//带?的SQL语句一定要在执行之前给?赋值,char和varchar都是setString替换?,
//对于int型数据可以使用setInt替换?
pstmt.setString(1, "%鸡蛋%");//参数1表示第一个?

⑤、声明SQL语句

将该语句通过Statement对象提交给服务器进行执行

ResultSet rs=ps.executeQuery();
//注意,此时executeQuery()不带参数

⑥、对查询结果进行分析

while(rs.next()){
	String name =rs.getString("columName");//根据列名获取字段值
	String phone =rs.getString(2);//根据列号获取字段值,从1开始数列号
	System.out.println(name+","+phone);
}

⑦、关闭打开的资源(按定义的逆序关闭)

rs.close();
pstmt.close();
con.close();

JDBC的优缺点

JDBC API 用于连接 Java 应用程序与各种关系数据库。
这使得人们在建立客户/服务器应用程序时,通常把 Java 作为编程语言,把任何一种浏览器作为应用程序的友好界面,把 Internet 或Intranet 作为网络主干,把有关的数据库作为数据库后端。

使用JDBC具有以下优点:

(1)、JDBC API 有利于用户理解。
(2)、JDBC 使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。
(3)、JDBC 支持不同的关系数据库,使得程序的可移植性大大加强。
(4)、JDBC API 是面向对象的,可以让用户把常用的方法封装为一个类以备后用。

使用JDBC具有如下缺点:

(1)、使用 JDBC访问数据记录的速度会受到一定程度的影响。
(2)、JDBC 结构中包含了不同厂商的产品,这就给更改数据源带来了一定的麻烦。

DBUtil.java代码及注解

JavaWeb项目

package dao;

import java.sql.DriverManager;
import java.sql.ResultSet;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class DBUtil {

	private static java.sql.Connection con = null;// 连接对象
	private static PreparedStatement pstmt = null;// 语句对象
	private static ResultSet rs = null;  // 结果集对象
	
	
	//连接数据库
	public static Connection getCon(){
    //定义所要连接数据库的地址
	String url = "jdbc:mysql://localhost:3306/00eshop?useUnicode=true&characterEncoding=UTF-8";
	String user = "root";    //数据库用户名
	String password = "123456";   //数据库密码

		try {
			//加载正确的数据库驱动程序
			Class.forName("com.mysql.jdbc.Driver");
			//建立与数据库连接
			con = DriverManager.getConnection(url, user, password);
			//System.out.println("--------------"); 出现横线,代表数据库连接上了
			return (Connection) con;
		} catch (Exception e) {
			System.out.println(e);
			return null;
		}

	}
	
	//关闭数据库,(避免资源浪费,或者其他数据库来访问)
	public static void close(ResultSet rs,PreparedStatement ps,Connection con){
		if (rs != null) {
			try {
				rs.close();
			} catch (Exception e) {
				System.out.println(e);
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (Exception e) {
				System.out.println(e);
			}
		}
		if (con != null) {
			try {
				con.close();    //关闭打开的资源
			} catch (Exception e) {
				System.out.println(e);
			}
		}
	}
}

注解:
在这里插入图片描述

Connection 是个接口,这个 Connection 连接成立后才能把SQL语句往这里面传,先跟数据库建立一个良好的联系
在DBUtil.java类中定义 getCon() 方法创建数据库链接(第16行)

具体说第18 行是什么意思:
String url = "jdbc:mysql://localhost:3306/00eshop?useUnicode=true&characterEncoding=UTF-8";

jdbc:是连接数据库的一种形式
mysql:数据库的类型是mysql
localhost:本地地址,也可以换成:【127.0.0.1】
3306:端口号(默认数据库端口,最好不要改)

这个在Navicat 或 VS Code中可以看到:
在这里插入图片描述
在这里插入图片描述

/ 后面的【00eshop】:是数据库名称
在这里插入图片描述
? 后的【useUnicode=true&characterEncoding=UTF-8】
这些是针对不同的 MySql 版本进行传值


数据库本地地址和远程地址

此报错以一个SSM项目为例:

远程地址:例如MySQL 连接远程数据库(192.168.5.542)
本地地址:localhost
案例:

我曾经运行过一个项目,但是他一直在跑,浏览器一直转圈,Tomcat日志中说连接超时
在这里插入图片描述
一开始我以为是环境配置问题,于是各种检查,重新配置
最后发现是因为用了远程的数据库链接地址与本地数据库导致的
在这里插入图片描述

最后在配置数据库的位置把远程地址改成 localhost本地地址就好了
在这里插入图片描述

//SpringBoot
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hotel?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456
//SSM
<!-- 配置数据源 -->
<bean id="dataSource"
	class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://localhost:3306/db_ebook?useUnicode=true&amp;characterEncoding=UTF-8"/>
	<property name="username" value="root"/>
	<property name="password" value="123456"/>
</bean>
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哈喇子!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值