zoukankan      html  css  js  c++  java
  • JDBC编程——建立连接,并简单操作


    JDBC:Java DataBase Connectivity standard

    1.首先下载连接MySQL的驱动
      

    2.创建数据库的用户名和密码文件,易于统一管理

    day1/xxx.properties
    1 user=root
    2 password = root

    3.获得propertiese对象

    1 // 获取数据库的用户名和密码
    2 Properties prop = new Properties();
    3prop.load(Inserte.class
    4          .getResourceAsStream("/day1/database.properties"));

    4.添加驱动,连接数据库

    1  Class.forName("com.mysql.jdbc.Driver");
    2  // 建立连接
    3  conn = DriverManager.getConnection(
    4          "jdbc:mysql://localhost:3306/com.xhm.sql", prop);

    5.获得数据库操作对象

    1 // 获取执行SQL对象
    2 stmt = conn.createStatement();

    6.执行sql语句,进行增删检查

    6.1插入SQL语句格式如下:

    1 INSERT [INTO] tablename VALUES (expression[,...n]);
    2 其中INTO是可选的,tablename是表明称,在VALUES后的括号放入插入的数据,和建表的要类型要对应,并按顺序插入如:
    3 inser into student values(1,'Lee',30);

    6.2修改操作SQL语句格式如下:

    1 UPDATE tablename SET columnname = {expression}[,...n] WHERE<search_condition>
    2 使用该语句为修改名称为columnname列的值,expression为指定的值,WHERE为修改的对象的条件,如果没有会对所有的对象经行修改。
    3 如下:
    4 UPDATE tablename SET age = 34 WHERE name = 'Tom';

    6.3删除操作SQL语句格式如下:

    1 DELETE [FROM] tablename WHERE search_condition
    2 和修改一样需要给出条件,否则将全部删除了

    6.4查询操作SQL语句格式如下:

    1 SELECT select_list FROM tablename[WHERE search_condition][GROUP BY group_by_expression][HAVING search_condition][ORDER BY order_expression[ASC|DESC]]
    2 其中的“select_list”表示要查询哪些列,如果使用了*表示查询所有列,WHERE后面是查询条件。返回的是一个ResultSet对象,使用.next()来遍历。rs对象初始化时在第一个数据前即:-1.
    1 // 执行sql语句返回的是执行的次数,用于添加,更新,删除
    2 row = stmt.executeUpdate(sql);
    3 //执行sql查询语句,用于查询
    4  resultset = stmt.executeQuery(sql);

    7.使用后,需要关闭数据库的连接和数据库操作对象的连接

     1        finally {
     2             try {
     3                 if (stmt != null) {
     4                     stmt.close();
     5                 }
     6             } catch (Exception e2) {
     7                 // TODO: handle exception
     8                 System.out.println("关闭Statement对象出现的问题!");
     9             } finally {
    10                 try {
    11                     if (conn != null) {
    12                         conn.close();
    13                     }
    14                 } catch (Exception e3) {
    15                     // TODO: handle exception
    16                     System.out.println("关闭数据库连接时出现问题!");
    17                 }
    18             }

    完整代码如下:

     1 package day1;
     2 
     3 import java.io.IOException;
     4 import java.sql.Connection;
     5 import java.sql.DriverManager;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 import java.util.Properties;
     9 
    10 public class Inserte {
    11     public int Insert() {
    12         int row = 0;
    13         Connection conn = null;
    14         Statement stmt = null;
    15         // 加载驱动
    16         try {
    17             /**
    18              * 建议使用这种方法来加载用户名和密码,易于修改和管理 建立一个.properties文件,然后填入键值对 user = root
    19              * password = root
    20              */
    21             // 获取数据库的用户名和密码
    22             Properties prop = new Properties();
    23             prop.load(Inserte.class
    24                     .getResourceAsStream("/day1/database.properties"));
    25             Class.forName("com.mysql.jdbc.Driver");
    26             // 建立连接
    27             conn = DriverManager.getConnection(
    28                     "jdbc:mysql://localhost:3306/com.xhm.sql", prop);
    29             // 获取执行SQL对象
    30             stmt = conn.createStatement();
    31             // 定义插入SQL语句
    32             String sql = "insert into student values(6,'Perike',50)";
    33             // 执行sql语句返回的是执行的次数
    34             row = stmt.executeUpdate(sql);
    35             //执行sql查询语句
    36             //stmt.executeQuery(sql);
    37             //System.out.println("row=" + row);
    38         } catch (ClassNotFoundException e) {
    39             // TODO Auto-generated catch block
    40             e.printStackTrace();
    41         } catch (SQLException e) {
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         } catch (IOException e) {
    45             // TODO Auto-generated catch block
    46             e.printStackTrace();
    47         } finally {
    48             try {
    49                 if (stmt != null) {
    50                     stmt.close();
    51                 }
    52             } catch (Exception e2) {
    53                 // TODO: handle exception
    54                 System.out.println("关闭Statement对象出现的问题!");
    55             } finally {
    56                 try {
    57                     if (conn != null) {
    58                         conn.close();
    59                     }
    60                 } catch (Exception e3) {
    61                     // TODO: handle exception
    62                     System.out.println("关闭数据库连接时出现问题!");
    63                 }
    64             }
    65         }
    66         return row;
    67     }
    68 }

    7.预编译语句,防止注入攻击

       7.1SQL注入攻击: 

    1     String name = "Tom";
    2     String sql = "select * from student where name = ' "+name+" ' ";
    3     实际SQL语句为:select * from student where name = 'Tom'
    4     //当改变name内容时,
    5     String name = "Tom 'or' a'='a";
    6     String sql = "select * from student where name = "+name+"";
    7     实际SQL语句为:select *from student where name = 'Tom' or 'a' = 'a'即select * from student

      7.2使用PerpareStatement

     1     /**
     2      * PrepareStatement创建SQL语句时候就会编译,
     3      * 存储在PrepareStatement对象中,所以当需要多次
     4      * 执行同一SQL语句的时候,使用他可以大大增加效率。
     5      */
     6     String sql = "select * from student where name = ?";
     7     PreparedStatement pstmt = conn.prepareStatement(sql);
     8     //设置sql中的问号,从1开始计算
     9     pstmt.setString(1,"Tom");
    10     ResultSet rs = pstmt.execute(sql);

    工具类:

      1 /*************************
      2  *@author 徐宏明    E-Mail:android_xhm.126.com
      3  *                                        QQ:294985925
      4  *@version 创建时间            :2013-5-19 下午11:54:34
      5  *
      6  *@see
      7  *************************/
      8 package day1;
      9 
     10 import java.sql.Connection;
     11 import java.sql.DriverManager;
     12 import java.sql.ResultSet;
     13 import java.sql.SQLException;
     14 import java.sql.Statement;
     15 
     16 /**
     17  * JDBC工具类,连接数据库
     18  * 
     19  * @author 宏明
     20  * 
     21  */
     22 public class DBConnection {
     23     // 驱动类名
     24     private static final String DBDRIVER = "com.mysql.jdbc.Driver";
     25     // 连接URL
     26     private static final String DBURL = "jdbc:mysql://localhost:3306/javaweb";
     27     // 数据库的用户名
     28     private static final String DBUSER = "root";
     29     // 数据库的密码
     30     private static final String DBPASSWORD = "root";
     31     // 静态块,用来加载驱动
     32     static {
     33         try {
     34             Class.forName(DBDRIVER);
     35         } catch (ClassNotFoundException e) {
     36             // TODO Auto-generated catch block
     37             e.printStackTrace();
     38             System.out.println("加载驱动失败!!!");
     39         }
     40     }
     41 
     42     /**
     43      * 建立获取连接的方法
     44      * 
     45      * @return 数据库连接对象
     46      */
     47     public static Connection getConnection() {
     48         Connection conn = null;
     49         try {
     50             conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
     51         } catch (SQLException e) {
     52             // TODO Auto-generated catch block
     53             e.printStackTrace();
     54             System.out.println("发生连接异常!!!");
     55         }
     56         return conn;
     57     }
     58 
     59     /**
     60      * 关闭数据库连接
     61      * 
     62      * @param conn
     63      *            数据库连接
     64      */
     65     public static void closeConn(Connection conn) {
     66         if (conn != null) {
     67             try {
     68                 conn.close();
     69             } catch (SQLException e) {
     70                 // TODO Auto-generated catch block
     71                 e.printStackTrace();
     72                 System.out.println("关闭数据库发生异常!!!");
     73             }
     74         }
     75     }
     76 
     77     /**
     78      * 关闭数据库操作对象
     79      * 
     80      * @param stmt
     81      *            数据库操作对象
     82      */
     83     public static void closeStmt(Statement stmt) {
     84         if (stmt != null) {
     85             try {
     86                 stmt.close();
     87             } catch (SQLException e) {
     88                 // TODO Auto-generated catch block
     89                 e.printStackTrace();
     90                 System.out.println("关闭数据库操作对象发生异常!!!");
     91             }
     92         }
     93     }
     94 
     95     /**
     96      * 关闭结果集方法
     97      * 
     98      * @param rs
     99      *            结果集
    100      */
    101     public static void closeRs(ResultSet rs) {
    102         if (rs != null) {
    103             try {
    104                 rs.close();
    105             } catch (SQLException e) {
    106                 // TODO Auto-generated catch block
    107                 e.printStackTrace();
    108                 System.out.println("关闭结果集发生异常!!!");
    109             }
    110         }
    111     }
    112 }

     

     
  • 相关阅读:
    HDU 1063 Exponentiation
    HDU 1261 字串数
    HDU 1715 大菲波数
    HDU 1002 A + B Problem II
    csharp 復制DataTable修改某列的值
    解决IE6下透明PNG图片有灰底的解决方案
    webform TextBox以一条横线显示 兼容各主流瀏覽器 .
    SQL 工齡計算
    csharp Format CultureInfo
    Csharp Winform TextBox 樣式以一條橫線顯示
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3087868.html
Copyright © 2011-2022 走看看