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实例。