【骐程】Java连接数据库JDBC和加载数据库的工具类JDBCUtils

19 篇文章 0 订阅
1 篇文章 0 订阅

对于Java连接数据库:

在这里面我走了很多弯路,主要有连接时驱动的加载,和我主要的sql连接
那么下面就说说这两点最好的解决方法

首先需要连接:

网上大家也都推荐使用一个工具类,也就是JDBCUtils类的类,这是一个自己写的类,但是应为在连接过程中连接方式都是一样的,所以网上也有很多写好的工具类这里网页发出下我使用的:


```java
public class JDBCUtils {
	
	public static Connection getConnection() throws Exception {
		// 1.读取配置文件中的4个基本信息
		InputStream is = JDBCUtils.class.getResourceAsStream("jdbc.properties");

		Properties pros = new Properties();
		pros.load(is);

		String user = pros.getProperty("user");
		String password = pros.getProperty("password");
		String url = pros.getProperty("url");
		String driverClass = pros.getProperty("driverClass");

		// 2.加载驱动
		Class.forName(driverClass);

		// 3.获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		return conn;
	}
	/**
	 * @Description 关闭连接和Statement的操作
	 */
	public static void closeResource(Connection conn,Statement ps){
		try {
			if(ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @Description 关闭资源操作
	 */
	public static void closeResource(Connection conn,Statement ps,ResultSet rs){
		try {
			if(ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

对于上面注意一点,就是是使用的配置文件"jdbc.properties",是写在一个file中的文件,这个是为了防止硬编码的形成,就像MySQL中的mysql.mini文件一样。JDBCUtils.class.getResourceAsStream(“jdbc.properties”);就是在加载配置文件。
配置文件里面就就是properties形式存在的文件,以键值对形式存在,里面主要就四项,也是最基本的配置文件,其中有驱动Driver,连接的URL,和登录的账号和密码。
就像user=root以键值对形式存在即可。

写好连接的工具类后就可以在自己的数据库连接过程中使用了,因为工具类中的方法都是静态方法,所以需要用类名直接调用即可。

如下就是稳定一个写的test的一个测试中的使用。

```handlebars
public class PreparedStatementUpdataTest {
	
	@Test
	public void testCommonUpdate(){
		String sql = "delete from customers where id = ?";
		updata(sql,20);
		
		System.out.println("修改成功!");
	}
	
	//通用的增删改操作:
	public void updata(String sql,Object...args){
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			//1.获取数据库的连接
			conn = JDBCUtils.getConnection();
			System.out.println("连接数据库成功!"+conn);
			//2.预编译sql语句
			ps = conn.prepareStatement(sql);
			//3.填充占位符
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			//4.执行
			ps.execute();
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			//5.关闭资源
			JDBCUtils.closeResource(conn, ps);
		}
	}
}

对于里面还有很多的细节问题,我后面再分析,发出来!
package com.hexiang.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DBConnection { /** * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(classDriver); return DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(DataSource dataSource) { try { return dataSource.getConnection(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(String jndiName) { try { Context ctx; ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiName); return dataSource.getConnection(); } catch (NamingException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(Properties properties) { try { String driver = properties.getProperty("jdbc.driverClassName"); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Class.forName(driver); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } /** * oracle连接 * * @param path * @return Connection */ public static Connection getOracleConn(String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值