JAVA JDBC

来源:互联网 发布:mysql 查询语句 编辑:程序博客网 时间:2024/06/02 02:14

  1. import java.sql.CallableStatement;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.ResultSetMetaData;  
  7. import java.sql.SQLException;  
  8. import java.util.ArrayList;  
  9. import java.util.HashMap;  
  10. import java.util.List;  
  11. import java.util.Map;  
  12. /** 
  13.  * 数据库连接类 
  14.  * 说明:封装了 无参,有参,存储过程的调用 
  15.  * @author iflytek 
  16.  * 
  17.  */  
  18. public class ConnectionDB {  
  19.   
  20.     /** 
  21.      * 数据库驱动类名称 
  22.      */  
  23.     private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
  24.   
  25.     /** 
  26.      * 连接字符串 
  27.      */  
  28.     private static final String URLSTR = "jdbc:sqlserver://localhost:1433; databaseName=Northwind";  
  29.   
  30.     /** 
  31.      * 用户名 
  32.      */  
  33.     private static final String USERNAME = "sa";  
  34.   
  35.     /** 
  36.      * 密码 
  37.      */  
  38.     private static final String USERPASSWORD = "111111";  
  39.   
  40.     /** 
  41.      * 创建数据库连接对象 
  42.      */  
  43.     private Connection connnection = null;  
  44.   
  45.     /** 
  46.      * 创建PreparedStatement对象 
  47.      */  
  48.     private PreparedStatement preparedStatement = null;  
  49.       
  50.     /** 
  51.      * 创建CallableStatement对象 
  52.      */  
  53.     private CallableStatement callableStatement = null;  
  54.   
  55.     /** 
  56.      * 创建结果集对象 
  57.      */  
  58.     private ResultSet resultSet = null;  
  59.   
  60.     static {  
  61.         try {  
  62.             // 加载数据库驱动程序  
  63.             Class.forName(DRIVER);  
  64.         } catch (ClassNotFoundException e) {  
  65.             System.out.println("加载驱动错误");  
  66.             System.out.println(e.getMessage());  
  67.         }  
  68.     }  
  69.   
  70.     /** 
  71.      * 建立数据库连接 
  72.      * @return 数据库连接 
  73.      */  
  74.     public Connection getConnection() {  
  75.         try {  
  76.             // 获取连接  
  77.             connnection = DriverManager.getConnection(URLSTR, USERNAME,  
  78.                     USERPASSWORD);  
  79.         } catch (SQLException e) {  
  80.             System.out.println(e.getMessage());  
  81.         }  
  82.         return connnection;  
  83.     }  
  84.   
  85.     /** 
  86.      * insert update delete SQL语句的执行的统一方法 
  87.      * @param sql SQL语句 
  88.      * @param params 参数数组,若没有参数则为null 
  89.      * @return 受影响的行数 
  90.      */  
  91.     public int executeUpdate(String sql, Object[] params) {  
  92.         // 受影响的行数  
  93.         int affectedLine = 0;  
  94.           
  95.         try {  
  96.             // 获得连接  
  97.             connnection = this.getConnection();  
  98.             // 调用SQL   
  99.             preparedStatement = connnection.prepareStatement(sql);  
  100.               
  101.             // 参数赋值  
  102.             if (params != null) {  
  103.                 for (int i = 0; i < params.length; i++) {  
  104.                     preparedStatement.setObject(i + 1, params[i]);  
  105.                 }  
  106.             }  
  107.               
  108.             // 执行  
  109.             affectedLine = preparedStatement.executeUpdate();  
  110.   
  111.         } catch (SQLException e) {  
  112.             System.out.println(e.getMessage());  
  113.         } finally {  
  114.             // 释放资源  
  115.             closeAll();  
  116.         }  
  117.         return affectedLine;  
  118.     }  
  119.   
  120.     /** 
  121.      * SQL 查询将查询结果直接放入ResultSet中 
  122.      * @param sql SQL语句 
  123.      * @param params 参数数组,若没有参数则为null 
  124.      * @return 结果集 
  125.      */  
  126.     private ResultSet executeQueryRS(String sql, Object[] params) {  
  127.         try {  
  128.             // 获得连接  
  129.             connnection = this.getConnection();  
  130.               
  131.             // 调用SQL  
  132.             preparedStatement = connnection.prepareStatement(sql);  
  133.               
  134.             // 参数赋值  
  135.             if (params != null) {  
  136.                 for (int i = 0; i < params.length; i++) {  
  137.                     preparedStatement.setObject(i + 1, params[i]);  
  138.                 }  
  139.             }  
  140.               
  141.             // 执行  
  142.             resultSet = preparedStatement.executeQuery();  
  143.   
  144.         } catch (SQLException e) {  
  145.             System.out.println(e.getMessage());  
  146.         }  
  147.   
  148.         return resultSet;  
  149.     }  
  150.   
  151.     /** 
  152.      * 获取结果集,并将结果放在List中 
  153.      *  
  154.      * @param sql 
  155.      *            SQL语句 
  156.      * @return List 
  157.      *                       结果集 
  158.      */  
  159.     public List<Object> excuteQuery(String sql, Object[] params) {  
  160.         // 执行SQL获得结果集  
  161.         ResultSet rs = executeQueryRS(sql, params);  
  162.           
  163.         // 创建ResultSetMetaData对象  
  164.         ResultSetMetaData rsmd = null;  
  165.           
  166.         // 结果集列数  
  167.         int columnCount = 0;  
  168.         try {  
  169.             rsmd = rs.getMetaData();  
  170.               
  171.             // 获得结果集列数  
  172.             columnCount = rsmd.getColumnCount();  
  173.         } catch (SQLException e1) {  
  174.             System.out.println(e1.getMessage());  
  175.         }  
  176.   
  177.         // 创建List  
  178.         List<Object> list = new ArrayList<Object>();  
  179.   
  180.         try {  
  181.             // 将ResultSet的结果保存到List中  
  182.             while (rs.next()) {  
  183.                 Map<String, Object> map = new HashMap<String, Object>();  
  184.                 for (int i = 1; i <= columnCount; i++) {  
  185.                     map.put(rsmd.getColumnLabel(i), rs.getObject(i));  
  186.                 }  
  187.                 list.add(map);  
  188.             }  
  189.         } catch (SQLException e) {  
  190.             System.out.println(e.getMessage());  
  191.         } finally {  
  192.             // 关闭所有资源  
  193.             closeAll();  
  194.         }  
  195.   
  196.         return list;  
  197.     }  
  198.       
  199.     /** 
  200.      * 存储过程带有一个输出参数的方法 
  201.      * @param sql 存储过程语句 
  202.      * @param params 参数数组 
  203.      * @param outParamPos 输出参数位置 
  204.      * @param SqlType 输出参数类型 
  205.      * @return 输出参数的值 
  206.      */  
  207.     public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType) {  
  208.         Object object = null;  
  209.         connnection = this.getConnection();  
  210.         try {  
  211.             // 调用存储过程  
  212.             callableStatement = connnection.prepareCall(sql);  
  213.               
  214.             // 给参数赋值  
  215.             if(params != null) {  
  216.                 for(int i = 0; i < params.length; i++) {  
  217.                     callableStatement.setObject(i + 1, params[i]);  
  218.                 }  
  219.             }  
  220.               
  221.             // 注册输出参数  
  222.             callableStatement.registerOutParameter(outParamPos, SqlType);  
  223.               
  224.             // 执行  
  225.             callableStatement.execute();  
  226.               
  227.             // 得到输出参数  
  228.             object = callableStatement.getObject(outParamPos);  
  229.               
  230.         } catch (SQLException e) {  
  231.             System.out.println(e.getMessage());  
  232.         } finally {  
  233.             // 释放资源  
  234.             closeAll();  
  235.         }  
  236.           
  237.         return object;  
  238.     }  
  239.   
  240.     /** 
  241.      * 关闭所有资源 
  242.      */  
  243.     private void closeAll() {  
  244.         // 关闭结果集对象  
  245.         if (resultSet != null) {  
  246.             try {  
  247.                 resultSet.close();  
  248.             } catch (SQLException e) {  
  249.                 System.out.println(e.getMessage());  
  250.             }  
  251.         }  
  252.   
  253.         // 关闭PreparedStatement对象  
  254.         if (preparedStatement != null) {  
  255.             try {  
  256.                 preparedStatement.close();  
  257.             } catch (SQLException e) {  
  258.                 System.out.println(e.getMessage());  
  259.             }  
  260.         }  
  261.           
  262.         // 关闭CallableStatement 对象  
  263.         if (callableStatement != null) {  
  264.             try {  
  265.                 callableStatement.close();  
  266.             } catch (SQLException e) {  
  267.                 System.out.println(e.getMessage());  
  268.             }  
  269.         }  
  270.   
  271.         // 关闭Connection 对象  
  272.         if (connnection != null) {  
  273.             try {  
  274.                 connnection.close();  
  275.             } catch (SQLException e) {  
  276.                 System.out.println(e.getMessage());  
  277.             }  
  278.         }     
  279.     }  
  280. }  

---------------------------------------------------------------------------略微修改后的版本(加了返回结果集一行一列的方法)-----------------------

  1. import java.sql.CallableStatement;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.ResultSetMetaData;  
  7. import java.sql.SQLException;  
  8. import java.util.ArrayList;  
  9. import java.util.HashMap;  
  10. import java.util.List;  
  11. import java.util.Map;  
  12. /** 
  13.  * 数据库连接类 
  14.  * 说明:封装了 无参,有参,存储过程的调用 
  15.  * @author iflytek 
  16.  * 
  17.  */  
  18. public class ConnectionDB {  
  19.   
  20.     /** 
  21.      * 数据库驱动类名称 
  22.      */  
  23.     private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";  
  24.   
  25.     /** 
  26.      * 连接字符串 
  27.      */  
  28.     private static final String URLSTR = "jdbc:sqlserver://localhost:1433; databaseName=Northwind";  
  29.   
  30.     /** 
  31.      * 用户名 
  32.      */  
  33.     private static final String USERNAME = "sa";  
  34.   
  35.     /** 
  36.      * 密码 
  37.      */  
  38.     private static final String USERPASSWORD = "111111";  
  39.   
  40.     /** 
  41.      * 创建数据库连接对象 
  42.      */  
  43.     private Connection connnection = null;  
  44.   
  45.     /** 
  46.      * 创建PreparedStatement对象 
  47.      */  
  48.     private PreparedStatement preparedStatement = null;  
  49.       
  50.     /** 
  51.      * 创建CallableStatement对象 
  52.      */  
  53.     private CallableStatement callableStatement = null;  
  54.   
  55.     /** 
  56.      * 创建结果集对象 
  57.      */  
  58.     private ResultSet resultSet = null;  
  59.   
  60.     static {  
  61.         try {  
  62.             // 加载数据库驱动程序  
  63.             Class.forName(DRIVER);  
  64.         } catch (ClassNotFoundException e) {  
  65.             System.out.println("加载驱动错误");  
  66.             System.out.println(e.getMessage());  
  67.         }  
  68.     }  
  69.   
  70.     /** 
  71.      * 建立数据库连接 
  72.      * @return 数据库连接 
  73.      */  
  74.     public Connection getConnection() {  
  75.         try {  
  76.             // 获取连接  
  77.             connnection = DriverManager.getConnection(URLSTR, USERNAME,  
  78.                     USERPASSWORD);  
  79.         } catch (SQLException e) {  
  80.             System.out.println(e.getMessage());  
  81.         }  
  82.         return connnection;  
  83.     }  
  84.   
  85.     /** 
  86.      * insert update delete SQL语句的执行的统一方法 
  87.      * @param sql SQL语句 
  88.      * @param params 参数数组,若没有参数则为null 
  89.      * @return 受影响的行数 
  90.      */  
  91.     public int executeUpdate(String sql, Object[] params) {  
  92.         // 受影响的行数  
  93.         int affectedLine = 0;  
  94.           
  95.         try {  
  96.             // 获得连接  
  97.             connnection = this.getConnection();  
  98.             // 调用SQL   
  99.             preparedStatement = connnection.prepareStatement(sql);  
  100.               
  101.             // 参数赋值  
  102.             if (params != null) {  
  103.                 for (int i = 0; i < params.length; i++) {  
  104.                     preparedStatement.setObject(i + 1, params[i]);  
  105.                 }  
  106.             }  
  107.               
  108.             // 执行  
  109.             affectedLine = preparedStatement.executeUpdate();  
  110.   
  111.         } catch (SQLException e) {  
  112.             System.out.println(e.getMessage());  
  113.         } finally {  
  114.             // 释放资源  
  115.             closeAll();  
  116.         }  
  117.         return affectedLine;  
  118.     }  
  119.   
  120.     /** 
  121.      * SQL 查询将查询结果直接放入ResultSet中 
  122.      * @param sql SQL语句 
  123.      * @param params 参数数组,若没有参数则为null 
  124.      * @return 结果集 
  125.      */  
  126.     private ResultSet executeQueryRS(String sql, Object[] params) {  
  127.         try {  
  128.             // 获得连接  
  129.             connnection = this.getConnection();  
  130.               
  131.             // 调用SQL  
  132.             preparedStatement = connnection.prepareStatement(sql);  
  133.               
  134.             // 参数赋值  
  135.             if (params != null) {  
  136.                 for (int i = 0; i < params.length; i++) {  
  137.                     preparedStatement.setObject(i + 1, params[i]);  
  138.                 }  
  139.             }  
  140.               
  141.             // 执行  
  142.             resultSet = preparedStatement.executeQuery();  
  143.   
  144.         } catch (SQLException e) {  
  145.             System.out.println(e.getMessage());  
  146.         }   
  147.   
  148.         return resultSet;  
  149.     }  
  150.       
  151.     /** 
  152.      * SQL 查询将查询结果:一行一列 
  153.      * @param sql SQL语句 
  154.      * @param params 参数数组,若没有参数则为null 
  155.      * @return 结果集 
  156.      */  
  157.     public Object executeQuerySingle(String sql, Object[] params) {  
  158.         Object object = null;  
  159.         try {  
  160.             // 获得连接  
  161.             connnection = this.getConnection();  
  162.               
  163.             // 调用SQL  
  164.             preparedStatement = connnection.prepareStatement(sql);  
  165.               
  166.             // 参数赋值  
  167.             if (params != null) {  
  168.                 for (int i = 0; i < params.length; i++) {  
  169.                     preparedStatement.setObject(i + 1, params[i]);  
  170.                 }  
  171.             }  
  172.               
  173.             // 执行  
  174.             resultSet = preparedStatement.executeQuery();  
  175.   
  176.             if(resultSet.next()) {  
  177.                 object = resultSet.getObject(1);  
  178.             }  
  179.               
  180.         } catch (SQLException e) {  
  181.             System.out.println(e.getMessage());  
  182.         } finally {  
  183.             closeAll();  
  184.         }  
  185.   
  186.         return object;  
  187.     }  
  188.   
  189.     /** 
  190.      * 获取结果集,并将结果放在List中 
  191.      *  
  192.      * @param sql 
  193.      *            SQL语句 
  194.      * @return List 
  195.      *                       结果集 
  196.      */  
  197.     public List<Object> excuteQuery(String sql, Object[] params) {  
  198.         // 执行SQL获得结果集  
  199.         ResultSet rs = executeQueryRS(sql, params);  
  200.           
  201.         // 创建ResultSetMetaData对象  
  202.         ResultSetMetaData rsmd = null;  
  203.           
  204.         // 结果集列数  
  205.         int columnCount = 0;  
  206.         try {  
  207.             rsmd = rs.getMetaData();  
  208.               
  209.             // 获得结果集列数  
  210.             columnCount = rsmd.getColumnCount();  
  211.         } catch (SQLException e1) {  
  212.             System.out.println(e1.getMessage());  
  213.         }  
  214.   
  215.         // 创建List  
  216.         List<Object> list = new ArrayList<Object>();  
  217.   
  218.         try {  
  219.             // 将ResultSet的结果保存到List中  
  220.             while (rs.next()) {  
  221.                 Map<String, Object> map = new HashMap<String, Object>();  
  222.                 for (int i = 1; i <= columnCount; i++) {  
  223.                     map.put(rsmd.getColumnLabel(i), rs.getObject(i));  
  224.                 }  
  225.                 list.add(map);  
  226.             }  
  227.         } catch (SQLException e) {  
  228.             System.out.println(e.getMessage());  
  229.         } finally {  
  230.             // 关闭所有资源  
  231.             closeAll();  
  232.         }  
  233.   
  234.         return list;  
  235.     }  
  236.       
  237.     /** 
  238.      * 存储过程带有一个输出参数的方法 
  239.      * @param sql 存储过程语句 
  240.      * @param params 参数数组 
  241.      * @param outParamPos 输出参数位置 
  242.      * @param SqlType 输出参数类型 
  243.      * @return 输出参数的值 
  244.      */  
  245.     public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType) {  
  246.         Object object = null;  
  247.         connnection = this.getConnection();  
  248.         try {  
  249.             // 调用存储过程  
  250.             callableStatement = connnection.prepareCall(sql);  
  251.               
  252.             // 给参数赋值  
  253.             if(params != null) {  
  254.                 for(int i = 0; i < params.length; i++) {  
  255.                     callableStatement.setObject(i + 1, params[i]);  
  256.                 }  
  257.             }  
  258.               
  259.             // 注册输出参数  
  260.             callableStatement.registerOutParameter(outParamPos, SqlType);  
  261.               
  262.             // 执行  
  263.             callableStatement.execute();  
  264.               
  265.             // 得到输出参数  
  266.             object = callableStatement.getObject(outParamPos);  
  267.               
  268.         } catch (SQLException e) {  
  269.             System.out.println(e.getMessage());  
  270.         } finally {  
  271.             // 释放资源  
  272.             closeAll();  
  273.         }  
  274.           
  275.         return object;  
  276.     }  
  277.   
  278.     /** 
  279.      * 关闭所有资源 
  280.      */  
  281.     private void closeAll() {  
  282.         // 关闭结果集对象  
  283.         if (resultSet != null) {  
  284.             try {  
  285.                 resultSet.close();  
  286.             } catch (SQLException e) {  
  287.                 System.out.println(e.getMessage());  
  288.             }  
  289.         }  
  290.   
  291.         // 关闭PreparedStatement对象  
  292.         if (preparedStatement != null) {  
  293.             try {  
  294.                 preparedStatement.close();  
  295.             } catch (SQLException e) {  
  296.                 System.out.println(e.getMessage());  
  297.             }  
  298.         }  
  299.           
  300.         // 关闭CallableStatement 对象  
  301.         if (callableStatement != null) {  
  302.             try {  
  303.                 callableStatement.close();  
  304.             } catch (SQLException e) {  
  305.                 System.out.println(e.getMessage());  
  306.             }  
  307.         }  
  308.   
  309.         // 关闭Connection 对象  
  310.         if (connnection != null) {  
  311.             try {  
  312.                 connnection.close();  
  313.             } catch (SQLException e) {  
  314.                 System.out.println(e.getMessage());  
  315.             }  
  316.         }     
  317.     }  
  318. }  

JDBC, Java Database Connecive, Java 数据库连接,是一组专门负责连接并操作数据库的标准,在整个JDBC 中实际上大量的提供的是接口。针对于各个不同的数据库生产商 ,只要想使用JAVA 进行数据库的开发,则对这些标准有所支持。

JDBC 在使用中常见的有以下三类:

JDBC-ODBC 桥连接:是SUN 在JDK的开发包中提供的最标准的一套JDBC 操作类库,使用的时候将JDBC-ODB-数据库,中间要经过一个ODBC 的连接,那么就意味着整体的性能将会降低,所以在开发中是绝对不会去使用JDBC-ODBC的连接方式的。

JDBC 连接,使用各个数据库提供商给定的数据库驱动程序,完成JDBC的开发,使用的时候需要在classpath中配置数据库的驱动程序

JDBC 网络连接:主要使用通过网络连接数据库


JDBC 的操作步骤

在进行JDBC 操作的时候可以按照以下的步骤完成:

1、加载数据库驱动程序,加载的时候需要将驱动程序配置到classpath之中

2、连接数据库,通过Connection 接口和 DriverManager 类完成

3、操作数据库,通过Statement、PreparedStatement、ResultSet 三个接口完成

4、关闭数据库,在实际开发中数据库资源非常有限,操作完之后必须关闭


数据库连接操作

在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

1、通过Class.forName()加载数据库的驱动程序

2、通过DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码

3、通过Connection 接口接收连接


[java] view plain copy
 print?
  1. package org.connectiondemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5.   
  6. public class ConnectionJDBC {  
  7.   
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     //驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中  
  12.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  13.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  14.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  15.     //连接数据库的用户名  
  16.     public static final String DBUSER = "root";  
  17.     //连接数据库的密码  
  18.     public static final String DBPASS = "";  
  19.       
  20.       
  21.     public static void main(String[] args) throws Exception {  
  22.         Connection con = null//表示数据库的连接对象  
  23.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  24.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  25.         System.out.println(con);  
  26.         con.close(); // 3、关闭数据库  
  27.     }  
  28.   
  29. }  


数据库更新操作


如果要想执行数据库的更新操作,则可以使用Statement接口,数据库更新就是增加、修改、删除


增加、更新、删除操作


[java] view plain copy
 print?
  1. package org.updatedemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.Statement;  
  6.   
  7. public class UpdateDemo {  
  8.   
  9.     /** 
  10.      * @param args 
  11.      */  
  12.     //驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中  
  13.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  14.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  15.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  16.     //连接数据库的用户名  
  17.     public static final String DBUSER = "root";  
  18.     //连接数据库的密码  
  19.     public static final String DBPASS = "";  
  20.       
  21.       
  22.     public static void main(String[] args) throws Exception {  
  23.         Connection con = null//表示数据库的连接对象  
  24.         Statement stmt = null;   
  25.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  26.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  27.         stmt = con.createStatement(); //3、Statement 接口需要通过Connection 接口进行实例化操作  
  28.         stmt.executeUpdate("insert into java_study.person values(\'Tom\',20,\'SH\')"); //执行SQL 语句,插入、更新、删除数据  
  29.         stmt.executeUpdate("update java_study.person set name='Jery' where age = 20");  
  30.         stmt.executeUpdate("delete from java_study.person where age = 20");  
  31.         con.close(); // 4、关闭数据库  
  32.     }  
  33.   
  34. }  

数据库查询操作


通过SELECT 语句,可以查询数据中的内容,在MySQL 中直接查询的时候可以发现将返回全部的查询结果给用户看,那么对于程序的操作中也是一样的,所有的查询结果要返回到程序处进行输出查看,那么程序通过ResultSet 接口保存全部的查询结果,通过Statement 接口中的executeQuery()方法查询。

查询之后的数据需要分别的取出。通过 next ()方法找到返回的每一行数据,每一行中各个列的数据需要通过getXxx()方法取得,例如:

取得整型:getInt()

取得字符串:getString()

取得日期:getDate()

取得小数:getFloat()


[java] view plain copy
 print?
  1. package org.querydemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.Statement;  
  7.   
  8. public class QueryDemo {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.     //驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中  
  14.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  15.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  16.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  17.     //连接数据库的用户名  
  18.     public static final String DBUSER = "root";  
  19.     //连接数据库的密码  
  20.     public static final String DBPASS = "";  
  21.       
  22.       
  23.     public static void main(String[] args) throws Exception {  
  24.         Connection con = null//表示数据库的连接对象  
  25.         Statement stmt = null;  //表示数据库的更新操作  
  26.         ResultSet result = null//表示接收数据库的查询结果  
  27.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  28.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  29.         stmt = con.createStatement(); //3、Statement 接口需要通过Connection 接口进行实例化操作  
  30.         result = stmt.executeQuery("select name,age,address from java_study.person"); //执行SQL 语句,查询数据库  
  31.         while (result.next()){  
  32.             String name = result.getString("name");  
  33.             int age = result.getInt("age");  
  34.             String address = result.getString("address");  
  35.             System.out.println(name+age+address);  
  36.         }  
  37.                 result.close();  
  38.                 con.close(); // 4、关闭数据库  
  39.     }  
  40.   
  41. }  


PreparedStatement

此接口是在实际的开发中使用最广泛的一个操作接口,此接口是Statement接口的子接口,采用预处理的方式完成


完成增加操作

[java] view plain copy
 print?
  1. package org.preparedstatementdemo;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.util.Date;  
  7.   
  8. public class PreparedStatementDemo  {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      */  
  13.   
  14.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  15.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  16.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  17.     //连接数据库的用户名  
  18.     public static final String DBUSER = "root";  
  19.     //连接数据库的密码  
  20.     public static final String DBPASS = "";  
  21.       
  22.     public static void main(String[] args) throws Exception {  
  23.         // TODO Auto-generated method stub  
  24.         Connection con = null//表示数据库的连接对象  
  25.         PreparedStatement pstmt = null//表示数据库更新操作  
  26.           
  27.         String name = "Tom";  
  28.         int age = 20;  
  29.         Date date = new Date();       
  30.         String sql = "insert into java_study.person values(?,?,?)";  
  31.           
  32.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  33.           
  34.         System.out.println(sql);  
  35.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  36.         pstmt = con.prepareStatement(sql); //使用预处理的方式创建对象  
  37.         pstmt.setString(1, name); //第一个?号的内容  
  38.         pstmt.setInt(2, age); //第二个?号的内容  
  39.         pstmt.setDate(3new java.sql.Date(date.getTime()));  
  40.         pstmt.executeUpdate(); //执行SQL 语句,更新数据库  
  41.         pstmt.close();  
  42.         con.close(); // 4、关闭数据库  
  43.     }  
  44.   
  45. }  


完成模糊操作

模糊查询要使用LIKE 语句,那么LIKE 语句需要使用%进行匹配

executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。

PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date 

[java] view plain copy
 print?
  1. package org.preparedstatementquery;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.util.Date;  
  8.   
  9. public class PreparedStatementQuery {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     // TODO Auto-generated method stub  
  15.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  16.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  17.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  18.     //连接数据库的用户名  
  19.     public static final String DBUSER = "root";  
  20.     //连接数据库的密码  
  21.     public static final String DBPASS = "";   
  22.       
  23.     public static void main(String[] args) throws Exception {  
  24.         Connection con = null//表示数据库的连接对象  
  25.         PreparedStatement pstmt = null//表示数据库更新操作  
  26.         ResultSet result = null;  
  27.           
  28.         String like_name ="Tom1";  
  29.         int like_age = 12;  
  30.           
  31.         String sql = "select name,age,birthday from java_study.person where name like ? or age = ?";  
  32.           
  33.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  34.           
  35.         System.out.println(sql);  
  36.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  37.         pstmt = con.prepareStatement(sql); //使用预处理的方式创建对象  
  38.         pstmt.setString(1"%"+like_name+"%");  
  39.         pstmt.setInt(2, like_age);  
  40.   
  41.         result = pstmt.executeQuery(); //执行SQL 语句,更新数据库  
  42.         while (result.next()){  
  43.             String name = result.getString("name");  
  44.             int age = result.getInt("age");  
  45.             Date date = result.getDate("birthday");  
  46.             System.out.println(name+","+age+","+date);  
  47.         }  
  48. <pre name="code" class="java">                result.close();</pre>  pstmt.close();con.close(); // 4、关闭数据库}}<p></p>  
  49. <p><br>  
  50. </p>  
  51. <pre></pre>  
  52. <p></p>  
  53. <p><br>  
  54. </p>  
  55. <p><strong>批处理</strong></p>  
  56. <p>批处理,多条SQL 语句可以一次性执行完毕,称为批处理操作</p>  
  57. <p><br>  
  58. </p>  
  59. <p></p><pre name="code" class="java">package org.addbetchdemo;  
  60.   
  61. import java.sql.Connection;  
  62. import java.sql.DriverManager;  
  63. import java.sql.PreparedStatement;  
  64. import java.util.Date;  
  65.   
  66. public class AddDetchDemo {  
  67.   
  68.     /** 
  69.      * @param args 
  70.      */  
  71.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  72.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  73.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  74.     //连接数据库的用户名  
  75.     public static final String DBUSER = "root";  
  76.     //连接数据库的密码  
  77.     public static final String DBPASS = "";   
  78.       
  79.     public static void main(String[] args) throws Exception {  
  80.         // TODO Auto-generated method stub  
  81.         Connection con = null//表示数据库的连接对象  
  82.         PreparedStatement pstmt = null//表示数据库更新操作  
  83.           
  84.         String sql = "insert into java_study.person values(?,?,?)";  
  85.           
  86.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  87.           
  88.         System.out.println(sql);  
  89.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  90.         pstmt = con.prepareStatement(sql); //使用预处理的方式创建对象  
  91.           
  92.         for (int i = 0;i<10;i++){  
  93.             pstmt.setString(1"org"+i); //第一个?号的内容  
  94.             pstmt.setInt(2, i); //第二个?号的内容  
  95.             pstmt.setDate(3new java.sql.Date(new java.util.Date().getTime()));  
  96.             pstmt.addBatch();  
  97.         }  
  98.         int[] i = pstmt.executeBatch(); //执行SQL 语句,更新数据库  
  99.         System.out.println(i);  
  100.         pstmt.close();  
  101.         con.close(); // 4、关闭数据库  
  102.     }  
  103.   
  104. }  
  105. </pre><br>  
  106. <p></p>  
  107. <p><strong>事务处理</strong><br>  
  108. </p>  
  109. <p>通过设置 connection  的autocommit(false) 提交事务  con.commit(); 回滚事务 con.rollback()<br>  
  110. </p>  
  111. <p></p><pre name="code" class="java">package org.transactiondemo;  
  112.   
  113. import java.sql.Connection;  
  114. import java.sql.DriverManager;  
  115. import java.sql.Statement;  
  116.   
  117. public class TransactionDemo {  
  118.   
  119.     /** 
  120.      * @param args 
  121.      */  
  122.     //驱动程序就是之前在classpath中配置的JDBC的驱动程序的JAR 包中  
  123.     public static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  124.     //连接地址是由各个数据库生产商单独提供的,所以需要单独记住  
  125.     public static final String DBURL = "jdbc:mysql://localhost:3306/test";  
  126.     //连接数据库的用户名  
  127.     public static final String DBUSER = "root";  
  128.     //连接数据库的密码  
  129.     public static final String DBPASS = "";  
  130.       
  131.     public static void main(String[] args) throws Exception {  
  132.         // TODO Auto-generated method stub  
  133.         Connection con = null//表示数据库的连接对象  
  134.         Statement stmt = null;   
  135.         Class.forName(DBDRIVER); //1、使用CLASS 类加载驱动程序  
  136.         con = DriverManager.getConnection(DBURL,DBUSER,DBPASS); //2、连接数据库  
  137.           
  138.         con.setAutoCommit(false);  
  139.           
  140.         stmt = con.createStatement(); //3、Statement 接口需要通过Connection 接口进行实例化操作  
  141.           
  142.         try{  
  143.         stmt.addBatch("insert into java_study.person values(\'Tom\',20,\'2012-01-01\')"); //执行SQL 语句,插入、更新、删除数据  
  144.         stmt.addBatch("insert into java_study.person values(\'Tom\',20,\'2012-01-01\')");  
  145.         stmt.addBatch("insert into java_study.person values(\''Tom\',20,\'2012-01-01\')");  
  146.             stmt.executeBatch();  
  147.             con.commit();  
  148.         } catch(Exception e){  
  149.             con.rollback();  
  150.         }  
  151.           
  152.           
  153.   
  154.         stmt.close();  
  155.         con.close(); // 4、关闭数据库  
  156.     }  
  157.   
  158. }  

CallableStatement:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


public class Test {
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}


public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "111111");
CallableStatement call = conn.prepareCall("{call selectByTableName(?)}");
call.setString(1, "student");
ResultSet rs = call.executeQuery();
while(rs.next())
{
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
}
} catch (SQLException e) {
e.printStackTrace();
}
}


}


batch:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;


public class TestBatch {


private static void testStatementBatch()
{
Connection conn = null;
Statement stat = null;//会将每一条sql发给数据库,让数据库区编译运行
try {
conn = DBUtil.getConnection();
stat = conn.createStatement();
String sql1 = "create table tmp(id int key auto_increment , name varchar(30) not null)";
String sql2 = "insert tmp values(0,'tom'),(0,'jim'),(0,'ploy')";
String sql3 = "update tmp set name = 'lily' where id = 3";
stat.addBatch(sql1);
stat.addBatch(sql2);
stat.addBatch(sql3);
stat.executeBatch();//批量执行命令列表
} catch (SQLException e) {
e.printStackTrace();
}
finally {
DBUtil.close(conn, stat, null);
}
}

private static void testPreparedStatement()
{
Connection conn = null;
PreparedStatement ps = null;
String sql = "insert tmp values(0,?)";
String[] names = {"jim","tom","hili","jhon","张三","李四"};
Random r = new Random();
try {
conn = DBUtil.getConnection();
ps = conn.prepareStatement(sql);
for(int i = 1; i < 58; i++)
{
ps.setString(1, names[r.nextInt(names.length)]);
ps.addBatch();//将上面设置的参数添加到参数列表中
if(i % 10 == 0)
{
ps.executeBatch();//执行一批参数
ps.clearBatch();
}
}
ps.executeBatch();
ps.clearBatch();
} catch (SQLException e) {
e.printStackTrace();
}
finally{
DBUtil.close(conn, ps, null);
}
}

private static void testCallableStatement()
{
Connection conn = null;
CallableStatement stat = null;
ResultSet rs =null;
String sql = "{call selectByTableName(?)}";
try {
conn = DBUtil.getConnection();
stat = conn.prepareCall(sql);
stat.setString(1, "student");
rs = stat.executeQuery();

while(rs.next())
{
System.out.println(rs.getInt(1)+"\t"+rs.getString("sname")+"\t"+rs.getString("ssex")+"\t"+rs.getString("sdept"));
}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
DBUtil.close(conn, stat, rs);
}
}

public static void main(String[] args) {
testCallableStatement();
}

}




JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。

  • Driver接口

Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。

  • DriverManager类

DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:

1 DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序2 DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象
  • Connection接口

Connection代表与数据库的连接,其中定义了一系列的方法:

1 Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象2 Connection.createStatement(); // 创建一个Statement对象3 Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象4 Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
  • Statement接口

Statement接口用于向数据库发送SQL语句。

1 Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取2 Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目3 Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象

 

  • ResultSet接口
1 ResultSet.next(); // 将游标由当前位置移动到下一行2 ResultSet.getString(String columnName); // 获取指定字段的String类型值3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值4 ResuleSet.previous(); // 将游标由当前位置移动到上一行

 

2、程序示例

数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为:

 表中原有数据 

JDBC连接MySQL程序示例

复制代码
 1 package server; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7  8 public class DemoJDBC { 9     public static void main(String[] args) throws Exception {10         // 加载驱动类11         Class.forName("com.mysql.jdbc.Driver");12         13         // 通过DriverManager获取数据库连接14         String url = "jdbc:mysql://192.168.1.150/test";15         String user = "teamtalk";16         String password = "123456";17         Connection connection = (Connection) DriverManager.getConnection(18                 url, user, password);19         20         // 通过Connection对象获取Statement对象、Statement执行SQL语句21         Statement statement = (Statement) connection.createStatement();  22         ResultSet resultSet = statement.executeQuery("select * from persion");23         24         // 操作ResultSet结果集25         while (resultSet.next()) {26             // 第一种获取字段方式27             System.out.println(resultSet.getString(1) + " " + 28                     resultSet.getString(2) + " " + resultSet.getString(3));29             System.out.print("---- ");30             // 第二种获取字段方式31             System.out.println(resultSet.getString("id") + " " +32                     resultSet.getString("name") + " " + resultSet.getString("age"));33         }34         35         int ret = statement.executeUpdate("insert persion (name, age) value ('bobo', 24)");36         if (ret > 0) {37             System.out.println("  insert ok");38             resultSet = statement.executeQuery("select * from persion");39   40             while (resultSet.next()) {41                 System.out.println(resultSet.getString(1) + " " + 42                         resultSet.getString(2) + " " + resultSet.getString(3));43             }44         }45         46         // 关闭数据库连接47         resultSet.close();48         statement.close();49         connection.close();50     }51 }
复制代码

程序运行结果为:

  数据表中数据 

 

JDBC使用PreparedStatement进行数据插入操作程序示例

复制代码
 1 package server; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7  8 import com.mysql.jdbc.PreparedStatement; 9 10 public class DemoJDBC {11     public static void main(String[] args) throws Exception {12         // 加载驱动类13         Class.forName("com.mysql.jdbc.Driver");14     15         // 通过DriverManager获取数据库连接16         String url = "jdbc:mysql://192.168.1.150/test";17         String user = "teamtalk";18         String password = "123456";19         Connection connection = (Connection) DriverManager.getConnection(20                 url, user, password);21         22         PreparedStatement statement = (PreparedStatement) connection.prepareStatement(23                 "insert persion (name, age) value (?, ?)");24         statement.setString(1, "hdu");25         statement.setInt(2, 21);26         statement.executeUpdate();27         28         ResultSet resultSet = statement.executeQuery("select * from persion");29         // 操作ResultSet结果集30         while (resultSet.next()) {31             // 第一种获取字段方式32             System.out.println(resultSet.getString(1) + " " + 33                     resultSet.getString(2) + " " + resultSet.getString(3));34         }35 36         // 关闭数据库连接37         resultSet.close();38         statement.close();39         connection.close();40     }41 }
复制代码

程序输出为:

 数据库中数据为:




原创粉丝点击