数据库的查询封装,JDBC,Java

首先连接数据库

连接数据库需要两个类

Client类

package org.bwgl;

import java.sql.*;
import java.util.*;

public class Client {
	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		DBUtils dbUtils = DBUtils.getInstance();
		dbUtils.getConnection();
		System.out.println("连接成功");
		dbUtils.close();
		System.out.println("数据库连接关闭");
	}
}

DBUtils

package org.bwgl;

import java.sql.*;
import java.util.*;

public class DBUtils {
	private static DBUtils dbUtils = null;
	private Connection conn = null;
	private String url = "jdbc:mysql://localhost:3307/mywebl?user=root&password=12345";//首先确保数据库能够登录,进行操作
	
	private DBUtils() {
		super();
		// TODO Auto-generated constructor stub
	}

	public static DBUtils getInstance() throws ClassNotFoundException { //获取单例
		if(dbUtils==null) {
			dbUtils = new DBUtils();
			registerDrever();
		}
		return dbUtils;
	}

	private static void registerDrever() throws ClassNotFoundException {
			Class.forName("com.mysql.jdbc.Driver");
	}

	public boolean getConnection() throws SQLException { 
		conn = DriverManager.getConnection(url);  // 建立连接
		return conn == null? false : true;
	}

	public void close() throws SQLException {
		if(conn!=null) {
			conn.close(); // 关闭连接
		}
	}
}

连接成功:
在这里插入图片描述

插入操作

sql 语句编写


String sql = "insert into users(username,`password`) value(?,?);"; // sql 语句
		List params = new ArrayList(); // 用来存储插入数据的数组链表
		params.add(0,"kkkk");
		params.add(1,"654321");
		if(dbUtils.executeUpdate(sql,params)) { // 自定义   执行更新表的SQL语句  的方法  
			System.out.println("更新成功");
		}else {
			System.out.println("更新失败");
		}
		

实现自定义方法executeUpdate


public boolean executeUpdate(String sql,List params) throws SQLException {
		ps = conn.prepareStatement(sql); // ps 定义在顶部
		if(params!=null && !params.isEmpty()) {
			int count = params.size();
			for(int i = 0; i < count; i++) {
				ps.setObject(i + 1, params.get(i)); // 第一个参数表示插入的是第一个问号,因为下标从0开始所以i + 1;
			}
		}
		int temp = ps.executeUpdate(); // 更新次数
		return temp > 0?true : false; // 有更新次数代表成功    反之失败
	}
	

查看数据库

在这里插入图片描述
插入成功

查询

写SQL


List<Map<String,Object>> results = null; // 将查询到的结果用Map存起来放到一个List里面去
		sql = "select * from users";
		params = null; // 重置查询用到的params	避免数据冲突
		results = dbUtils.executeQuery(sql, params);  //自定义   执行查询表的SQL语句  的方法  
		for(Map<String,Object> map : results) { // 遍历所有查到的结果
			Set<String> keys = map.keySet();
			for(String columnName : keys) {
				System.out.print(columnName + "=" + map.get(columnName) + "\t");
			}
			System.out.println();
		}
		

实现自定义方法executeQuery


public List<Map<String, Object>> executeQuery(String sql, List params) throws SQLException {
		List<Map<String,Object>> result = new ArrayList<Map<String, Object>>(); 
		ps = conn.prepareStatement(sql);  // 预编译 sql 语句 ,防止sql注入,提高性能
		if(params!=null && !params.isEmpty()) {
			int count = 0;params.size();
			for(int i = 0; i < count; i++) {
				ps.setObject(i + 1, params.get(i)); // setObject(key,value)key是整数1、2、3、4等,它表示第几个问号
			}										// value 代表第几个问好的值
		}
		rs = ps.executeQuery(); // rs 在顶上定义
		while (rs.next()) {
			ResultSetMetaData meta = rs.getMetaData(); // getMetaData 返回表的字段信息 ResuSM 接受它
			int ccount = meta.getColumnCount(); // 返回字段数目
			Map<String,Object> map = new HashMap<String,Object>();  // 存储查到的内容
			for(int i = 0; i < ccount; i ++ ) {
				String columnName = meta.getColumnName(i+1);
				map.put(columnName, rs.getObject(columnName));
			}
			result.add(map);
		}
		
		return result;
	}
	

有关prepareStatement类的详解
ResultSetMetaData类的介绍
getMetaData的介绍

查询成功

在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值