JDBC入门:如何动态来连接DataBase

本文介绍了一种通过配置文件来实现Java应用程序中数据库连接的方法,这种方法能够灵活地更换数据库类型,无需更改代码,适用于Oracle到MySQL等不同数据库间的转换。

工具:eclipse(Myeclipse)

jar包:

commons-collections4-4.0.jar

commons-dbcp-1.4.jar

commons-pool-1.6.jar

Oracle 11g 11.2.0.1.0 JDBC_ojdbc6.jar

1.创建一个配置文件类
<>1.步骤:创建Properties对象
<>2.创建文件路径
<>3.加载资源配置
<>4.关闭文件路径
<>5.使用加载资源对象properties调用getProperty()方法
<>6.注册驱动
2.OverRide (覆盖,复写) Connection 中的getConnection方法
将信息返回

3.关闭连接

为何要使用到配置文件.如果某个公司本来使用是Oracle数据库,当是,不需要Oracle而是MySQL数据库

这个时候需要改源代码.,让一个不懂代码的人去改动源码是非常一件危险的事情,不建议去改动源码..而是改动配置文件..这样就能到达通用效果

就像MySQL6.0以上的版本...现在基本是免安装,,已经不再用傻瓜式安装..但是MySQL需要配置..这样就非常方便了,,减少等待时间,直接改动配置文件,,就可以用了

下面的代码是配置文件代码:

	private static String driver;
	private static String url;
	private static String username;
	private static String password;
		
		//创建配置文件对象
		static{
		try{
		Properties properties = new Properties();
		
		//配置文件路徑
		InputStream inStream = JDBCDemo2.class.
		getClassLoader().
		getResourceAsStream(
				"com/csdn/jdbcdemo/date2017_11_12/propertis.txt");
		
		//加載配製文件
		properties.load(inStream);
		inStream.close();
		
		//獲取配置文件信息
		//驱动器
		 driver = properties.getProperty("driver");
		//路径
		 url = properties.getProperty("url");
		//用户名
		 username = properties.getProperty("username");
		//密码
		 password = properties.getProperty("password");
		
		//注册驱动器
		Class.forName(driver);
		
		}catch(Exception e){
			e.printStackTrace();
		}		
	}	
		public static void main(String[] args) {
			System.out.println(driver);
		}
		//数据库连接
		public static Connection getConnection() throws SQLException{
			return DriverManager.getConnection(url, username, password);
		}
		
		//关闭连接
		public static void closeConnection(Connection conn){
			try {
				if(conn != null){
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

该代码是测试代码.查看文件是否配置成功
try {
			//连接
			Connection connection = JDBCDemo2.getConnection();
			
			//DB对象
			Statement state = connection.createStatement();
			
			//SQL语句
			String sql = "SELECT * FROM EMP";
			
			//处理结果集
			ResultSet rs = state.executeQuery(sql);
			
			//遍历结果
			while(rs.next()){
				System.out.println(
						rs.getString("ENAME")+"  "+
						rs.getInt("SAL")+"   "+
						rs.getInt("DEPTNO")+"   "+
						rs.getString("EMPNP")
						);
			}
			//关闭连接
			rs.close();
			state.close();
			JDBCDemo2.closeConnection(connection);
		} catch (SQLException e) {
			e.printStackTrace();
		}

时间:2017年11月11日19:21:11写


修改:

第一次修改:

时间:

2017年11月12日10:25:40

修改:更新一些书写错误

<think>我们正在回答用户关于Containerd安装步骤使用方法的问题。根据用户要求,我们需要参考站内引用,但注意引用[1][2]是关于Containerd的,其中引用[1]提到了Containerd的简介安装教程的环境准备,引用[2]则涉及Containerd Stargz Snapshotter的无根模式配置。不过,用户的问题集中在安装指南基本用法,因此我们将重点放在安装基本使用上。 安装步骤(以Ubuntu为例): 1. 环境准备:确保系统满足要求(64位Linux,内核版本>=4.0) 2. 安装依赖:apt-get update, apt-get install -y containerd 3. 配置:默认配置文件在/etc/containerd/config.toml,可以通过containerd config default > /etc/containerd/config.toml生成默认配置 4. 启动服务:systemctl start containerd 基本使用方法: 1. 运行容器使用ctr命令(Containerd自带的命令行工具) 例如:ctr images pull docker.io/library/nginx:alpine ctr run docker.io/library/nginx:alpine nginx 2. 管理容器:ctr container list, ctr task list 注意:ctr命令主要用于调试,生产环境通常通过Kubernetes等编排工具使用Containerd。 参考引用[1]中提到的CRI接口,我们可以简要说明如何与Kubernetes集成: 在Kubernetes中,需要配置kubelet使用Containerd作为运行时,在kubelet的启动参数中设置: --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock 另外,引用[2]中提到了Stargz Snapshotter的配置,这是一种优化镜像拉取启动的插件,如果用户需要,我们可以简要提及如何配置: 在config.toml中配置snapshotter为stargz,并按照引用[2]的示例设置存储路径。 但是,由于用户主要询问安装基本使用,我们不会深入插件配置,除非用户特别提到。 因此,回答将分为两部分:安装步骤基本使用方法。 注意:由于用户是在Docker容器中运行Java程序时遇到了问题,但当前问题转向了Containerd,所以我们需要确保回答的针对性。 最后,生成相关问题。</think>以下是 Containerd 的完整安装指南与基本用法详解,基于 Linux 环境(Ubuntu/CentOS): --- ### **一、Containerd 核心优势** 1. **轻量化**:比 Docker 减少 40% 内存占用[^1] 2. **高性能**:容器启动速度提升 20%+ 3. **标准兼容**:原生支持 CRI(Kubernetes 容器运行时接口) 4. **模块化架构**:可按需扩展功能(如快照、网络插件) --- ### **二、安装步骤** #### 1. 环境准备 ```bash # 卸载旧版本 sudo apt remove containerd runc || sudo yum remove containerd.io # 安装依赖 sudo apt install -y apt-transport-https ca-certificates curl gnupg || \ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ``` #### 2. 安装 Containerd ```bash # Ubuntu/Debian curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update && sudo apt install -y containerd.io # CentOS/RHEL sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y containerd.io ``` #### 3. 配置 Containerd ```bash # 生成默认配置 sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # 启用 Systemd cgroup(Kubernetes 必需) sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml ``` #### 4. 启动服务 ```bash sudo systemctl daemon-reload sudo systemctl enable --now containerd sudo systemctl status containerd # 验证状态 ``` --- ### **三、基本使用指南** #### 1. 镜像管理 ```bash # 拉取镜像 sudo ctr images pull docker.io/library/nginx:alpine # 列出镜像 sudo ctr images ls # 导出/导入镜像 sudo ctr images export nginx.tar docker.io/library/nginx:alpine sudo ctr images import nginx.tar ``` #### 2. 容器操作 ```bash # 运行容器 sudo ctr run --rm -t docker.io/library/alpine:latest myalpine sh # 查看运行容器 sudo ctr containers ls # 执行命令 sudo ctr task exec -t --exec-id $RANDOM myalpine ls / # 删除容器 sudo ctr container rm myalpine ``` #### 3. 网络配置(CNI插件) ```bash # 安装CNI插件 wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz sudo mkdir -p /opt/cni/bin && sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz # 创建网络配置文件 sudo mkdir /etc/cni/net.d echo '{ "cniVersion": "0.4.0", "name": "mynet", "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "subnet": "10.88.0.0/16", "routes": [{ "dst": "0.0.0.0/0" }] } }' | sudo tee /etc/cni/net.d/10-mynet.conflist ``` --- ### **四、Kubernetes 集成** 1. 配置 kubelet(`/var/lib/kubelet/kubeadm-flags.env`): ```env KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock" ``` 2. 重启服务: ```bash sudo systemctl restart kubelet ``` --- ### **五、性能优化技巧** ```toml # /etc/containerd/config.toml 优化项 [plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "stargz" # 使用快速快照[^2] discard_unpacked_layers = true # 节省磁盘 [debug] level = "warn" # 减少日志量 ``` --- ### **六、故障排查** ```bash # 查看运行时日志 journalctl -u containerd -f # 检查 CRI 连接 sudo ctr --address /run/containerd/containerd.sock version # 验证快照状态 sudo ctr snapshot ls ``` > **提示**:生产环境建议启用 `seccomp` `AppArmor` 安全配置[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值