jdbc——程序优化
来源:互联网 发布:简单优化模板源码下载 编辑:程序博客网 时间:2024/06/16 11:50
用简单的jdbc语句操作数据库很不方便,即使加入了事务思想减少了错误的发生,但也仍避免不了其臃肿混乱的操作,因此接下来的优化思想绝对值得一看:
程序的优化主要分为以下步骤:
1、 配置文件(db_config.properties):将对数据库连接要求的信息存在特定的配置文件中,以方便操作。一般配置文件中会有以下信息
(1) 驱动:driver=com.mysql.jdbc.Driver
(2) 数据库连接url:db_url=jdbc:mysql://localhost:3306/jsp_db
(3) 数据库登录名:user=root
(4) 数据库登录密码:password=******
2、建立一个连接工厂类(ConnectionFactory),用于读取1中配置文件信息以及为数据库操作提供数据库连接。3、创建实体类,实体类可以看成数据库中的表,一个实体类就是一个表,表中每一列对应实体类的属性。但要注意的是,数据库的表的主键设置成抽象类,被对应类继承,同时每个类都要设置get和set方法,用于数据读取和插入等。
4、 创建Dao实现类(接口):规范确定各实体类的操作
5、 创建操作类,实现自4中的接口:
6、 测试,数据库操作步骤:
(1) 通过工厂类创建连接
(2) 设置事务不自动提交:conn.setAutoCommit(false);
(3) 新建实体类,同时get或set相应数据
(4) 新建Dao类,用以执行操作:UserDao userDao = new UserProcess(); userDao.save();
(5) 提交事务:conn.commit();
(6) 关闭事务:conn.close();
这种方式把对数据库的操作运用到面向对象的思想,将对单个数据的操作变成对类的操作,方便且实用,而且不易出错!!
具体代码如下:
2、创建连接
publicclass ConnectionFactory {
privatestatic Stringdriver;
privatestatic Stringdb_url;
privatestatic Stringuser;
privatestatic Stringpassword;
public Connectionconn;
//工厂实例
privatestaticfinal ConnectionFactoryfactory =new ConnectionFactory();
//静态代码块,从属性文件中读取关键字
//初始化类,只执行一次
static{
Propertiesprop = new Properties();//保存、处理属性文件中的键值对
try {
//获取配置文件信息
InputStreamin = ConnectionFactory.class.getClassLoader().getResourceAsStream("db_conf.properties");
prop.load(in);
}catch (IOException e) {
System.out.println("=====配置文件读取错误=====");
e.printStackTrace();
}
driver = prop.getProperty("driver");
db_url = prop.getProperty("db_url");
user = prop.getProperty("user");
password = prop.getProperty("password");
}
public ConnectionFactory() {}
//单例化类,保证程序运行期间只要一个ConnectionFactory存在
publicstatic ConnectionFactory getInstance(){
returnfactory;
}
//创建连接方法,返回一个Connection用于数据库连接
public Connection makeConnection(){
try {
Class.forName(driver);
conn = DriverManager.getConnection(db_url,user,password);
}catch (Exception e) {
e.printStackTrace();
}
returnconn;
}
3、(1) 主键实体类(IdEntity):
publicabstractclass IdEntity {
protectedlongid;
publiclong getId() {
returnid;
}
publicvoid setId(long id) {
this.id = id;
}
}
(2) 用户实体类(User):
publicclass Userextends IdEntity{
private Stringname;
privateString password;
private Stringemail;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getPassword() {
returnpassword;
}
publicvoid setPassword(String password) {
this.password = password;
}
public String getEmail() {
returnemail;
}
publicvoid setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return"User [name=" +name + ",password=" + password + ", email="+email + ",id=" + id +"]";
}
}
4、UserDao:publicinterface UserDao {
publicvoid save(Connection conn,User user)throws SQLException;
publicvoid update(Connection conn,long id,User user)throws SQLException;
publicvoid delete(Connection conn,User user)throws SQLException;
}
5、
publicclass UserProcessimplements UserDao {
@Override
publicvoid save(Connection conn, User user)throws SQLException {
PreparedStatementps = conn.prepareCall("INSERT INTO tbl_user(name,password,email) VALUES (?,?,?)");
ps.setString(1,user.getName());
ps.setString(2,user.getPassword());
ps.setString(3,user.getEmail());
ps.execute();
}
@Override
publicvoid update(Connection conn,long id, User user)throws SQLException {
StringupdateSql = "UPDATEtbl_user SET name = ?,password = ?,email = ? WHERE id = ?";
PreparedStatementps = conn.prepareCall(updateSql);
ps.setString(1,user.getName());
ps.setString(2,user.getPassword());
ps.setString(3,user.getEmail());
ps.execute();
}
@Override
publicvoid delete(Connection conn, User user)throws SQLException {
StringdeleteSql = "DELETEFROM tbl_user WHERE id = ?";
PreparedStatementps = conn.prepareCall(deleteSql);
ps.setLong(1,user.getId());
ps.execute();
}
}
6、public class UserDaoTest {publicstaticvoid main(String[] args) {
Connectionconn = null;
try {
conn= ConnectionFactory.getInstance().makeConnection();
conn.setAutoCommit(false);
UserDaouserDao = new UserProcess();
Usermeimei = new User();
meimei.setName("meimei");
meimei.setPassword("199610");
meimei.setEmail("meimei@gmain.com");
userDao.save(conn,meimei);
conn.commit();
System.out.println("操作成功!");
}catch (SQLException e) {
e.printStackTrace();
try {
conn.rollback();
}catch (SQLException e1) {
e1.printStackTrace();
System.out.println("回滚失败!");
}
}finally{
try {
conn.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
}
- jdbc——程序优化
- JDBC编程之程序优化
- JDBC编程之程序优化
- JDBC学习笔记——JDBC性能优化
- JDBC学习笔记——JDBC性能优化
- JDBC编程-优化程序(六)
- JDBC编程-优化程序(六)
- WebLogic Server 性能优化—JDBC连接池篇
- jdbc 优化
- JDBC优化
- JDBC优化
- JDBC基础学习笔记_05_jdbc的程序优化_DTC相关
- JDBC基础学习笔记_05_jdbc的程序优化_Dao
- 优化---JDBC优化
- JDBC——让java程序连上数据库
- jdbc连接mysql——经典java小程序
- JSP基础(十三)——编写JDBC程序
- 优化程序性能(1)——基础优化
- 基于RNN的文本生成算法的代码运转
- Dagger2的使用与理解(1)
- MyBatis3入门程序(02_注册别名typeAlias)
- AOJ 0005 GCD and LCM
- Redis主从配置详细过程
- jdbc——程序优化
- Jmeter+jenkins接口性能测试平台实践整理(一)
- ajax轮询 学习心得
- MyBatis3入门程序(03_使用Mapper接口方式)
- AsyncTask加载图片。
- MyBatis3入门程序(04_动态SQL)
- 【Unity3d_常用模块】客户端资源版本更新模块(资源热更新)
- MyBatis3加强(01_基于纯annotation的Mapper的使用)
- Redis初探07——Redis常用命令