JDBC——用JDBC连接MySQL数据库并进行简单的增删改查操作_jdbc连接数据库实现增删改查

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

}

@Override
public String toString() {
	return "UserVO [id=" + id + ", userName=" + userName + ", age=" + age
			+ ", sex=" + sex + ", createDt=" + createDt + "]";
}

}


#### 3、定义数据库连接类

 定义一个数据库连接类,用于获取MySQL的连接 



package com.imooc.jdbc;

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

public class DBUtil {

private static final String URI = "jdbc:mysql://192.168.2.207:3306/jdbc_demo?"
		+ "user=root&password=root&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.getConnection(String URL)方法获取数据库的连接。 


#### 4、实现数据库的增删改查

 在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作,定义一个UserDao类用于操作数据库。 

##### 1)查询



 先看查询操作,查询可以一次查询出所有的数据,也可以根据相应的条件查询。 


 查询所有的数据,在UserDao中定义一个queryAll()方法: 



public 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();
	}
}
执行结果: 


 UserVO [id=4, userName=Mary, age=25, sex=0, createDt=2016-06-24] 
   
 UserVO [id=5, userName=Jack, age=22, sex=1, createDt=2016-06-24] 
   
 UserVO [id=6, userName=John, age=19, sex=1, createDt=2016-06-24] 
   

  
 根据条件查询,定义一个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();
	}
	
}
在这个main方法中设定了两个查询条件,一是user\_name like %John%,另一个是sex=1,当然条件也可以是其他的,执行程序运行结果为: 


 SELECT \* FROM tbl\_user\_info WHERE 1=1  and  user\_name  like  '%John%'  and  sex  =  1  
   
 UserVO [id=6, userName=John, age=19, sex=1, createDt=2016-06-24] 
   

##### 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("Tom");
	user.setAge(20);
	user.setSex(1);
	try {
		dao.addUser(user);
	} catch (Exception e) {
		e.printStackTrace();
	}
}
执行后再查看数据库,发现Tom这个用户已经插入成功了。 


![](https://img-blog.csdn.net/20160624170022187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
  

  


##### 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方法来验证: 



public static void main(String[] args) {
	UserDao dao = new UserDao();
	
	try {
		dao.deleteUser(7);
	} catch (Exception e) {
		e.printStackTrace();
	}

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

中…(img-b68ZMugZ-1715885323571)]
[外链图片转存中…(img-Au5WlxiH-1715885323571)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值