MySQL笔记7-Java数据库连接(JDBC)

本文详细介绍了Java数据库连接(JDBC)的使用,包括JDBC API、数据库连接步骤、数据查询和插入操作。通过示例代码展示了如何注册驱动、建立连接、执行SQL语句以及关闭连接。还提到了预处理查询的优势和使用PreparedStatement进行预处理的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java数据库连接(JDBC)
JDBC:Java DataBase Connectivity
使用Java进行数据库连接的技术
JDBC API:java.sql.*
里面规定了与各种数据库服务器操作的标准接口,另外需要一个相应数据库的驱动jar包

JDBC编程
1、添加数据库驱动jar包支持
2、连接数据库
username、password、connectionUrl
不同数据库服务器的URL格式不同

示例代码:

package my;

import java.sql.Connection;
import java.sql.DriverManager;

public class Test {
	public static void testConnect() throws Exception{
		//注册MySQL驱动(可以省略这一步)
		Class.forName("com.mysql.jdbc.Driver");
		
		//连接MySQL服务器
		String username="root";
		String password="123456";
		String connectionUrl="jdbc:mysql://127.0.0.1:3306/school?usesUnicode=true&characterEncoding=UTF-8";
	
		Connection conn=DriverManager.getConnection(connectionUrl,username,password);
		System.out.println("连接成功!");
		
		conn.close();
		System.out.println("关闭连接!");
	}
	
	public static void main(String[] args) {
		try {
			testConnect();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



在定义地址时
jdbc:msql:表示协议,用来指定要连接的服务器类型(oracle/MySQL/SQL Server)
128.0.0.1表示地址
3306表示端口号
school表示数据库名
usesUnicode=true&characterEncoding=UTF-8表示做网络传输时使用的字符集编码
DriverManager.getConnection表示获取连接,该函数的三个参数分别是(地址,用户名,密码)
conn.close()表示关闭数据库连接

语法分析
1、java.sql.*下规定了标准接口,而MySQL驱动里则是各个接口的实现
2、MySQL驱动的内部封装了与服务器的交互协议
3、Class.forName(“com.mysql.jdbc.Driver”);
这一行用于显式注册MySQL驱动,但可以省略

JDBC查询数据
示例代码:

package my;

import java.beans.Statement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class Test {
	public static void testQuery() throws Exception{
		//注册MySQL驱动的语句可有可无
		//但是将来有些运行环境下不支持驱动的自动加载,例如Java Web的环境里必须手动注册MySQL驱动
		Class.forName("com.mysql.jdbc.Driver");
		
		//连接MySQL服务器
		String username="root";
		String password="123456";
		String connectionUrl="jdbc:mysql://127.0.0.1:3306/af_school?userUnicode=true&characterEncoding=UTF-8";
		
		Connection conn=DriverManager.getConnection(connectionUrl,username,password);
		System.out.println("连接成功");
		
		//
		
		//数据库查询,Statement语句  ResultSet结果集
		java.sql.Statement stmt=conn.createStatement();
		//执行一个查询executeQuery(),返回一个结果集对象ResultSet
		ResultSet rs=stmt.executeQuery("SELECT*FROM student");
		
		//如果有数据,rs.next()返回true
		while(rs.next()) {
			//取出这一行记录
			int id=rs.getInt("id");
			String name=rs.getString("name");
			String phone=rs.getString("phone");
			Date birthday=rs.getDate("birthday");
			
			System.out.println(id+"\t"+name+"\t"+phone);
		}
		
		
		conn.close();
		System.out.println("关闭连接!");
	}
	
	public static void main(String[] args) {
		try {
			testQuery();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

JDBC插入数据
处理自增主键时需注意:
1、插入数据时,不写该字段
2、执行时指定 RETURN_GENERATED_KEYS
3、取出返回的自增主键

SQL语句的构造
经过前面的示例,可以发现jdbc的操作并不复杂,基本步骤:
1、注册MySQL驱动

Class.forName("com.mysql.jdbc.Driver");

2、连接数据库(例)

String username="root";
String password="123456";
String connectionUrl="jdbc:mysql://127.0.0.1:3306/school?useUnicode=true?characterEncoding=UTF-8";
Connection conn=DriverManager.getConnection(connectionUrl,username,password);

3、准备一个sql语句(例)

String sql="INSERT INTO student(`id`,`name`,`birthday`)"+"VALUES('20200001','z张三','2000-9-13')";

4、执行sql语句

Statement stmt=conn.creatStatement();
stmt.execute(sql);

5、关闭MySQL连接

conn.close();

在准备SQL语句时容易出错,使用工具类来构造SQL语句可以减少出错的几率

预处理查询
使用PreparedStatement接口可以处理预处理查询

普通查询处理步骤
1、MySQL接收到SQL请求
2、解析SQL请求(解析分为结构和数据两部分)
3、执行查询
4、返回结果

预处理查询处理步骤
1、MySQL接受到预处理的SQL(结构)
2、解析SQL请求
3、服务器收到参数的值(数据)
4、执行查询
5、返回结果

在连续执行多个结构相同、参数不同的查询时,使用预处理技术更有性能优势!

预处理代码结构:

//构造一个预处理查询
String sql=...
//先把sql构造发送给服务器
PreparedStatement ptmt=...
while(...){
//设置数据,把数据传给服务器
	ptmt.set(1,...)
	ptmt.set(2,...)
	ptmt.execute()
}

示例代码:

package my;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test {
	public static void testQuery()throws Exception{
		//1、注册驱动器
		Class.forName("com.mysql.jdbc.Driver");
		
		//2、创建MySQL连接
		String username="root";
		String password="123456";
		String connectionUrl="jdbc:mysql://127.0.0.1:3306/af_school?useUnicode=true&characterEncoding=UTF8";
		
		Connection conn=DriverManager.getConnection(connectionUrl,username,password);
		System.out.println("连接成功!");
		
		//3、创建sql语句
		//(1、构造一个SQL,参数值用?号代替,称为占位符
		String sql="INSERT INTO student(`id`,`name`,`birthday`)VALUES(?,?,?)";
		
		//(2、创建PreparedStatement对象(与MySQL产生一次交互),获取预处理对象
		PreparedStatement ptmt=conn.prepareStatement(sql);
		
		//(3、设置参数值
		ptmt.setInt(1, 20183001);
		ptmt.setString(2, "小新");
		ptmt.setString(3, "1993-3-10");
		
		//4、、执行sql语句
		//(4、执行查询
		ptmt.execute();
		
		//5、关闭连接
		conn.close();
		System.out.println("关闭连接!");
	}
	
	public static void main(String[] args) {
		try {
			testQuery();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值