Jdbc连接数据库

   Jdbc连接数据库都需要引入相应的jdbc.jar包。

方法一:jdbc直接连接数据库

<span style="font-family:KaiTi_GB2312;font-size:18px;">try{
    //1、加载jdbc驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String  className)实现。
    Class.forName("oracle.jdbc.driver.OracleDriver");
    //2、提供JDBC连接的URL,连接URL定义了连接数据库时的协议、子协议、数据源标识。    
    //书写形式:协议:子协议:数据源标识    
    //协议:在JDBC中总是以jdbc开始    
    //子协议:是桥连接的驱动程序或是数据库管理系统名称。    
    //数据源标识:标记找到数据库来源的地址与连接端口。   
    String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //数据库用户名
    String username="****";
    //密码
    String password="****";
    //3、创建数据库的连接,要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
    Connection  conn=DriverManager.getConnection(url, username, password);
}catch(ClassNotFoundException e){
	e.printStackTrace();
}catch(SQLException e){
	e.printStackTrace();
}
</span>

    这种连接数据库的方式不够灵活,还记得在做.net项目的时候,都是讲连接数据库操作卸载配置文件中。那么,java也有同样的方法吗?

方法二:使用dom4j,jdbc连接数据库

       使用dom4j的目的就是解析xml文件,这样就可以将连接数据库的操作写入xml中,由dom4j读取出来。

       Xml文件代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<config>
	 <db-info>
		<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
		<!-- 数据库连接,oracle代表连接的是oracle数据库;thin:@localhost代表的是数据库所在的IP地址(可以保留thin:);  
        1521代表连接数据库的端口号;ORCL代表的是数据库名称   -->
		<url>jdbc:oracle:thin:@localhost:1521:orcl</url>
		<user-name>****</user-name>
		<password>****</password>
	</db-info>
</config> </span>

    读取xml文件,并将读取的结果放入实体中。

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class XmlConfigReader {
	//懒汉式(延迟加载lazy)
	private static XmlConfigReader instance = null;
	
	//保存jdbc相关配置信息
	private JdbcConfig jdbcConfig = new JdbcConfig();
	
	private XmlConfigReader() {
		//创建saxReader对象 
		SAXReader reader = new SAXReader();
		//通过当前线程的类加载器,获得文件的相对路径,将xml文件读入到输入流 
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");
		try {
			// 通过read方法读取xml文件, 转换成Document对象 
			Document doc = reader.read(in);
			
			//取得jdbc相关配置信息
			//驱动
			Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
			Element urlElt = (Element)doc.selectObject("/config/db-info/url");
			Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
			Element passwordElt = (Element)doc.selectObject("/config/db-info/password");
			
			//设置jdbc相关的配置
			jdbcConfig.setDriverName(driverNameElt.getStringValue());
			jdbcConfig.setUrl(urlElt.getStringValue());
			jdbcConfig.setUserName(userNameElt.getStringValue());
			jdbcConfig.setPassword(passwordElt.getStringValue());
			
			System.out.println("读取jdbcConfig-->>" + jdbcConfig);
		} catch (DocumentException e) {
			e.printStackTrace();
		}			
	}
	
	/** 
     * 加锁,实现多线程的同步机制,防止多线程的访问冲突 
     * @return 
     */  
	public static synchronized XmlConfigReader getInstance() {
		if (instance == null) {
			instance = new XmlConfigReader();
		}
		return instance;
	}
	
	/**
	 * 返回jdbc相关配置
	 * @return
	 */
	public JdbcConfig getJdbcConfig() {
		return jdbcConfig;
	}
}</span>
   实体类

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class JdbcConfig {
	
	private String driverName;
	private String url;
	private String userName;
	private String password;
	public String getDriverName() {
		return driverName;
	}
	public void setDriverName(String driverName) {
		this.driverName = driverName;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.getClass().getName()+"{driverName:"+driverName+",url:"+url+",userName:"+userName+",password:"+password+"}";
		
	}
}</span>

Jdbc连接数据库操作

<span style="font-family:KaiTi_GB2312;font-size:18px;">Connection conn=null;	
		try{
			JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig();
			//获取数据库连接驱动
			Class.forName(jdbcConfig.getDriverName());
			conn=DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword());
		}catch(ClassNotFoundException e){
			e.printStackTrace();
			throw new ApplicationException("系统错误,请联系管理员!");
		}catch(SQLException e){
			e.printStackTrace();
			throw new ApplicationException("系统错误,请联系管理员!");
		}
		return conn;</span>

    此步骤和第一种方法连接数据库的步骤一样,只不过,数据库连接信息都是通过dom4j读取的。

    读取到连接数据库信息后,我们就开始对数据库进行操作了。

1、 从上面的操作中拿到连接数据库信息。

2、 创建一个Statement   

    要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:  

     a、执行静态SQL语句。通常通过Statement实例实现。   

    b、执行动态SQL语句。通常通过PreparedStatement实例实现。   

    c、执行数据库存储过程。通常通过CallableStatement实例实现。

3、执行sql语句

    Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute   

    a、executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。   

    b、executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等   

    c、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

4、处理结果和关闭连接,关闭连接和打开相反。

简单操作代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">Connection  conn=DbUtil.getConnection();	//得到连接数据库信息PreparedStatement  pstmt=conn.prepareStatement(sql);    //存放sql语句,执行sql语句
pstmt.setString(1,userId);        //传递参数,参数从1开始;无参数,则不需要此步骤
ResultSet   rs =  pstmt.executeQuery();    //将结果返回给ResultSet
//处理执行结果
while(rs.next()){
    String name=rs.getString("name")
    String pass=rs.getString(1);        //此方法比较高效(列是从左到右编号的,并且从列1开始)
}
//最后关闭
DbUtil.close(rs);   
DbUtil.close(pstmt);
DbUtil.close(conn);
</span>
   若没有返回值,将ResultSet部分的代码去掉,并根据需要选择Statement实例。





你可能感兴趣的:(java)