问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何连接mysql通过jdbc.properties

发布网友 发布时间:2022-04-07 17:42

我来回答

2个回答

懂视网 时间:2022-04-07 22:04

       JDBC连接数据库基本的步骤是固定的,这样就可以考虑封装一个工具类来简化数据库操作。

         封装时用到了Java中的properties配置文件,是以一种键值对的形式存在的,可以把连接数据库要动态的信息保存到里面,这样比较直观,不容易出错,而且容易维护。

         把配置文件放到src下就可以,如果要放到包下面就配置文件的相对路径就必须从包名开始。

         Demo :

         db.properties

         

mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8
mysqlUser=root
mysqlPwd=1234
oracleDriver=oracle.jdbc.driver.OracleDriver
oracleURL=jdbc:oracle:thin:@localhost:1521:orcl
oracleUser=scott
oraclePwd=tiger

         JDBCUtil.java

 

package com.wxisme.jdbcutil;

import java.io.Closeable;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC数据库操作工具类 简化数据库操作
 * @author wxisme
 *
 */
public class JDBCUtil {
	//资源文件
	static Properties pros = null;
	//静态初始化 当加载JDBCUtil类时调用
	static { 
		pros = new Properties();
		try {
			//加载资源文件
			InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
			if(in == null) {
				throw new FileNotFoundException("配置文件未找到");
			}
			pros.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return Connection
	 */
	public static Connection getMySQLConnection() {
		Connection conn = null;
		try {
			//加载数据库驱动
			Class.forName(pros.getProperty("mysqlDriver"));
			//获取数据库连接
			conn = DriverManager.getConnection(pros.getProperty("mysqlURL"),
					pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static Connection getOracleConn(){
		try {
			Class.forName(pros.getProperty("oracleDriver"));
			return DriverManager.getConnection(pros.getProperty("oracleURL"),
					pros.getProperty("oracleUser"),pros.getProperty("oraclePwd"));
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 关闭io资源
	 * @param io
	 */
	public static void closeFile(Closeable ... io) {
		for(Closeable temp : io) {
			if(temp != null) {
				try {
					temp.close();
				} catch (IOException e) {
					System.out.println("文件关闭失败");
					e.printStackTrace();
				}
			}
		}
	}
	
	//关闭JDBC资源 注意顺序
	public static void close(ResultSet rs,Statement ps,Connection conn) {
		try {
			if(rs!=null){
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Statement ps,Connection conn){
		try {
			if(ps!=null){
				ps.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn){
		try {
			if(conn!=null){
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

}

   UtilTest.java

package com.wxisme.jdbcutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


public class UtilTest {

	public static void main(String[] args) {
		Connection conn = JDBCUtil.getMySQLConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "select * from student where id = ?";
		try {
			ps = conn.prepareStatement(sql);
			ps.setInt(1, 1);
			rs = ps.executeQuery();
			
			while(rs.next()) {
				System.out.println(rs.getString("name"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

 还可以进一步封装成线程安全的工具类。

封装JDBC工具类

标签:

热心网友 时间:2022-04-07 19:12

如何连接mysql通过jdbc.properties
该例子将jdbc的链接信息封装到properties文件中。并将jdbc的基本使用框架提取到一个jdbcUtils类中。简化了jdbc操作数据库的操作。
JdbcUtil工具类:
[java] view plain copy
package com.xiaohui.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public final class JdbcUtil {
private static String url;//数据库链接字符串
private static String user;//用户名
private static String pass;//密码
private static String driver;//数据库驱动
//加载类时,先将jdbc链接数据库信息获取并赋值
static {
Properties prop = new Properties();
InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("com/xiaohui/jdbc/info.properties");
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
url = prop.getProperty("url");
user = prop.getProperty("user");
pass = prop.getProperty("pass");
driver = prop.getProperty("driver");
}
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//取得链接
public static Connection getMySqlConnection(){
Connection conn=null;
try {
conn = DriverManager.getConnection(url,user,pass);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭结果集
public static void close(ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//关闭封装SQl命令的对象
public static void close(Statement state){
if(state!=null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//关闭链接
public static void close(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

当很很多用户同时操作数据库时,获取到的都是一个conn链接对象。这样肯定不行。为了让每个线程都对应唯一的conn的链接对象可对上面的工具类做如下修改:
[java] view plain copy
package com.xiaohui.jdbc.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public final class JdbcUtil {
private static String url;
private static String user;
private static String pass;
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
private static String driver;
static {
Properties prop = new Properties();
InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream(
"com/xiaohui/jdbc/config/info.properties");
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
url = prop.getProperty("url");
user = prop.getProperty("user");
pass = prop.getProperty("pass");
driver = prop.getProperty("driver");
}
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

// 让每个线程都对应唯一的一个Connection 对象
public static Connection getMySqlConnection() {
Connection conn = tl.get();
if(conn==null){
//第一次启动该线程没有绑定conn
try {
conn = DriverManager.getConnection(url, user, pass);
//将conn绑定到tl中。
tl.set(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}

public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void close(Statement state) {
if (state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void begin() {
Connection conn = getMySqlConnection();
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void commit() {
Connection conn = getMySqlConnection();
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}

public static void rollback() {
Connection conn = getMySqlConnection();
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
若cpu一秒执行n次运算需耗能5w,那执行2n次运算要耗能是大于小于还是等于... 大神们,N5G跟N5W哪里不一样? 刚出生的婴儿会感冒吗 刚出生宝宝感冒的症状 怀庄永佳福代理,什么品牌白酒好呢? 做白酒品牌代理,有怀庄永佳福牌子怎么样? 怀庄永佳福白酒喝得人多吗?代理怎么样? 为什么很多女性都把男闺密当作结婚对象? 关于电影“罗生门”的问题 实际利率法是指什么 我的家乡作文蒙文翻译 藏文作文,我的妈妈怎么写? 我的爸爸作文(蒙文) 作文蒙文题目星期天 蒙文作文 老师的爱。急用!急用!急用! 我的蒙古民族,我的骄傲作文 蒙文作文 急需 蒙文翻译作文《父母的爱》 初中生蒙语作文100字我的家庭 我的母亲蒙语作文 孝敬父母的蒙文作文 母亲的感恩用蒙语写作文 电脑音箱只有一个响怎么办? 电脑音箱为什么两个喇叭只有一个响 劳动仲裁开庭吗 劳动局开庭要收费吗? 申请劳动仲裁要开庭吗 为什么我家的电脑的音箱一个会响一个不会响? 申请劳动仲裁开庭需要交钱吗? 劳动仲裁开庭后是自己辩论,还是*派人给双方辩论,劳动仲裁开庭的费用怎么收取? 我买了只烟斗,但没有烟丝,可否用普通香烟的烟丝 烟斗应该怎么抽,烟丝该买什么样的 。。 关于烟斗的几个问题 怎么点烟斗? 国产烟丝放烟斗可以吗? 烟斗用香烟卷的烟叶会不会上瘾,用白盒将军 烟斗里面放烟草可以吗 抽烟斗有什么讲究? 有谁知道用国产烟丝如何制作成烟斗烟丝? 抽烟斗用香烟卷的烟叶会不会上瘾,用白盒将军 为什么我的PS3读不出移动硬盘?电脑上都能读出,移动硬盘是NTFS格式 烟斗能抽香烟的烟丝么 为什么我的PS3读不出外置移动硬盘 ps3无法检测到移动硬盘,是硬件问题还是系统问题 用烟斗抽烟丝和香烟哪个危害更大 PS3 外接硬盘不识别 ps3不识别移动硬盘了怎么回事 ps3 e3破解版突然不读硬盘了,怎么办! PS3无法识别移动硬盘 PS3不识别NTFS格式的移动硬盘怎么办