准备工具
去网上下载MySQL和Navicat,这里给个我们老师的网盘,里面有相关工具
MySQL
MySQL的教程可以看我的这篇MySQL数据库入门学习
创建数据库
要想通过java连接数据库,首先通过Navicat工具连接MySQL,然后创建数据库jsp,再创建一个表单user,表单里的字段以及相应的属性见下图
随便往里面添加一些数据
JDBC
Java连接数据库分四步:1.加载驱动类、2.创建数据库连接、3.向数据库发送声明、4.获取返回的结果(结果集)、5.关闭数据库连接。接下来我就这几步,详细说明其中使用到的类,以及用法
1.加载驱动类
加载驱动类之前首先导入包含数据库编程所需的JDBC类。大多数情况下,使用import java.sql.* 就够了
import java.sql.*;
接着就是加载驱动类,这样就可以打开与数据库的通信。以下是代码片段实现这一目标
Class.forName("com.mysql.jdbc.Driver");
2.创建数据库连接
使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接,如下所示:
String final url = "jdbc:mysql://localhost:3306/jsp";//访问数据的url
String final username = "root";//数据库的用户名
String final password = null;//数据库的密码
Connection conn = DriverManager.getConnection(url, username, password);
3.向数据库发送声明
需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:
String sql = "select * from user";
PreparedStatement pstmt = conn.PreparedStatement(sql);
ResultSet rs = pstmt.executeQuery();
最好使用PreparedStatement,因为其会预处理声明,避免出现被sql注入的情况
如果要执行一个SQL语句:UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:
String sql = "delete from user";
PreparedStatement pstmt = conn.PreparedStatement(sql);
ResultSet rs = pstmt.executeUpdate()
4.获取返回的结果
可以使用适当的ResultSet.getXXX()方法来检索的数据结果:
while(rs.next()){
//Retrieve by column name
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
//Display values
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
注意在获取返回的结果时,顺序不能乱,如果getString(2)然后再getString(1)将会报错。但是某些列可以不取,比方说取1,2,4,6,...不会报错
5.关闭数据库连接,释放资源
在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费。在关闭数据库连接的时候一定注意:与数据库连接的创建顺序相反,ResultSet可以手动关闭也可以不关闭,系统会默认帮我们关闭
pstmt.close();
conn.close();
第一个JDBC实例
基于上面的步骤,我们可以综合示例代码,使用以下代码作为模板来编写JDBC代码
<%@page import="cn.edu.wic.jsp.bean.User"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>JDBC</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<%
List<User> users = new ArrayList<User>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jsp";
String username = "root";
String password = null;
conn = DriverManager.getConnection(url, username, password);
pstmt = conn.prepareStatement("select * from user");
rs = pstmt.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setName(rs.getString("name"));
out.print(user.getId() + "," + user.getUsername() + ","
+ user.getPassword() + "," + user.getName());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (Exception e) {
}
}
if (rs != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
%>
</body>
</html>
这里说明一点,我把所有的信息都保存到User类中,用一个List存放所有的User类的对象