maven项目连接数据库基本查询步骤和封装

标签: 数据库  mysql  java  jdbc  maven

数据库连接并打印输出内容

相关代码:

//数据库驱动加载
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功");
//数据库连接
Connection con=  DriverManager.getConnection("jdbc:mysql://localhost:3306/book?useSSL=false","root","123456");
System.out.println("数据库连接成功");
//数据库查询语句,查询表内相应内容
PreparedStatement pst = con.prepareStatement("select * from t_mysql_boys");
ResultSet rs = pst.executeQuery();
while (rs.next()) {
//打印表内容
		System.out.println(rs.getInt("id")+"::"+rs.getString("boyName")+"::"+rs.getString("userCP"));
	}
//关闭流
rs.close();
pst.close();
con.close();

在这里插入图片描述

对数据库连接封装

新建一个jdbc.properties文件,文件存放数据库连接相应内容,下次登录数据库修改文件对应内容即可
在这里插入图片描述

Java 读取 .properties 配置文件的几种方式

Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中。然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配置文件就比较容易。
介绍几种读取方式:

1、基于ClassLoder读取配置文件

注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便。**

1     Properties properties = new Properties();
2     // 使用ClassLoader加载properties配置文件生成对应的输入流
3     InputStream in = PropertiesMain.class.getClassLoader().getResourceAsStream("config/config.properties");
4     // 使用properties对象加载输入流
5     properties.load(in);
6     //获取key对应的value值
7     properties.getProperty(String key);

2、基于 InputStream 读取配置文件(我写的时候用的方法)

注意:该方式的优点在于可以读取任意路径下的配置文件

1     Properties properties = new Properties();
2     // 使用InPutStream流读取properties文件
3     BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/config.properties"));
4     properties.load(bufferedReader);
5     // 获取key对应的value值
6     properties.getProperty(String key);

3、通过 java.util.ResourceBundle 类来读取,这种方式比使用 Properties 要方便一些

通过 ResourceBundle.getBundle() 静态方法来获取(ResourceBundle是一个抽象类),这种方式来获取properties属性文件不需要加.properties后缀名,只需要文件名即可

1    properties.getProperty(String key);
2     //config为属性文件名,放在包com.test.config下,如果是放在src下,直接用config即可  
3     ResourceBundle resource = ResourceBundle.getBundle("com/test/config/config");
4     String key = resource.getString("keyWord"); 

相关代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
//加载驱动和链接数据库类
public class QuDong {
    //	加载驱动
    private static String driver;
    private static String url;
    private static String userName;
    private static String password;
    static {
        Properties p = new Properties();
        try {
            //读取文件
            p.load(new BufferedReader(new FileReader("jdbc.properties")));
            //读取文件内容(键值对)
            driver = p.getProperty("mysql.driver");
            url = p.getProperty("mysql.url");
            userName = p.getProperty("mysql.userName");
            password = p.getProperty("mysql.password");
            Class.forName(driver);
            System.out.println("加载驱动成功");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //Connection 与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,userName,password);
    }
}

封装:

在这里插入图片描述

调用:

在这里插入图片描述

对数据库读取内容封装

设计一个属性类,对应数据库表列名相应内容

public class ShuXing {
    private  int id;
    private  String boyName;
    private int userCP;

    public ShuXing(int id, String boyName, int userCP) {
        this.id = id;
        this.boyName = boyName;
        this.userCP = userCP;
    }

    public ShuXing() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBoyName() {
        return boyName;
    }

    public void setBoyName(String boyName) {
        this.boyName = boyName;
    }

    public int getUserCP() {
        return userCP;
    }

    public void setUserCP(int userCP) {
        this.userCP = userCP;
    }

    @Override
    public String toString() {
        return "ShuXing{" +
                "id=" + id +
                ", boyName='" + boyName + '\'' +
                ", userCP=" + userCP +
                '}';
    }
}

封装读取数据库内容相关代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class ChuLi<T> {
    public List<T> chuLi(String str,Class clz) throws InstantiationException {
    	 List<T> list = new ArrayList<T>();
        Connection con;
        {
            try {
                //调用数据库
                con = QuDong.getConnection();
                //查询数据库内容
                PreparedStatement pst = con.prepareStatement(str);
                //获得数据库内容
                ResultSet rs = pst.executeQuery();
                T t;
                while (rs.next()) {
                    //通过反射获得一个类实例对象
                    t = (T) clz.newInstance();
                    //获得属性集合
                    Field[] fields = clz.getDeclaredFields();
                    for (Field field : fields) {
                        //获得设置私有属性权限
                        field.setAccessible(true);
                        //赋值
                        field.set(t,rs.getObject(field.getName()));
                        //关闭设置私有属性
                        field.setAccessible(false);
                    }
                    list.add(t);
                }
                rs.close();
                pst.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
		return list;
    }
}

在这里插入图片描述

通过封装好的类进行调用连接数据库并打印相应内容

相关代码:


import java.sql.SQLException;
import java.util.List;


public class Demo extends ChuLi<ShuXing>{
	public List<ShuXing> list() throws InstantiationException {
		return super.chuLi("select * from t_mysql_boys",ShuXing.class);
	}
	public static void main(String[] args) throws SQLException, InstantiationException {
		Demo demo = new Demo();
		List<ShuXing> list = demo.list();
		for (ShuXing user : list) {
			System.out.println(user);
		}
		
	}

}

调用封装好的数据库方法使用

在这里插入图片描述

版权声明:本文为weixin_48776050原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48776050/article/details/107894961

智能推荐

ssm项目连接SQLite数据库

                                 &n...

django 项目连接多个数据库

修改项目的 settings 配置 在 settings.py 中配置需要连接的多个数据库连接串 DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, ‘NAME’: ‘app01’, # 使用数据库的名...

web、Java项目连接Oracle数据库

参考博客链接:https://blog.csdn.net/qq_39231769/article/details/99675894 (此为MySQL数据库) 没学过Java EE,不了解这种语言是怎么的原理和情况。本次尝试使用eclipse,但是不是for java developers,而是第二个for Javaee developers(名字可能有些不一样)但是图标一样就好。 懒得截图,有细节...

maven mybatis 连接数据库

数据库版本:MySQL8.0.19 目录结构: pom.xml文件: domain->address.java文件和dao->IAddressDao.java接口 mybatis主配置文件: IAddressDao.xml配置文件 Test测试类:...

solr连接数据库查询

参考链接:http://www.cnblogs.com/xbgfy/articles/5623501.html 接下来进行solr连接数据库,生成索引,以及查询方法。  数据库建表语句: 1 2 3 4 5 6 7 8 9 10 11 12 13 1、将数据库驱动包放入solr项目工程中(我用的mysql,使用jar包mysql-connector-java-5.1.18-bin.jar...

猜你喜欢

Python+Selenium+Autolt选择本地文件上传至网站

如果网站有上传文件的功能,selenium不提供对本地元素的定位,如何使用python选择本地文件进行上传呢 可以使用Autolt工具上传文件: 1、下载网址:https://www.autoitscript.com/site/autoit/downloads/ 2、点击“Downlad ZIP”下载 3、解压缩下载的ZIP文件 4、打开脚本编辑器文件夹,有一个SciTE....

数据结构系列之一-线性表

数据结构系列--线性表 慧子和她的3D 慧子和她的3D      暑期工作搞不下去,不如趁着现在整块时间搞编程。学习资料书《大话数据结构》,前面两章的铺垫感性知识,看看过,从第三章开始正餐。 01 — 线性表 线性表:零个或多个数据元素的有限序列。用数学语言表达:       ...

Linux系统的远程操作练习

目录 一、将虚拟机Ubuntu系统的网络连接设置为“桥接模式”,并配置Ubuntu的IP、网关参数 二、在win10系统下用putty登录ubuntu系统 三、VNC server VNC viewer 思考 一、将虚拟机Ubuntu系统的网络连接设置为“桥接模式”,并配置Ubuntu的IP、网关参数 1.打开虚拟机,进入设置 点击网络适配器,选择桥...

ORACLE----TimeStamp(时间戳)自动更新

之前对id的自增长进行了设置,原以为时间戳的更新也类似,使用序列之类的,但最终发现跟序列没半毛钱关系。触发器是肯定要用的,但编写脚本也是需要的。 (1)创建触发器 图2中,我们要选择事件(即例子中的INSERT,UPDATE),触发时间(即INSERT,UPDATE事件的前或后,例子中是before),列(例子中为MODIFIED_DATE,为TimeStamp类型),新旧值(为系统默认值OLD和...

数字图像处理:对数变换

设置窗口大小的函数: namedWindow("窗口名", 0); resizeWindow("窗口名", width, height);...