连接数据库并进行增删改查

封装数据库连接增删改和查询

创建一个JDBCUtil类,记得导入jar包

public class JDBCUtil {
	//本地数据库
	private final static String URL = "jdbc:mysql://localhost:3306/bj";
	//用户名
	private final static String USER = "root";
	//密码
	private final static String PWD = "123456";
	//使用静态代码块,每次JDBCUtil类加载时就会加载驱动
	static {
		try {
			// 1、加载驱动:通过反射方式找具体类
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 数据库连接
	 * @return
	 */
	public static Connection geConnection() {
		Connection connection = null;
		try {
			//2、创建连接对象 url=jdbc:mysql://localhost:3306/bj
			connection = DriverManager.getConnection(URL, USER, PWD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
	
	/**
	 * 数据库增删改
	 * @param sql  		数据库的sql语句
	 * @param params	Object类型数组
	 * @return
	 */
	public static int myUpdate(String sql, Object[] params) {
		Connection connection = null;
		// 3、创建声明语句对象,使用PreparedStatement防止sql注入
		PreparedStatement pStatement = null;
		connection = geConnection();
		//没有修改成功则返回-1
		int result = -1;
		try {
			pStatement = connection.prepareStatement(sql);
			//判断数组是否为null或者为长度为0的数组
			if (params != null && params.length>0) {
				for (int i = 0; i < params.length; i++) {
					//从1添加数据库每个字段
					pStatement.setObject(i + 1, params[i]);
				}
			}
			//执行sql,返回一个int类型的值,返回的是影响的行数
			result = pStatement.executeUpdate();
			return result;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 数据库查询
	 * @param sql
	 * @param params
	 * @return
	 */
	public static ResultSet myQuery(String sql, Object[] params) {
		Connection connection = null;
		PreparedStatement pStatement = null;
		//如果查询不到即返回null
		ResultSet rSet=null;
		connection = geConnection();
		try {
			pStatement = connection.prepareStatement(sql);
			if (params != null && params.length>0) {
				for (int i = 0; i < params.length; i++) {
					pStatement.setObject(i + 1, params[i]);
				}
			}
			//返回一个结果集。
			rSet= pStatement.executeQuery();
			return rSet;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rSet;
	}
	/**
	 * 关闭资源
	 * @param pStatement
	 * @param resultSet
	 */
	public static void closeUtil(PreparedStatement pStatement,ResultSet resultSet) {
		try {
			if(pStatement !=null){
				pStatement.close();
			}
			if(resultSet != null){
				pStatement.close();
			}
			if(geConnection()!=null){
				geConnection().close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

创建一个数据库user

在这里插入图片描述

创建一个Main测试增删改类

public class Main {
		public static void main(String[] args) {
		//修改数据的sql,每有一个?Object类型数组需要传入一个值,且需要对应
		String sql="update user set user_pwd=? where user_name=?";
		Object[] params={"123456nice","张三"};
		
		//删除的sql
//		String sql="delete from user  where user_name=? and user_pwd=?";
//		Object[] params={"管理员","123456"};
		
		//增加的sql
//		String sql="insert into user(id,user_name,user_pwd) values(?,?,?)";
//		Object[] params={11,"张三","123456nice"};
		
		//执行sql
		int result= JDBCUtil.myUpdate(sql, params);
		if(result>0){
			System.out.println("成功  影响行数为: "+result);
		}
	}
}

修改数据的结果:成功 影响行数为: 2

在这里插入图片描述

创建一个Main测试查询类

public class Main {
	public static void main(String[] args) {
		String sql2 = "select * from user ";
		//Object[] params={"123456nice","张三"};
		ResultSet resultSet = JDBCUtil.myQuery(sql2, null);
		// 使用集合取值
		// ArrayList里面存放map
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			// 判断当前是否存在值
			while (resultSet.next()) {
				// 使用HashMap进行键值存值
				Map<String, Object> map = new HashMap<String, Object>();
				// 键->对数据库的字段说明 值->数据库对应字段的值
				map.put("id", resultSet.getInt("id"));// int类型使用getInt
				map.put("user_name", resultSet.getString("user_name"));
				map.put("user_pwd", resultSet.getString("user_pwd"));
				list.add(map);
			}
			// foreach
			for (Map<String, Object> map : list) {
				System.out.println(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

查询结果,还可以通过其他方法取值

{user_name=猎人, id=1, user_pwd=123456}
{user_name=张三, id=2, user_pwd=123456nice}
{user_name=张酸酸, id=3, user_pwd=789456}
{user_name=张刘2, id=4, user_pwd=1234789}
{user_name=张三, id=11, user_pwd=123456nice}
{user_name=张三, id=1123, user_pwd=123456nice}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C语言可以通过调用API来连接数据库进行增删改查操作。 一般常用的数据库有MySQL、Oracle、SQL Server等。以下以MySQL为例来说明: 1. 安装MySQL C连接器 要连接MySQL数据库,需要先安装MySQL C连接器,在Ubuntu Linux环境下,使用以下命令安装:sudo apt-get install libmysqlclient-dev 2. 连接MySQL数据库 在连接MySQL数据库之前,需要先定义一个MYSQL结构体来存储连接信息,例如: MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql, "localhost", "root", "root", "testdb", 0, NULL, 0); 其中, "localhost"是MySQL服务器的IP地址,"root"是MySQL服务器的用户名, "root"是MySQL服务器的密码,"testdb"是要连接的数据库名。 3. 增加数据 使用MySQL的C API可以很方便地执行增删改查操作,以下是一个添加数据的例子: char query[1000]; sprintf(query, "insert into student(name, age) values('%s', %d)", "张三", 18); mysql_query(&mysql, query); 其中,%s和%d是占位符,可以用具体的值去替换。这里是将一个名为“张三”的学生信息添加到名为“student”的表中。 4. 删除数据 与增加数据类似,删除数据也很简单。以下是一个删除数据的例子: char query[1000]; spintf(query, "delete from student where id=%d", 3); mysql_query(&mysql, query); 其中,id=3的学生将被删除。 5. 修改数据 以下是一个修改数据的例子: char query[1000]; sprintf(query, "update student set name='%s' where id=%d", "李四", 4); mysql_query(&mysql, query); 其中,id=4的学生的姓名将被修改为“李四”。 6. 查询数据 以下是一个查询数据的例子: char query[1000]; sprintf(query, "select * from student"); mysql_query(&mysql, query); MYSQL_RES *result = mysql_store_result(&mysql); int num_fields = mysql_num_fields(result); MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { for (int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("\n"); } 以上是一个简单的查询数据的例子,它将名为“student”的表中的所有记录都输出到控制台上。 总结 通过MySQL C API,可以在C语言中方便地连接MySQL数据库,并对其进行增删改查操作。这种方式比较灵活,但是比较底层,需要编写大量的代码来实现相对比较简单的操作。对于一般的应用程序,可以考虑使用ORM框架来简化代码编写。 ### 回答2: 连接数据库进行增删改查数据库应用的基础操作,以下是一个简单的步骤如下: 1. 安装数据库:首先需要安装合适的数据库服务,比如MySQL、Oracle、SQLServer等等。安装完毕后启动数据库服务。 2. 连接数据库:在启动数据库服务后,使用编程语言(如Java、Python、C#等等)提供的API接口连接到数据库中。 3. 编写数据操作代码:连接数据库后,可以对数据库进行数据查询、数据插入、数据更新、数据删除等等操作。编写代码时需要使用SQL语句或ORM框架。 4. 运行代码:将编写好的代码运行程序,程序将会连接到数据库并执行指定的数据操作。 5. 验证结果:程序执行完成后,可以查看操作是否执行成功,在数据库中查看对应的数据是否已经操作成功。 需要注意的是,每个数据库软件有不同的连接串、驱动及API,具体使用方法需要参考各自的API文档。此外,为了保证数据的安全性,从编写数据操作代码到运行代码,要确保代码没有漏洞,防止黑客利用SQL注入等攻击获取数据,这是数据库应用开发者需要注意的问题。 ### 回答3: 在进行数据库操作之前,我们需要先通过编程语言提供的库或框架连接到数据库。在c语言中,我们可以使用MySQL自带的C API或第三方库,如libmysqlclient等。 连接数据库的步骤一般为:初始化MySQL库、获取连接句柄、设置连接选项、建立连接等。连接成功后,就可以进行增删改查操作了。 增加数据可以使用SQL语句INSERT INTO,将新数据插入到指定的表中。 删除数据可以使用SQL语句DELETE FROM,将指定条件的数据从表中删除。 修改数据可以使用SQL语句UPDATE,根据指定条件修改表中的数据。 查询数据可以使用SQL语句SELECT,根据条件查询表中的数据,并将结果返回给程序处理。 通常是先在c程序中构造SQL语句,再通过MySQL提供的函数进行执行和处理结果。需要注意的是,在进行数据库操作时应充分考虑数据安全问题,如避免SQL注入攻击等问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值