1、使用工具类及其配置文件的方法,连接后台的数据库
【优点:可以连接不同的数据库,对数据库的类型进行了逐一的设置】
【缺点:对数据库操作的sql语句的编写,比较单一,当进行数据库表操作时,sql语句需要写在相应的方法内,当出错时,改起来不好找,比较麻烦】
init.properties数据库的相关属性对象的配置
ip=127.0.0.1 //ip地址
port=1433 //端口号
dbtype=sqlServer //数据库类型
dbname=fdx //数据库名
username=sa //用户名
password=abc1234565 //密码
DBUtils工具类【连接数据库的工具包】
package com.fdx.Utils;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtils {
private static Properties p = new Properties();
static{
try {
p.load(DBUtils.class.getResourceAsStream("init.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("没有找到配置文件");
}
}
//创建连接数据库连接
public static Connection getConnection() {
Connection conn = null;
String ip = p.getProperty("ip").trim().toLowerCase();
String port = p.getProperty("port").trim().toLowerCase();
String dbname = p.getProperty("dbname").trim().toLowerCase();
String dbtype = p.getProperty("dbtype").trim().toLowerCase();
String username = p.getProperty("username").trim().toLowerCase();
String password = p.getProperty("password").trim().toLowerCase();
/**
*根据dbtype的不同,选择不同的数据库类型
*
/
if (dbtype.equals("oracle")) {//连接Oracle数据库
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("驱动类没找到"+e.getMessage());
}
//获取连接对象
StringBuffer url = new StringBuffer();
url.append("jdbc:oracle:thin:@");
url.append(ip);
url.append(":");
url.append(port);
url.append(":");
url.append(dbname);
try {
conn= DriverManager.getConnection(url.toString(),username,password);
} catch (SQLException e) {
System.out.println("数据库连接项错误");
}
}
if (dbtype.equals("mysql")) {//连接MySQL数据库
//MySql数据库的url是这个样子的:
//jdbc:mysql://localhost:3306/mysql?characterEncoding=utf8
try {
Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("驱动类没找到"+e.getMessage());
}
//获取连接对象
StringBuffer url = new StringBuffer();
url.append("jdbc:mysql://");
url.append(ip);
url.append(":");
url.append(port);
url.append("/");
url.append(dbname);
try {
conn= DriverManager.getConnection(url.toString(),username,password);
} catch (SQLException e) {
System.out.println("数据库连接项错误");
}
} if (dbtype.equals("sqlserver")) {
//连接SqlServer数据库,url路径格式是一定的:jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=fdx,
//其中端口号后面必须使用分号,使用其他的是行不通的
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
System.out.println("驱动类没找到"+e.getMessage());
}
//获取连接对象
StringBuffer url = new StringBuffer();
url.append("jdbc:sqlserver://");
url.append(ip);
url.append(":");
url.append(port);
url.append(";");
url.append("DatabaseName=");
url.append(dbname);
try {
conn= DriverManager.getConnection(url.toString(),username,password);
} catch (SQLException e) {
System.out.println("数据库连接项错误");
}
}
return conn;
}
//关闭数据库中的连接对象
public static void close(Connection conn,PreparedStatement pstat,ResultSet rs){
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstat != null){
try {
pstat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
方法二:使用Spring+iBatis框架的方式,专门有一个XXXsqlMap.xml配置文件,专门放sql语句的文件,设计到sql语句的方法中,直接调用即可【自己测试的有dao接口,其中的方法名要与sqlMap中的sql语句的id值相一致的,这样子才可以与后台数据库建立联系;】
--------{实体类、实体类sqlMap配置文件,都可以直接生成出来的,具体直接生成的方式,待续中,,,,,}
连接数据库的属性对象配置文件config.properties
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
validationQuery=SELECT 1
jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=fdx
jdbc_username=sa
jdbc_password=abc123456
然后再在spring-mybatis.xml配置文件中,配置有关连接数据库的相关信息【即数据源】
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
......
在相应的sqlMap配置文件中配置有关的sql语句
......
dao接口中,方法名要与sqlMap配置文件中的sql的id值相一致的【切记】
比如:
public interface UserDao {
// 根据id查询用户信息(ok)
public User selectByPrimaryKey(String id);
// 查询所有信息(ok)
public List<User> getAll();
// 查询最大id值(ok)
public String selectMaxId();
// 删除用户信息【根据id】(ok)
public void deleteByPrimaryKey(String id);
// 插入用户信息(ok)
public void insert(User user);
// 有选择性的插入操作(ok)
public void insertSelective(User user);
service业务逻辑接口
public interface UserService {
public User getUserById(String id);//(ok)
// public void deleteById(String id);//(ok)
public void insertUser(User user);//(ok)
public List<User> getAllUser();//(ok)
// public void update(User user);//(ok)根据id修改用户密码,姓名,角色,生日
public void insertSelect(User user);//选择性的插入操作(ok)
serviceImpl实现类
package fdx.service;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import fdx.dao.UserDao;
import fdx.model.User;
import fdx.service.UserService;
@Service("userService")
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//根据id查询用户信息(ok)
public User getUserById(String id) {
return userDao.selectByPrimaryKey(id);
}
//根据id删除用户信息
public void deleteById(String id) {
System.out.println("删除用户id"+id);
System.out.println("用户信息的名字:"+userDao.selectByPrimaryKey(id).getName());
userDao.deleteByPrimaryKey(id);
System.out.println("已删除成功!!");
}
//插入用户信息,主键自动增长(ok)
public void insertUser(User user) {
//调用方法,获取到最大的id值
String id = userDao.selectMaxId();
System.out.println("获取到的最大id值:"+id);
int num = Integer.parseInt(id.trim());//再没有trim()方法时,出现异常;Integer.parseInt(str),参数只能是纯数字的组合才能转换,所以使用trim()方法,进行去除一下空格;且得到的id值里面有空格的存在;
num = num +1;
//将数字转换成字符串格式
String sid = String.valueOf(num);
//对主键id,出生日期(获取到当前系统的日期)进行设置;
user.setId(sid);
user.setBirth(new Date());
userDao.insert(user);
System.out.println("插入之后:测试成功");
}
//查询所有用户信息(ok)
public List<User> getAllUser() {
List<User> list = null;
list = userDao.getAll();
return list;
}
}
进行JUnit测试【模块式的测试方式】
package fdx.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.junit.runner.Request;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sun.applet.Main;
import fdx.model.User;
import fdx.service.UserService;
public class TestMy {
@Test
public void test(){
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[] { "spring.xml", "spring-mybatis.xml"});
UserService us = (UserService) ac.getBean("userService");
//根据id查询用户
// System.out.println(us);
User u = us.getUserById("1002");
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(u.getId()+u.getName()+u.getPwd()+sf.format(u.getBirth()));
}
}
其中spring.xml配置文件中相应的内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<!-- 引入属性文件,用于连接数据库、classpath表示的是src/main/resources目录下 -->
<context:property-placeholder location="classpath:config.properties" />
<!-- 自动扫描(自动注入) ,扫描相应的service包-->
<context:component-scan base-package="fdx.service" />
<context:annotation-config/>
</beans>
得到的结果是:
1002 hahah 000000 2015-09-24
【接触到的项目,使用的也是SSI框架,其中与数据库的连接,对后台数据库进行的操作,也是使用的sqlMap配置文件配置sql语句,然而不同的是,她们封装好的类用来获取sqlMap中sql的id值,进而得到相应的sql语句,直接调用类中的方法就可以得到想要的sql语句。,进而实现对后台数据库进行相应的操作!!!】