1、创建 dbconfig.properties

driver=com.mysql.jdbc.Driver
dburl=jdbc\:mysql\://localhost\:3306/mytest
user=root
password=

2、创建 ConnectionFactory.java

 package com.test.util;

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties; public class ConnectionFactory { private static String driver;
private static String dburl;
private static String user;
private static String password; private static final ConnectionFactory factory = new ConnectionFactory(); private Connection conn; static{
Properties prop = new Properties();
try{
InputStream in = ConnectionFactory.class.getClassLoader()
.getResourceAsStream("dbconfig.properties");
prop.load(in);
}catch(Exception e){
System.out.println("配置文件读取错误");
}
driver = prop.getProperty("driver");
dburl = prop.getProperty("dburl");
user = prop.getProperty("user");
password = prop.getProperty("password"); }
private ConnectionFactory(){ }
public static ConnectionFactory getInstance(){
return factory;
}
public Connection makeConnection(){
try{
Class.forName(driver);
conn = DriverManager.getConnection(dburl,user,password);
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}

3、抽象类 IdEntity.java

 package com.test.entity;

 public abstract class IdEntity {

     protected int id;
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
}

4、User.java 继承抽象类IdEntity.java

 package com.test.entity;

 public class User extends IdEntity {
private String name;
private String password; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + ", id=" + id
+ "]";
} }

5、Address.java 继承抽象类IdEntity.java

 package com.test.entity;

 public class Address extends IdEntity{

     private String address;
private int userid;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
@Override
public String toString() {
return "Address [address=" + address + ", userid=" + userid + ", id="
+ id + "]";
} }

6、UserDao.java 定义接口

 package com.test.dao;

 import java.sql.Connection;
import java.sql.SQLException; import com.test.entity.User; public interface UserDao { public void save(Connection conn,User user)throws SQLException; public void update(Connection conn,int id,User user) throws SQLException; public void delete(Connection conn,User user)throws SQLException; }

7、实现UserDao接口,UserDaoImpl.java

 package com.test.dao.impl;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException; import com.test.dao.UserDao;
import com.test.entity.User; public class UserDaoImpl implements UserDao{ @Override
public void save(Connection conn, User user) throws SQLException {
PreparedStatement ps = conn.prepareCall("insert into person(name,password) values(?,?)");
ps.setString(, user.getName());
ps.setString(, user.getPassword());
ps.execute();
} @Override
public void update(Connection conn, int id, User user) throws SQLException {
String updateSql ="update person set name= ?,password=? where id =?";
PreparedStatement ps = conn.prepareStatement(updateSql);
ps.setString(, user.getName());
ps.setString(, user.getPassword());
ps.setInt(, id);
ps.execute();
} @Override
public void delete(Connection conn, User user) throws SQLException {
PreparedStatement ps = conn.prepareStatement("delete from uesr where id = ?");
ps.setInt(, user.getId());
ps.execute();
} }

8、测试类 UserDaoTest.java

 package com.test.testclass;

 import java.sql.Connection;
import java.sql.SQLException; import com.test.dao.UserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.entity.User;
import com.test.util.ConnectionFactory; public class UserDaoTest { public static void main(String[] args) {
Connection conn = null; try {
conn = ConnectionFactory.getInstance().makeConnection();
conn.setAutoCommit(false);
UserDao userDao = new UserDaoImpl();
User tom = new User();
tom.setName("tom");
tom.setPassword("");
userDao.save(conn, tom);
conn.commit();
} catch (SQLException e) {
try{
conn.rollback();
}catch(Exception e2){
e2.printStackTrace();
}
e.printStackTrace();
} }
}

JDBC编程之优化的更多相关文章

  1. 优化JDBC编程-多提提意见

    优化JDBC编程这是我根据MS SQL SERVER 2000 JDBC DRIVER HELP,并参考其它资料整理而成.ms的这个帮助文件实在有失大家风范,示例代码很.....有兴趣者可以去下载ht ...

  2. JDBC编程之程序优化

    -----------------siwuxie095 首先下载 MySQL 的 JDBC 驱动,下载链接: https://dev.mysql.com/downloads/connector/j/ ...

  3. JDBC编程之预编译SQL与防注入式攻击以及PreparedStatement的使用教程

      转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/5876951.html 在JDBC编程中,常用Statement.PreparedStatement 和  ...

  4. JDBC编程之预编译SQL与防注入

    在JDBC编程中,常用Statement.PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedS ...

  5. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

  6. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  7. 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis

    我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...

  8. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  9. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

随机推荐

  1. automatically select architectures

    各位在用XCode 5.x 打开用XCode 4.x 创建的项目时候.会遇到编译器警告automatically select architectures. 1. This is because th ...

  2. HDU 5139数据离线处理

    此题可以找到规律f(n) = 1! * 2! *...*n!, 如果直接打表的话,由于n比较大(10000000),所以会超内存,这时候就要用到离线处理数据,就是先把数据存起来,到最后在暴力一遍求解就 ...

  3. (转)使用DataTime这个类来获取当前的时间

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(--).时间(::).日期+时间(-- ::)等. //获取日期+时间 DateTime ...

  4. bootstrap初探

    bootstrap资源 http://getbootstrap.com http://github.com/twbs http://www.bootcss.com bootstrap栅格系统 容器:流 ...

  5. C# Gma.QrCodeNet生成二维码

    一.使用C#生成二维码类库之一是qrcodenet 源代码地址: http://qrcodenet.codeplex.com/ 二.使用实例 定义处理字符串 static string url = & ...

  6. (转)\r \r\n \t 的区别

    小风吹雪 \r \r\n \t 的区别 http://www.360doc.com/content/12/0530/15/16538_214756101.shtml \n 软回车:       在Wi ...

  7. Cacti安装教程

    CentOS 6.0架设流量监控及集中日志系统 第一章.cacti的安装 1. 系统的基本设置2. 设置主机名3. [root@localhost ~]# vi /etc/sysconfig/netw ...

  8. javaScript 自定义事件、发布订阅设计模式

    现在很多应用都允许用户根据自己的喜好订阅一些自己较为关注的信息,当应用更新了这些信息后将针对不同的订阅类型推送此类信息.例如xx招聘网,当你订阅了互联网IT技术相关分类的招聘信息推送后,当企业在该网站 ...

  9. ubuntu 安装 maven3

    sudo add-apt-repository ppa:natecarlson/maven3 sudo apt-get update && sudo apt-get install m ...

  10. C++:MEMSET的大坑三两事

    之前写了一题费用流,竟然硬是在写SPFA时为DIS数组赋初始值用了MEMSET数组QAQ 调试了很久也没有弄明白自己是卡在那里了,,,感觉被自己蠢哭了QWQ 错误的姿势!! #include < ...