zoukankan      html  css  js  c++  java
  • 连接数据库的方法

    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语句。,进而实现对后台数据库进行相应的操作!!!

  • 相关阅读:
    elasticsearch配置文件详解
    《禅的故事》--易中天
    《爱你就像爱生命》--王小波
    Adaboost算法及其代码实现
    HOG特征原理及代码实现
    SMO算法--SVM(3)
    非线性支持向量机SVM
    核方法-核技巧-核函数
    线性可分支持向量机与软间隔最大化--SVM(2)
    拉格朗日乘子(Lagrange multify)和KKT条件
  • 原文地址:https://www.cnblogs.com/FanSunny/p/4883090.html
Copyright © 2011-2022 走看看