JDBC连接MySQL的增删改查

本文介绍了使用JDBC连接MySQL数据库进行增删改查操作的步骤。首先,创建home数据库和person表,接着在Java项目中导入JDBC驱动。详细讲述了如何建立URL、加载驱动、连接数据库,以及封装JDBC的增删改查方法,并提供调用示例,确保每次操作后自动关闭连接,避免数据缓存问题。

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

介绍:JDBC(Java DataBase Connectivity, Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用 Java语言编写的类和接口组成。

JDBC操作数据库类型:  MySQL数据库 

准备步骤:

① 你需要有MySQL数据库,然后在MySQL里面创建一个 home 数据库,在数据库里面新建一个 person 表。

② 在 person表中,新建字段  id(int 自增) ,name(character 类型),age(int 类型),chenghu(character 类型)

③ 在 Java / web 项目中导入 JDBC驱动jar包。最新: mysql-connector-java-8.0.11.jar  在网站上可以自行下载。

④ 导入方法:右击项目-> build path -> Add External Archives...  之后找到  mysql-connector-java-8.0.11.jar 文件 点击打开即可。

jdbc连接数据库步骤:

提示:JDBC 驱动jar包  在8.0版本以上的,和引入低版本的驱动jar包 在 创建驱动 建立URL、连接数据库 操作要写的java程序不一样。

1. 建立URL

//加载驱动
String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";  

   代码格式:     jdbc:数据库类型://所连数据库IP地址:默认端口号/数据库名?参数&参数

2. 加载驱动

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

  驱动的格式,跟低版本的 jar包要写的java格式不一样。

3. 连接数据库

Connection ct = DriverManager.getConnection(URL, USER, PASSWORD);

4. jdbc连接数据库的java封装

package jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import java.sql.Connection;
public class ConnDb {

	private Connection conn = null;
	private static Logger log=Logger.getLogger(ConnDb.class);	
    private Connection ct = null;
	
	public Connection getConn(){
		try {
		
	//创建URL
	String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";  
  					 
		String USER="root";
		String PASSWORD="123456";
		//1.加载mysql驱动:		  		     
		Class.forName("com.mysql.cj.jdbc.Driver");		   	   
			
        //得到连接
	    ct = DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return ct;
	}

	public Boolean dbclose() {
		// TODO Auto-generated method stub
		Boolean closeResult = false;
		try {
			if(!conn.isClosed()){
				conn.close();
			}
			log.debug("数据库连接关闭成功");
			closeResult=true;
		} catch (SQLException e) {
			// TODO: handle exception
			log.error("数据库连接关闭失败");
			log.error(e.getSQLState());//没有合适的驱动
			log.error("错误信息为:"+e.getMessage());
			closeResult=false;
		}
		return closeResult;
	}


}

4. JDBC增删改查的jJava封装

package dao;

import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jdbc.ConnDb;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class personDao {

	private ConnDb dbs;
	private Connection conn;
	private PreparedStatement pst = null;

	public applicationtypeDao() {
		super();
		dbs = new ConnDb();
		conn = dbs.getConn();
	}

	public JSONArray select() { // select 选取数据

		JSONArray jsonArray = new JSONArray();
		String sql = "select * from person;     
		ResultSet resultSet = null;

		int col = 0;
		try {
			pst = conn.prepareStatement(sql);
			resultSet = pst.executeQuery();
			col = resultSet.getMetaData().getColumnCount();
			while (resultSet.next()) {

				JSONObject jsonObject = new JSONObject();
				for (int i = 0; i < col; i++) {
                    // 得到列名
					String columnLable = resultSet.getMetaData().getColumnLabel(i + 1); 
                   // 得到列值
					Object columnValue = resultSet.getObject(columnLable);  					
                    jsonObject.put(columnLable, columnValue);

				}

				jsonArray.add(jsonObject);

			}

			resultSet.close();
			closedb(null);
		} catch (SQLException e) {

			// log.error("----记录更新失败----");
			closedb(null);
		}

		return jsonArray;

	}

	
	public int update(int id, String name, int age,String shenfen) { 

		int rowsCount = 0; // 记录被更新的记录总数
        String sql = "update person set name='" + name + "',age='" + age+ 
       "',shenfen'"+shenfen+ "' where id ='" + id + "'";

		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.executeUpdate();
			closedb(null);
		} catch (SQLException e) {
		
			closedb(e);

		}
		return rowsCount;

	}

	public boolean insert(int id, String name, int age, String shenfen) {

		boolean rowsCount = false; 

		String sql = "insert into person(id,name,image,shenfen) values ('"+ id + "','" 
        + name + "','" + age+"','" + shenfen +"')";
 
		
		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.execute();
			closedb(null);
			System.out.println("插入成功");
		} catch (SQLException e) {
			System.out.println("---插入记录失败!---");
			closedb(e);

		}
		return rowsCount;

	}

	
	public int delete(int id) {
		int rowsCount = 0;
		String sql = "delete from  person where id='" + id + "'";
		PreparedStatement pst = null;
		try {
			pst = conn.prepareStatement(sql);
			rowsCount = pst.executeUpdate();
			System.out.println("删除记录成功:" + rowsCount);
			pst.close();
			conn.close();
		} catch (SQLException e) {

			System.out.println("删除记录失败");

			try {
				if (!pst.isClosed()) {
					pst.close();
				}
				if (!conn.isClosed()) {
					conn.close();
				}
			} catch (SQLException e2) {

				e2.printStackTrace();
			}
		}
		return rowsCount;
	}

	private void closedb(SQLException e) {
		try {
			if (!pst.isClosed()) {
				pst.close();
			}
			if (!conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e2) {

		}
	}

}

5. 调用jdbc 增删改查 的方法实例实例

package main;


public class test {

public static void main(String args[]){

  // 增
  new personDao.insert("李晓明",18,"儿子");
  new personDao.insert("李二小",38,"父亲");
  new personDao.insert("王小红",18,"母亲");
  new personDao.insert("李大白",18,"祖父");
  // 删
  new personDao.delete(1);
  // 改
  new personDao.update(1,"李小明改",20,"学生");
  // 查
  new personDao.select();

}

}

     上面的代码实例,主要实现了对 jdbc 增删改查方法的类封装,方便调用方法。且每次调用“增删改查”功能后,内部自动执行关闭jdbc驱动的方法,消除了数据缓存的累积现象。

 

 

### 使用JDBC进行MySQL数据库的增删改查操作 #### 加载数据库驱动类 为了能够通过Java程序访问MySQL数据库,首先需要加载相应的数据库驱动类。这可以通过`Class.forName()`方法来实现: ```java try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("Where is your MySQL JDBC Driver?"); e.printStackTrace(); } ``` 此代码片段尝试注册特定于MySQLJDBC驱动器[^4]。 #### 创建连接对象 一旦成功加载了驱动程序,则可以建立到目标数据库的实际物理链接。通常情况下会使用如下所示的方式构建URL字符串并获取Connection实例: ```java String url = "jdbc:mysql://localhost:3306/jtdb?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); ``` 这里定义了一个指向本地主机上运行的服务端口为默认值(即3306),并且指定了要使用的具体数据库名称以及登录凭证的信息[^1]。 #### 执行SQL语句 ##### 插入记录 当准备就绪之后就可以执行各种类型的SQL命令了。下面是一个简单的例子展示了怎样向表内插入新纪录的方法之一——利用PreparedStatement预编译好的SQL模板来进行参数化查询从而防止SQL注入攻击的发生: ```java String sql = "INSERT INTO staff(name,password) VALUES (?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1,"张三"); pstmt.setString(2,"123456"); int affectedRows = pstmt.executeUpdate(); if (affectedRows > 0){ System.out.println("Insert successful."); }else{ System.out.println("Failed to insert record."); } // 关闭资源 pstmt.close(); conn.close(); ``` 这段代码实现了将一条新的员工信息加入staff表格中的功能,并且验证了操作是否顺利完成[^5]。 ##### 更新现有数据 对于更新已有条目而言,同样推荐采用类似的模式编写代码;只需更改对应的字段名及其对应的新值即可: ```java String updateSql = "UPDATE staff SET name=?, password=? WHERE id=?"; PreparedStatement updateStmt = conn.prepareStatement(updateSql); updateStmt.setString(1, "李四"); updateStmt.setString(2, "new_password"); updateStmt.setInt(3, someId); int updatedCount = updateStmt.executeUpdate(); System.out.printf("%d rows were updated.\n",updatedCount ); // 清理工作... updateStmt.close(); conn.close(); ``` 上述过程说明了如何安全有效地修改指定ID所关联的数据项的内容[^2]。 ##### 删除单个实体 如果想要移除某个具体的项目也可以按照相同思路处理: ```java String deleteSql = "DELETE FROM staff WHERE id=?"; PreparedStatement delPst = conn.prepareStatement(deleteSql); delPst.setInt(1,someOtherId); int deletedNum = delPst.executeUpdate(); System.out.printf("Deleted %d row(s).\n",deletedNum); // 结束后的清理动作... delPst.close(); conn.close(); ``` 该部分描述了一种标准做法用于彻底清除满足条件的对象实例。 ##### 查询多条结果集 最后,在读取多个匹配的结果时则需要用到ResultSet接口配合Statement或PreparedStatment一起运作: ```java String selectAllStaffs = "SELECT * FROM staff ORDER BY id DESC LIMIT ?"; PreparedStatement queryStmt = conn.prepareStatement(selectAllStaffs); queryStmt.setInt(1,maxResultsToShow); ResultSet rs = stmt.executeQuery(queryStmt); while(rs.next()){ int idColIndex = 1; String nameColName="name"; Integer currentId = rs.getInt(idColIndex ); String fullName = rs.getString(nameColName); // Process each retrieved item here... }// end while loop over all returned records. rs.close(); queryStmt.close(); conn.close(); ``` 以上就是关于从staff集合里检索若干成员的基本流程概述。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值