Java Web开发系列课程_JDBC
- 实现java对数据库的访问,通过一组类与接口,位于java.sql和javax.sql包中
- JDBC连接数据库步骤
以oracle数据库为例,将数据库驱动Jar包放在/Javax项目/WebRoot/WEB-INF/lib下
1.加载驱动
Class.forName("com.mysql.jdbc.Driver");//加载mysql数据库
Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库
//后加载(桥接)即java反射机制
2.获取连接
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
//String url = "jdbc:mysql://localhost:3306/kgcnews"//mysql数据库
String user = "scott";
String password = "tiger";
Connection connection = DriverManager.getConnection(url,user,password);
//导入包的时候导入java.sql的接口包
//MyEclipse中alt+/导包
3.创建Statemen或PreparedStatement对象、执行sql语句(oracle)
Stirng sql = "select * from emp;";
Statement stmt = connection.createStatement();//通过连接创建statement对象
ResultSet rs = stmt.executeQuery(sql);//通过statement执行sql
Stirng sql = "select * from emp where empno = ?;";
Statement stmt = connection.prepareStatement(sql);//通过连接创建preparedstatement对象,它可以预编译
stmt.setString(1,empno);//将第一占位符?赋值empno
ResultSet rs = stmt.executeQuery();//通过statement执行sql
4.返回并处理执行结果
while(rs.next()){
//int id = rs.getInt(1);
//String title = rs.getString(2);
int id = rs.getInt("id");
String title = rs.getString("title");
system.out.println(id+"\t"+title);
}
5.释放资源
finally{
//关闭资源
try {
rs.close();
stmt.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
数据库公共操作
创建基类,把公共的部分单独提取出来
//获取连接的方法
private boolean getConnection(String url, String user, String password) {
// TODO Auto-generated method stub
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
配置文件存储数据库信息
配置文件dataBaseManager.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.connection.url=jdbc:oracle:thin:@124.132.151.51:1521/hydee
jdbc.connection.username=h2
jdbc.connection.password=hydeesoft
基类baseDao.java
try {
Class.forName(ConfigManager.getInstance().getString("jdbc.driver"));
String url = ConfigManager.getInstance().getString("jdbc.connection.url");
String user = ConfigManager.getInstance().getString("jdbc.connection.username");
String password =ConfigManager.getInstance().getString("jdbc.connection.password") ;
connection = DriverManager.getConnection(url, user, password);
}
单例模式管理类
package cn.kgc.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//读取属性文件,获取数据库连接
//用户只需要new就可以;创建单例模式,1、将构造方法私有化;2、程序提供唯一对象
//单例实现方式,懒汉,饿汉
public class ConfigManager {
private static ConfigManager configManager;
Properties Properties;
private ConfigManager() {
String configFile = "database.properties";
InputStream in = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
Properties = new Properties();
try {
Properties.load(in);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getString(String key){
// TODO Auto-generated method stub
return Properties.getProperty(key);
// TODO Auto-generated method stub
}
//提供给别人唯一的configmaneger对像,懒汉方式,添加锁,避免锁死,线程不安全
public synchronized static ConfigManager getInstance(){
if (configManager ==null) {
configManager = new ConfigManager();
}
return configManager;
}
/*//提供给别人唯一的configmaneger对像,饿汉方式
public static ConfigManager getInstance(){
return configManager;
}*/
}
JSP动作标签及第三方控件
JSP动作标签include的使用
使用页面跳转
数据源和连接池
- 数据源
javax.sql.DataSource接口负责建立与数据库的连接,由Tomcat提供,将连接保存在连接池中
- 数据源连接数据库,获取连接(Connection)对象
Tomcat配置数据源步骤提示,配置Tomcat的conf/context.xml
<Resource name="jdbc/news"
auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="root" password="kgc"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/kgcnews"/>
- 连接池管理连接(Connection)对象
- 程序中使用JNDI获取数据源
//获取与逻辑名称相关的数据源名称
DateSource ds = (DataSource)连接.lookup("java:comp/env/jdbc/news");
- 获取数据库连接
Connection connection = ds.getConnection();