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 }

 

 
原文地址:https://www.cnblogs.com/qinghuaideren/p/3087868.html