使用JDBC操作数据库

导包 数据库驱动包 msql-connector-java

1.掌握JDBC连接数据库

1.1 JDBC 流程图

mysql
oracle
Java应用程序
JDBC API
JDBC DriverManager
JDBC 驱动
JDBC 驱动
MySQL数据库
Oracle数据库
  1. Connection接口 数据库连接接口(想操作数据库 首先就要连接起来 其实就是驱动对接)
  2. Statement接口 语句执行者(SQL语句执行平台) 它能够帮助你在连接建立好之后 进行SQL语句执行
  3. ResultSet接口 结果集 它是数据库执行完对应的【查询】之后得到的伪数据表集合

在这里插入图片描述

		Connection conn = null;
		Statement state = null;
		ResultSet rs = null;
		try {
			/**1.加载驱动(驱动<对应JavaJDBC的实现类>是数据库厂商提供)*/
			Class.forName("com.mysql.jdbc.Driver");  // 本来Class.forName() 获取对应的类的字节码对象
			// DriverManager.registerDriver(new Driver()); 因为它的静态代码块已经注册过了 所以不用了
			/**2.建立与数据库的连接*/
			// p1:数据库地址   p2:数据库用户名  p3:数据库密码
			// HTTP协议:http://localhost:8080     你现在是JDBC连接 所以它也有固定前缀 jdbc:数据库://
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/kgcnews", "root", "root");
			/**3.创建SQL语句执行平台*/
			state = conn.createStatement();
			/**4.准备SQL语句*/
			String sql = "select * from news_detail limit 5";
			/**5.语句执行平台执行SQL语句*/
			rs = state.executeQuery(sql);
			/**6.处理结果集(只在查询的时候才有,可以理解为是一个伪查询到的表)*/
			// 每一次next()表示判断是否存在下一行  而且可以理解为有一个虚拟的指针指向了某行
			while(rs.next()) {
				// 将某行的指定列数据取出来 并 转换为合适的Java数据类型
				int id = rs.getInt(1); // 根据列的索引获取对应的列内容
				String title = rs.getString(3);
				String author = rs.getString("author");  // 根据列的名称来获取列内容(有别名记得改为别名)
				System.out.println(id+"--"+title+"--"+author);
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				rs.close();
				state.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

2.使用JDBC对数据库进行Crud操作

2.1 最开始的步骤

  1. 加载驱动
  2. 获取连接
  3. 创建语句执行者
  4. 编写SQL语句
  5. 执行SQL语句
  6. 处理结果集(如果是增删改 没有结果集)
  7. 释放资源(关闭连接…)
public class JDBCDemo3 {

	public static void main(String[] args) {
		Connection conn = null;
		Statement state = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.获取连接 本地可以省略那串
			conn = DriverManager.getConnection("jdbc:mysql:///kgcnews", "root", "root");
			// 3.创建语句执行者
			state = conn.createStatement();
			// 4.编写SQL语句
			String sql = "update news_category set name = '汽车' where id = 8";
			// 5.执行SQL语句
			int rows = state.executeUpdate(sql);
			if(rows > 0) {
				System.out.println("修改成功!");
			}else {
				System.out.println("修改失败!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				state.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

在这里插入图片描述

2.2 解决SQL注入之后采用步骤

  1. 加载驱动
  2. 获取连接
  3. 编写SQL语句
  4. 根据SQL语句创建语句执行者。(预编译SQL)
  5. 如果有占位符 给占位符赋值
  6. 执行SQL语句
  7. 处理结果集…
  8. 释放资源
public class JDBCDemo5 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入用户名:");
		String username = input.next();
		System.out.print("请输入密码:");
		String password = input.next();
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			/** 1.加载驱动(驱动<对应JavaJDBC的实现类>是数据库厂商提供) */
			Class.forName("com.mysql.jdbc.Driver"); // 本来Class.forName() 获取对应的类的字节码对象
			/** 2.建立与数据库的连接 */
			// p1:数据库地址 p2:数据库用户名 p3:数据库密码
			// HTTP协议:http://localhost:8080 你现在是JDBC连接 所以它也有固定前缀 jdbc:数据库://
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/kgcnews", "root", "root");
			/** 3.准备SQL语句 */
			String sql = "select * from news_user where username = ? and password = ?";
			/** 4.创建SQL语句执行平台 */
			ps = conn.prepareStatement(sql);
			/** 5.给占位符赋值  索引从1开始 */
			ps.setString(1, username);
			ps.setString(2, password);
			/** 6.语句执行平台执行SQL语句 */
			rs = ps.executeQuery();
			/** 6.处理结果集(只在查询的时候才有,可以理解为是一个伪查询到的表) */
			// 每一次next()表示判断是否存在下一行 而且可以理解为有一个虚拟的指针指向了某行
			boolean flag = false;
			while (rs.next()) {
				flag = true;
			}
			System.out.println(flag == true ? "登录成功!" : "登录失败!");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

模糊查询 ==需要写concat 不写会报错,数据库中写写sql的话 不需要concat 代码中需要加 ==

StringBuffer sql=new StringBuffer();
			List<Object> params=new ArrayList<>();
			 sql.append("select * from news_detail where 1=1 ");
			 if(categoryId!=null && categoryId>0) {
				 sql.append(" and categoryId=? ");
				 params.add(categoryId);
			 }
			 if(!(StringUtils.isNullOrEmpty(title))) {
				 sql.append(" and title like CONCAT('%',?,'%')");
					params.add(title);
			 }
			 sql.append(" order by createDate desc limit ?,?");
			 params.add(startIdex);
			 params.add(pageSize);
			 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值