需要获取除配置的数据库外手动配置数据库去获取数据,当然手动创建JDBC连接多少需要了解一下,结合文章和自己的理解,记录一下,方便后续借鉴
最基础的JDBC连接我就不再阐述了,这里简单介绍一下连接和取数,首先创建连接工具类:
public class ConnectUtilsSec {
private String driverName;
private String dbURL;
private String userName;
private String userPwd;
public ConnectUtilsSec(){
}
public ConnectUtilsSec(String driverName, String dbURL, String userName, String userPwd){
this.driverName = driverName;
this.dbURL = dbURL;
this.userName = userName;
this.userPwd = userPwd;
}
public Connection getConnection()
{
Connection conn = null;
try
{
// 加载JDBC驱动
Class.forName(this.driverName);
// 获取连接
conn = DriverManager.getConnection(this.dbURL, this.userName, this.userPwd);
return conn;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
public String getDbURL() {
return dbURL;
}
public void setDbURL(String dbURL) {
this.dbURL = dbURL;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
然后根据数据库的类型处理驱动及相关属性
String driverName = "";//驱动属性
String dbURL = "";//驱动属性
String ipadd = “”;//数据库所在服务器地址
String dataName = “”;//具体数据库
String userName = “”;//连接用户名
String userPwd = “”;//连接密码
switch (“数据库类型”){//多数据库方法通用化,这里暂且介绍ORCLE、SQLSERVER、PG的驱动属性,结尾有链接可以查看更多
case "ORCLE":
driverName = "oracle.jdbc.driver.OracleDriver";
dbURL = "jdbc:oracle:thin:@"+ipadd+":1521:orcl";
break;
case "SQLSERVER":
driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
dbURL = "jdbc:microsoft:sqlserver://"+ipadd+":1433;DatabaseName="+dataName;
break;
case "PG":
driverName = "org.postgresql.Driver";
dbURL = "jdbc:postgresql://"+ipadd+"/"+dataName;
break;
default:
break;
}
接下来根据配置的连接信息,创建连接,获取数据。
//日志打印
private Logger logger = LoggerFactory.getLogger(this.getClass());
try {
//创建连接类
ConnectUtilsSec connectUtilsSec = new ConnectUtilsSec(driverName,dbURL,userName,userPwd);
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
//设置参数
String para= "para";
//构建sql
String sql = "select * from usertable where id = ? ";
//获取连接
conn = connectUtilsSec.getConnection();
if(null == conn){
throw new RuntimeException(“数据库连接失败”);
}
ps = conn.prepareStatement(sql);
//设置sql中问号索引参数,防sql注入
ps.setString(1,para);
//获取参数
rs = ps.executeQuery();
/*如果想执行删除或者新增则使用 ps.executeUpdate();返回的是行数
记得设置事务, conn .setAutoCommit(false);
成功则提交 conn .commit();
失败则回滚 conn .rollback(); */
ArrayList<HashMap> arrayList = new ArrayList<>();
从返回的rs里取数并放入map存入list
while(rs.next()) {
//创建map对象,如果是实体类可以创建实体类并依次设值
HashMap <String,Object> map = new HashMap<>();
//根据sql取数,列名获取值
String id= rs.getString("id");
map.put("id", id);
String name= rs.getString("name");
map.put("name", name);
arrayList.add(map);
}
//关闭连接 循环使用的话需要每一次循环都关闭,不然内存急速增长,造成OUT OF MEMORY ERROR异常
rs.close();
ps.close();
conn.close();
} catch (Exception e) {
//异常处理
logger.error(e.getMessage());
}finally {
try {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
//异常处理
logger.error(e.getMessage());
}
}
其实这个封装的工具类是个残次品,可以说是没作用,在这里显得多此一举,一开始的目的是为了后续增删改查等一系列的方法通用,后来发现用不到就不作多余补充了,暂且先这样吧,另外再记录一个比SimpleDateFormat好用且线程安全的日期类
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
//将2021-03-18 字符串改成 yyyyMMdd的日期格式
LocalDate date = LocalDate.parse(“2021-03-18”, formatter);
//将20210318 的日期格式改成 yyyy-MM-dd的字符串
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateString = date.format(fmt);
作此记录以便后续用到再借鉴,如有不对或者有误的地方烦请各位大神指出,以免误导他人。
最后相关数据库的连接驱动信息链接如下:
链接: 数据库的连接驱动.