JSP:MySQL数据库访问

起步

  • 下载jdbc驱动程序
  • 导包:找到自己Tomcat文件夹下的lib目录,将jdbc驱动程序压缩包放入
    在这里插入图片描述

利用JDBC查询数据库的步骤:

  • 载入JDBC驱动程序:在Class.forName方法中指定数据库驱动程序的类名,这样就自动创建了驱动程序的实例,并注册到JDBC驱动管理器
  • 建立连接
  • 创建并使用Statement对象,向数据库发送查询和命令
  • 执行查询或更新
  • 结果处理
  • 关闭连接

载入JDBC驱动程序

常用数据库驱动程序类名

  • Oracle驱动程序类:oracle.jdbc.driver.OracleDriver
  • SQLServer驱动程序类:com.microsoft.jdbc.sqlserver.SQLServerDriver
  • MySQL驱动程序类:com.mysql.jdbc.Driver

加载过程是使用Class.forName()方法将驱动程序加载到运行环境中。加载的时候,驱动程序会自动在驱动程序管理器中完成注册。加载过程中如果未找到驱动程序或驱动程序版本不相应,会产生ClassNotFoundExection异常

String driverName = "com.mysql.jdbc.Driver";
try {
		Class.forName(driverName);
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}

建立连接

定义URL
MySql的URL:jdbc:mysql://地址:端口/数据库

建立连接
建立实际的网络连接时,需要将URL、数据库用户名和数据库密码传递给DriverManager类的getConnection方法。如果连接不能建立,会产出SQLExection异常

String url = "jdbc:mysql://localhost:3306/test_jdbc";
String username = "root";
String password = "123456";
try {
	Connection conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
	e.printStackTrace();
}

创建并使用Statement对象

Sataement对象用来向数据库发送查询和命令。它由Connect的createStatement方法创建

Connection conn = DriverManager.getConnection(url, username, password);
Statement statement = conn.createStatement();

执行查询或更新

通常使用Statement对象的3个基本方法来执行SQL命令

executeQuery
该方法用来执行查询命令,返回一个ResultSet(结果集)对象,ResultSet可能为空,但不会是null

ResultSet rs = statement.executeQuery(sql);

executeUpdate
该方法主要是用来执行插入、删除及修改记录操作,返回一个int整型值,该值是被更新的行数,可以为0。该方法也支持create table 等命令

int n = statement.executeUpate(sql);

execute
该方法主要用来执行一般的SQL命令,包括增删改查以及数据定义,返回一个布尔值,显示了是否返回一个查询结果集Request对象。如果返回一个结果集可以再通过statement.getResulrSet方法获取一个ResultSet对象

Boolean b = statement.execute(sql);
if (b){
 ResultSet rs=statement.getResultSet();
}

结果处理

ResultSet对象的每条记录结果代表了一个数据表行。处理结果最简单的方式是使用ResultSet的next方法在表中移动,每次一行
在一行内,ResultSet提供了各种getXxx方法,它们都以列名或者索引为参数,以各种不同的Java类型返回结果

while(rs.next){
	String name=rs.getString("name");
	......
}

关闭连接

conn.close();

关闭连接还会关闭对应的Statement和ResultSet对象

实例:从数据库获取内容,并将内容以表格的形式显示到页面中

<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.ResultSet"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//连接数据库
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_jdbc", "root", "123456");
			//创建Statement对象
			Statement statement = con.createStatement();
			//执行sql语句
			String sql = "select * from user";
			//处理结果
			ResultSet rs = statement.executeQuery(sql);
			out.print(" <table cellspacing=\"1\" border=\"1\">");
			out.print("  <tr><td>编号</td><td>书名</td><td>作者</td><td>名言</td></tr>");
			while (rs.next()) {
				out.print("<tr><td>" + rs.getString(1) + "</td>" + "<td>" + rs.getString(2) + "</td>" + "<td>"
						+ rs.getString(3) + "</td>" + "<td>" + rs.getString(4) + "</td></tr>");
			}
			out.print("</table>");
			con.close();
		} catch (ClassNotFoundException e) {
			System.out.print("加载失败");
			e.printStackTrace();
		}
	%>
</body>
</html>

效果比较普通
在这里插入图片描述

使用预编译语句(PrepareStatement)

可以多次执行类似的语句,使用参数化(预编译)语句要比每次都执行原始的查询更有效率
提高安全性,预防SQL注入攻击

实例

Connect con = DriverManager.getConnect(); 
String sql = "insert into users (username,age) values(?,?)";
PrepareStatement ps=con.CreateStatement(sql);
ps.setString(1,"张三");
ps.setInt(2,25);
ps.setString(1,"张五");
ps.setInt(2,25);
ps.executeUpdate();

注:

?         占位符,表示该位置是一个参数
setXxx(index,value)  根据参数的类型,选择对应的set方法,设置参数的值
index     索引,从1开始表示是第几个?号  
value     要设置的值

PrepareStatement对象同样可以使用Statement对象的各种方法

补充

ResultSetMetaData

ResultSetMetaData用于获取关于ResultSet对象中列的类型和属性信息

//从ResultSet中获取ResultSetMetaData对象
ResultSetMetaData rsmd=resultSet.getMetaData();
//ResultSetMetaData对象的常用方法
getColumnCount()		返回ResultSet中的列数
getColumnName(int n)	返回序号为n的列数
getColumnType(int n)	返回此列的SQL数据类型,返回值为整数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无知的小菜鸡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值