学习内容:

1.JDBC的含义...

JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些API...

2.使用JDBC的原因...

  那么为什么要使用,这个想必大家也是更为了解了,一个应用程序如果不和数据库进行连接,那这根本就不算是个应用程序,那么应用程序是不能直接对数据库进行操作的,那么就需要一个辅助工具去连接数据库,从而操作数据库...那这个辅助的工具就是JDBC了,这个仅限于JAVA应用程序...其实总体的规模就是这样:应用程序——>JDBC——>(mysql driver——>mysql)

                       JDBC——>(oracle driver——>oracle)

                       JDBC——>(DB2 driver——>db2)就是这么简单的事...多余的就不罗嗦了...

3.如何使用JDBC...

如何使用JDBC,才是真正的重点...使用JDBC分为几个步骤...

我这里只对链接mysql进行讲解...

i.首先注册驱动

  1. Class.forName("com.mysql.Driver");//这种方式是最好的,不会对具体驱动产生依赖...
  2. DriverManager.registerDriver(com.mysql.jdbc.Driver);//会产生两个相同的驱动,并会对具体驱动产生依赖...
  3. System.setProperty("jdbc.drivers","driver1:driver2");//基本不常用,所以可以不用记,一般就使用第一种就行了...

ii.建立连接

  1. Connection conn = DriverManager.getConnection(url, user, password);

iii.创建执行SQL语句...

  1. Statement st = conn.createStatement();
  2. st.executeQuery(sql);
  3. PreparedStatement
  4. String sql = "select * from table_name where col_name=?";
  5. PreparedStatement ps = conn.preparedStatement(sql);
  6. ps.setString(1, "col_value");
  7. ps.executeQuery();

iv.处理执行结果...

  1. ResultSet rs = statement.executeQuery(sql);
  2. While(rs.next()){
  3. rs.getString(“col_name”);
  4. rs.getInt(“col_name”);
  5. }

v.释放资源...

释放资源这是必须的,使用close()进行关闭...由于数据库的资源是非常珍贵的,因此只要我们不去使用资源的时候,一定要记得释放...

先来个例子:还是例子更加的好理解...

  1. import java.sql.*;//1.引包是必须的...
  2.  
  3. public class JDBC_1_1 {
  4. static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
  5. static final String DB_URL ="jdbc:mysql://localhost:3306/emp";//这个链接是我本机的数据库emp...emp里有个表格叫employees....
  6. /*表格的信息
  7. *create table employees
  8. *(
  9. * id int not null,
  10. * first varchar(255) not null,
  11. * last varchar(255) not null,
  12. * age int not null
  13. *);
  14. */
  15. static final String USER="root";//登陆数据库时的用户名...
  16. static final String PAS="49681888";登陆时的密码...
  17. public static void main(String[] args) {
  18. // TODO Auto-generated method stub
  19. Connection conn=null;
  20. Statement stmt=null;//
  21. try {
  22. //2.注册JDBC驱动程序...
  23. Class.forName("com.mysql.jdbc.Driver");
  24. //3.打开一个链接...
  25. System.out.println("Connection database....");
  26. conn=DriverManager.getConnection(DB_URL,USER,PAS);
  27.  
  28. //4.执行一个操作...
  29. System.out.println("Creating statement");
  30. stmt=conn.createStatement();
  31. // String sql;
  32. // sql="select id,first,last,age from employees"; 这个是查询操作...
  33. // ResultSet rs=stmt.executeQuery(sql);
  34. String sql_1="insert into employees " + "values (7, 'z', 'yh', 20)";//插入操作...
  35. stmt.executeUpdate(sql_1);
  36.  
  37. 5.提取数据...
  38. // while(rs.next()){ //rs用来保存sql执行后的结果...
  39. // int id=rs.getInt("id");
  40. // int age=rs.getInt("age");
  41. // String first=rs.getString("first");
  42. // String last=rs.getString("last");
  43. // System.out.println(id+" "+age+" "+first+" "+last);
  44. // }
  45. 6.清理环境
  46. // rs.close();
  47. stmt.close();
  48. conn.close();
  49. } catch (Exception e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. System.out.println("no class");
  53. }finally{
  54. if(stmt!=null){
  55. try {
  56. stmt.close();
  57. } catch (SQLException e) {
  58. // TODO Auto-generated catch block
  59. e.printStackTrace();
  60. }
  61. }
  62. if(conn!=null){
  63. try {
  64. conn.close();
  65. } catch (SQLException e) {
  66. // TODO Auto-generated catch block
  67. e.printStackTrace();
  68. }
  69. }
  70. }
  71. System.out.println("Goodbye");
  72. }
  73.  
  74. }

其他操作,比如说删除啊,更改啊,这个模式基本都差不多...就不进行解释了...

注意:如果我们使用JDBC的时候,一定要检查检查自己的的jdk的lib文件夹下有没有mysql-connector-java-5.1.18-bin.jar这个压缩文件..如果没有,那么程序运行时会出现错误...解决方法就是我们下一个mysql-connector-java-5.1.18-bin.jar这个文件,几k而已,下载完毕之后直接拷贝到jdk的lib文件夹下即可..

  如果使用的是eclipse,我们还要导入这个文件...右击我们建立的项目文件,然后点击build path——>configure build path,弹出对话框以后,点击Libraries——>Add External JARs...找到这个mysql-connector-java-5.1.18-bin.jar文件导入,然后就可以了...

4.使用JDBC实现CURD操作...什么是CURD操作呢?其实就是对数据进行更新,删除等操作...

这里我们采用分层操作...这个代码很长...

首先是User实体...

  1. package JDBC_3;
  2. import java.util.Date;
  3. class User{ //user类..
  4. private int id;
  5. private String name;
  6. private Date birthday;
  7. private float money;
  8. public User(){
  9. }
  10. public User(int id,String name,Date birthday,float money){
  11. this.id=id;
  12. this.name=name;
  13. this.birthday=birthday;
  14. this.money=money;
  15. }
  16. public int getid(){
  17. return id;
  18. }
  19. public void setId(int id) {
  20. this.id = id;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public Date getBirthday() {
  29. return birthday;
  30. }
  31. public void setBirthday(Date birthday) {
  32. this.birthday = birthday;
  33. }
  34. public float getMoney() {
  35. return money;
  36. }
  37. public void setMoney(float money) {
  38. this.money = money;
  39. }
  40.  
  41. @Override
  42. public String toString(){
  43. return "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]";
  44. }
  45. }

接着是我们的Dao层,就是接口...

  1. package JDBC_3;
  2.  
  3. interface UserDao{
  4. public abstract void addUser(User user);
  5. public abstract User getUserById(int userid);
  6. public abstract int update(User user);
  7. public abstract int delete(User user);
  8. }

然后是实现接口的类...

  1. package JDBC_3;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.sql.Date;
  7. import java.sql.ResultSet;
  8. /*
  9. * JDBC实现crud操作
  10. * crud操作就是对数据进行增删改查...
  11. * */
  12. public class JDBC_3_1_server implements UserDao{
  13. static final String DB_URL="jdbc:mysql://localhost:3306/emp";
  14. static final String user_1="root";
  15. static final String pas="49681888";
  16. static{
  17. try {
  18. Class.forName("com.mysql.jdbc.Driver");
  19. } catch (ClassNotFoundException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. }
  24. public void addUser(User user){
  25. Connection cn=null;
  26. PreparedStatement ps=null;
  27. try {
  28. cn=DriverManager.getConnection(DB_URL,user_1,pas);
  29. String sql="insert into userr values(2,'clearlove','1995-01-26',200)";
  30. //String sql="insert into userr values(?,?,?,?)";这句话是传参数是未知的,需要我们进行获取...
  31. ps=cn.prepareStatement(sql);
  32. //这四个函数就是为了获取我们插入的信息...上面采用了直接在sql里写入我们要插入的数据,其实我们也可以在主函数里进行传参...见下面主函数...
  33. // ps.setInt(1,user.getid());
  34. // ps.setString(2,user.getName());
  35. // ps.setDate(3, new Date(user.getBirthday().getTime()));
  36. // ps.setFloat(4, 20);
  37. int count=ps.executeUpdate();
  38. System.out.println("添加的记录数"+count);
  39. ps.close();
  40. cn.close();
  41.  
  42. } catch (Exception e) {
  43. // TODO Auto-generated catch block
  44. e.printStackTrace();
  45.  
  46. }finally{
  47. if(ps!=null){
  48. try {
  49. ps.close();
  50. } catch (SQLException e) {
  51. // TODO Auto-generated catch block
  52. e.printStackTrace();
  53. }finally{
  54. if(cn!=null){
  55. try {
  56. cn.close();
  57. } catch (SQLException e) {
  58. // TODO Auto-generated catch block
  59. e.printStackTrace();
  60. }
  61. }
  62. }
  63. }
  64. }
  65.  
  66. }
  67. public User getUserById(int userid){
  68. Connection cn=null;
  69. PreparedStatement ps=null;
  70. ResultSet rs=null;
  71. try {
  72. cn=DriverManager.getConnection(DB_URL,user_1,pas);
  73. String sql="select * from userr where id=1";
  74. //导入sql语句...
  75. ps=cn.prepareStatement(sql);
  76. //保存执行sql语句后的结果对象...
  77. rs=ps.executeQuery();
  78. ps.close();
  79. cn.close();
  80. rs.close();
  81. } catch (Exception e) {
  82. // TODO Auto-generated catch block
  83. e.printStackTrace();
  84. }finally{
  85. if(ps!=null){
  86. try {
  87. ps.close();
  88. } catch (SQLException e) {
  89. // TODO Auto-generated catch block
  90. e.printStackTrace();
  91. }
  92. }
  93. if(rs!=null){
  94. try {
  95. rs.close();
  96. } catch (SQLException e) {
  97. // TODO Auto-generated catch block
  98. e.printStackTrace();
  99. }
  100. }
  101. if(cn!=null){
  102. try {
  103. cn.close();
  104. } catch (SQLException e) {
  105. // TODO Auto-generated catch block
  106. e.printStackTrace();
  107. }
  108. }
  109. }
  110. return null;
  111. }
  112. public int update(User user){
  113. Connection cn=null;
  114. PreparedStatement ps=null;
  115. try {
  116. cn=DriverManager.getConnection(DB_URL,user_1,pas);
  117. String sql="update userr set name='clearlove',birthday='1994-12-19',money=60 where id=1";
  118. ps=cn.prepareStatement(sql);
  119. int count=ps.executeUpdate();
  120. return count;
  121. } catch (SQLException e) {
  122. // TODO Auto-generated catch block
  123. e.printStackTrace();
  124. }finally{
  125. try {
  126. cn.close();
  127. ps.close();
  128. } catch (Exception e) {
  129. // TODO Auto-generated catch block
  130. e.printStackTrace();
  131. }
  132. }
  133. return 0;
  134. }
  135. public int delete(User user){
  136. Connection cn=null;
  137. PreparedStatement ps=null;
  138. try {
  139. cn=DriverManager.getConnection(DB_URL,user_1,pas);
  140. String sql="delete from userr where id=1";
  141. ps=cn.prepareStatement(sql);
  142. int count=-1;
  143. count=ps.executeUpdate();
  144. return count;
  145. } catch (SQLException e) {
  146. // TODO Auto-generated catch block
  147. e.printStackTrace();
  148. }finally{
  149. try {
  150. cn.close();
  151. ps.close();
  152. } catch (Exception e) {
  153. // TODO Auto-generated catch block
  154. e.printStackTrace();
  155. }
  156. }
  157. return 0;
  158. }
  159. }

接着是服务层...

  1. package JDBC_3;
  2. class userserves {
  3.  
  4. private UserDao userDao;
  5. public userserves(){
  6. userDao =DaoFactory.getInstance().createUserDao();//通过工厂实例化一个例子。。
  7. System.out.println("userDao "+userDao);
  8. }
  9.  
  10. public void regist(User user){
  11. if(user==null){
  12. System.out.println("注册表信息无效...");
  13. }else{
  14. userDao.addUser(user);
  15. }
  16. }
  17.  
  18. public User query(int userId){
  19. User user = userDao.getUserById(userId);
  20. if(user == null){
  21. System.out.println("查询结果为空!!");
  22. }else{
  23. System.out.println(user.getid()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());
  24. }
  25. return userDao.getUserById(userId);
  26. }
  27.  
  28. public void update(User user){
  29. if(user.getid()<0){
  30. System.out.println("用户id无效,重新输入");
  31. }else{
  32. userDao.update(user);
  33. }
  34. }
  35.  
  36. public void delete(User user){
  37. if(user.getid()<0){
  38. System.out.println("用户id无效,重新输入");
  39. }else{
  40. userDao.delete(user);
  41. }
  42. }
  43. }

定义一个工厂模式来实例化对象UserDao。。。

  1. package JDBC_3;
  2. class DaoFactory{
  3. private static UserDao userdao=null;
  4. private static DaoFactory instance= new DaoFactory();
  5. private DaoFactory(){
  6. try {
  7. userdao=(UserDao)Class.forName("JDBC_3.JDBC_3_1_server").newInstance();
  8. } catch (Exception e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. }
  12. }
  13. public static DaoFactory getInstance(){
  14. return instance;
  15. }
  16. public UserDao createUserDao(){
  17. return userdao;
  18. }
  19. }

最后是测试类...

  1. package JDBC_3;
  2. import java.sql.Date;
  3. public class JDBC_3_1_ceshi {
  4.  
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. userserves userse=new userserves();
  8. System.out.println("添加用户");
  9. userse.regist(new User()); //这句话我们也可以这样
  10. //userse.regist(new User(1,"clearlove","1995-01-26",300));这样写我们可以固定传参...但是上面的一些代码就要进行修改了...
  11. }
  12.  
  13. }

上面的代码估计是有点长,但是也没关系...一名优秀的程序员这点代码对于我们来说算什么呢?其实上面的例子是很好理解的...都是一些基本的东西...

我们除了上述那种方式可以对类名进行加载,我们还可以使用proprties...是一种很灵活的方式...

  1. private DaoFactory(){
  2. /**
  3. * 通过读取属性文件来动态的加载Dao层类
  4. */
  5. Properties prop = new Properties();
  6. try{
  7. FileInputStream fis = new FileInputStream("src/com/weijia/domain/daoconfig.properties");
  8. prop.load(fis);
  9. String className = prop.getProperty("userDaoClass");
  10. Class<?> clazz = Class.forName(className);
  11. userDao = (UserDao)clazz.newInstance();
  12. fis.close();
  13. }catch(Exception e){
  14. }
  15. }

这里的数据库就是一个简单的数据库...

  1. create table userr
  2. (
  3. id int not null,
  4. name varchar(255) not null,
  5. birthday Date,
  6. money float not null
  7. );

http://www.cnblogs.com/RGogoing/p/4515521.html

JAVA jdbc(数据库连接池)学习笔记(转)的更多相关文章

  1. JAVA jdbc(数据库连接池)学习笔记(二) SQL注入

    PS:今天偶然间发现了SQL的注入...所以就简单的脑补了一下,都是一些简单的例子...这篇写的不怎么样...由于自己没有进行很深的研究... 学习内容: 1.SQL注入的概念...   所谓SQL注 ...

  2. JAVA jdbc(数据库连接池)学习笔记(一)

    学习内容: 1.JDBC的含义... JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些 ...

  3. Java jdbc数据库连接池总结!(转)

    1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...

  4. day13_Mysql事务与数据库连接池学习笔记

    一.Mysql事务 事务: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功(数据回滚).  例如:A给B转帐,对应于如下两条sql语句 : update account ...

  5. Java -- JDBC 数据库连接池

    1. 原理代码示例 public class JdbcPool implements DataSource { private static LinkedList<Connection> ...

  6. Java自学-JDBC 数据库连接池

    数据库连接池 与线程池类似的,数据库也有一个数据库连接池. 不过他们的实现思路是不一样的. 本章节讲解了自定义数据库连接池类:ConnectionPool,虽然不是很完善和健壮,但是足以帮助大家理解C ...

  7. JAVA之JDBC数据库连接池总结篇

    JDBC数据库连接池 一.JDBC数据库连接池的必要性 二.数据库连接池技术 三.多种开源的数据库连接池 3.1 C3P0数据库连接池 3.2 DBCP数据库连接池 3.3 Druid(德鲁伊)数据库 ...

  8. JAVA基础知识之JDBC——JDBC数据库连接池

    JDBC数据库连接池 数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接, ...

  9. JDBC 数据库连接池

    http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html JDBC 数据库连接池 小结   当对数据库的访问不是很频繁时,可以在每次 ...

随机推荐

  1. CentOS6-釋放ip重新分配,centos7 ifconifg没有ip

    http://bbs.csdn.net/topics/390725823 系统win7 ,dhcp自动获取ip虚拟机是10.0 安装之后我装了ubuntu  选用 NAT网络, 刚装完我能上网 ,但是 ...

  2. VC生成的DLL给QT的EXE调用时lib路径问题小结

    VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...

  3. Linux 技巧之 Grub 超实用技巧

    1. 简单介绍 什么是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一个引导装入器 -- 它负责装入内核并引导 Linux 系统.GRUB 还能够引导其他操作系统, ...

  4. OpenCV HaarTraining代码解析(二)cvCreateMTStumpClassifier(建立决策树)

    HaarTraining关键的部分是建立基分类器classifier,OpenCV中所採用的是CART(决策树的一种):通过调用cvCreateMTStumpClassifier来完毕. 这里我讨论利 ...

  5. 浏览器url传参中文时得到null的解决方法

    在写一个中文参数需求的时候遇到了以下问题,经过半天的测试和各种编码,以及网上一些有用没用的资料尝试终于解决    比如下面的url地址:http://travel.widget.baike.com:8 ...

  6. Android开发 更改返回button的图标

    非常多的Android应用左上角都有返回button 在默认的情况下 ADT会默认给一个返回图标 而作为开发需求 非常多都要求定制一个新的图标 在Android的站点上 发现了2种能够更改的方法 1. ...

  7. TMS320F28335项目开发记录5_28335之CCS编程基础

    CCS开发环境已经为我们封装好了很多片内外设寄存器的结构体,我们仅仅须要包括对应的官方的头文件就能够使用了,那么它的内部详细是怎样实现的呢? 以下来一个典型的样例: 1.使用结构体和联合体 A.用st ...

  8. CRL 版本2.1.0.0下载

    此次更新完善了部份功能,详情见UpdateLog,重新整理了开发文档,更美档,更详细 百度盘下载 下载地址: 百度盘下载

  9. 大兴雷克萨斯深度剖析2013款LS460L_深圳大兴雷克萨斯_太平洋汽车网

    大兴雷克萨斯深度剖析2013款LS460L_深圳大兴雷克萨斯_太平洋汽车网 大兴雷克萨斯深度剖析2013款LS460L

  10. [LeetCode] Search for a Range [34]

    题目 Given a sorted array of integers, find the starting and ending position of a given target value. ...