概述
一、实验目的:
理解 JDBC 的工作原理,掌握 JDBC 访问数据库;
掌握常见数据库 MYSQL ;
二、实验环境:
- 理解 JDBC 的应用。
- 掌握 JDBC 的编程接口。
- 熟练使用 IDEA 开发简单应用
三、实验内容:
(写出主要的内容)
现在使用 JDBC 写一个简单的小程序,主要是使用 JDBC 连接 MySQL 数据库,然后对数据库进行一些基本的增删改查操作。
1 、设计数据库表
先设计一个数据库表,用于保存用户信息,建表语句如下:
CREATE DATABASE jdbc
CREATE TABLE tbl_user_info
(
id INT NOT NULL AUTO_INCREMENT,
user_name VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex INT(1) NOT NULL,
create_dt DATE NOT NULL,
PRIMARY KEY (id)
)
ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO tbl_user_info VALUES('4','Mary','25','0','2016-06-24');
INSERT INTO tbl_user_info VALUES('5','Jack','22','1','2016-06-24');
INSERT INTO tbl_user_info VALUES('6','John','19','1','2016-06-24')
2 、定义实体类
定义一个 Bean,与数据库表中的各个字段对应:
package com.imooc.jdbc;
import java.util.Date;
public class UserVO {
private int id;
private String userName;
private int age;
private int sex;
private Date createDt;
public int getId()
{return id;}
public void setId(int id)
{this.id=id;}
public String getUserName()
{return userName;}
public void setUserName(String userName)
{this.userName=userName;}
public int getAge()
{return age;}
public void setAge(int age)
{this.age=age;}
public int getSex()
{return sex;}
public void setSex(int sex)
{this.sex=sex;}
public Date getCreteDt()
{return createDt;}
public void setCreateDt(Date createDt)
{this.createDt=createDt;}
@Override
public String toString() {
return "UserName[id=" + id + ",userName=" + userName + ",age=" + age
+ ",sex=" + sex + ",createDt=" + createDt + "]";
}
}
3 、定义数据库连接类
定义一个数据库连接类,用于获取 MySQL 的连接
package com.imooc.utils;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBUtil {
private static final String URI = "jdbc:mysql://localhost:3306/jdbc?" +
"user=root&password=123456&useUnicode=true&characterEncoding=UTF-8";
private static final String DRIVER = "com.mysql.jdbc.Driver";
public static Connection connectDB() throws Exception {
// 1、加载数据库驱动
Class.forName(DRIVER);
// 2、获取数据库连接
Connection conn = DriverManager.getConnection(URI);
return conn;
}
}
MySQL 的 JDBC URL 编写方式为:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=
值,在这个例子中我连接的数据库主机是一台远程主机,所以主机名称为远程主机的 ip 地
址,如果数据库主机为本机,则可以定义为 localhost,在参数中指定用户名为 root,密码也
是 root,为了避免中文乱码要指定 useUnicode 和 characterEncoding。因为连接的是 MySQL
数据库,所以程序一开始需要加载 MySQL 的数据库驱动,然后通过 DriverManager.getConn
ection(String URL)方法获取数据库的连接。
4 、实现数据库的增删改查
在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作,
定义一个 UserDao 类用于操作数据库。
1 )查询
先看查询操作,查询可以一次查询出所有的数据,也可以根据相应的条件查询。
查询所有的数据,在 UserDao 中定义一个 queryAll()方法:
public static List<UserVO> queryAll() throws Exception {
Connection conn = DBUtil.connectDB();
String sql = "SELECT * FROM tbl_user_info";
List<UserVO> userList = new ArrayList<UserVO>();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
UserVO user = new UserVO();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("user_name"));
user.setAge(rs.getInt("age"));
user.setSex(rs.getInt("sex"));
user.setCreateDt(rs.getDate("create_dt"));
userList.add(user);
}
return userList;
}
这里使用 Connection.createStatement()方法获取一个 Statement 对象,这个对象里面有很多的方法可以操作数据库,使用 excuteQuery(String sql)执行查询操作,查询结果为一个结果集 ResultSet,可以通过这个结果集获取相关的信息。
定义 main 函数:
public static void main(String[] args) {
UserDao dao = new UserDao();
try {
List<UserVO> userList = dao.queryAll();
for(UserVO user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}
执行结果:
根据条件查询,定义一个 queryByParams 方法:
public List<UserVO>queryByParams(List<Map<String,Object>>params) throws Exception{
Connection conn=DBUtil.connectDB();
StringBuilder sql=new StringBuilder("SELECT * FROM tbl_user_info WHERE 1=1");
for(Map<String,Object>param:params){
sql.append(" and ");
sql.append(" "+param.get("col")+" ");
sql.append(" "+param.get("rel")+" ");
sql.append(" "+param.get("value")+ " ");
}
System.out.println(sql.toString());
List<UserVO>userList=new ArrayList<UserVO>();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql.toString());
while(rs.next()){
UserVO user=new UserVO();
user.setId(rs.getInt("id"));
user.setUserName(rs.getString("user_name"));
user.setAge(rs.getInt("age"));
user.setSex(rs.getInt("sex"));
user.setCreateDt(rs.getDate("create_dt"));
userList.add(user);
}
return userList;
}
这个方法可以自由选择查询的条件,只需要向方法中传入一个条件的 List 即可,这些条件
都是由 Map 组成的,每一个 Map 包含三个元素,col 表示查询条件对应哪一列,rel 表示查
询条件的关系是什么,value 是指查询条件的值。这样写集成了多查询条件的方法,很多的
业务下,查询的逻辑可能很多,这样写只用一个统一的方法就可以解决多种不同查询条件的
业务逻辑。
main 函数测试一下:
public static void main(String[] args){
UserDao dao = new UserDao();
List<Map<String, Object>> params = new ArrayList<Map<String,Object>>();
Map<String, Object> param1 = new HashMap<String, Object>();
param1.put("col", "user_name");
param1.put("rel", "like");
param1.put("value", "'%John%'");
params.add(param1);
Map<String, Object> param2 = new HashMap<String, Object>();
param2.put("col", "sex");
param2.put("rel", "=");
param2.put("value", 1);
params.add(param2);
try {
List<UserVO> userList = dao.queryByParams(params);
for(UserVO user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}
执行结果:
2 )增加
现在在 UserDao 中写一个 addUser 方法用于新增一条信息:
public void addUser(UserVO user)throws Exception{
Connection conn=DBUtil.connectDB();
String sql="INSERT INTO tbl_user_info(user_name,age,sex, create_dt)"
+"VALUES(?,?,?,?)";
PreparedStatement pstmt= conn.prepareStatement(sql);
pstmt.setString(1,user.getUserName());
pstmt.setInt(2,user.getAge());
pstmt.setInt(3,user.getSex());
pstmt.setDate(4,new Date(new java.util.Date().getTime()));
pstmt.execute();
}
这个方法使用 Connection.prepareStatement(String sql)方法获取一个 PreparedStatement 对象,使用这个方法可以传入带参数的 SQL 语句,而参数的值可以通过 PreparedStatement.setXXX
(int index, XXX value)的方法指定,其中 XXX 为各种不同的类型,index 指定第几个参数
的下标。指定了参数的值之后,便可以执行 excute()方法执行 SQL 语句了。
main 方法来验证这个增加的方法:
public static void main(String[] args) {
UserDao dao = new UserDao();
UserVO user = new UserVO();
user.setUserName("gong");
user.setAge(20);
user.setSex(1);
try {
dao.addUser(user);
} catch (Exception e) {
e.printStackTrace();
}
}
执行后再查看数据库,发现 Tom 这个用户已经插入成功了。
3 )删除
接下来再写一个删除的方法,根据用户的 id 来删除数据:
public void deleteUser(int id)throws Exception{
Connection conn=DBUtil.connectDB();
String sql="DELETE FROM tbl_user_info WHERE id=?";
PreparedStatement pstmt= conn.prepareStatement(sql);
pstmt.setInt(1,id);
pstmt.execute();
}
然后写一个 main 方法来验证:
删除 id 为 4 的用户,运行后查看 数据库:
4 )更新数据库
最后来看一下更新数据库:
public void updateUser(UserVO user)throws Exception{
Connection conn = DBUtil.connectDB();
String sql = "UPDATE tbl_user_info SET user_name=?, age=?, sex=?"
+ " WHERE id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setInt(2, user.getAge());
pstmt.setInt(3, user.getSex());
pstmt.setInt(4, user.getId());
pstmt.executeUpdate();
}
从 SQL 语句中可以看出更新也是根据用户的 id 进行选择性的更新的。
写一个 main 方法来验证:
public static void main(String[] args) {
UserDao dao=new UserDao();
UserVO user=new UserVO();
user.setUserName("Jack");
user.setAge(30);
user.setSex(0);
user.setId(2);
try {
dao.updateUser(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后
以上就是烂漫板凳为你收集整理的实验四 JDBC 访问数据库的全部内容,希望文章能够帮你解决实验四 JDBC 访问数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复