1,JDBC 是java用来跟数据库建立连接的一种技术,可以说是java的一套用来建立连接的API,它是连接数据库和Java应用程序的一个纽带。下面用JDBC技术利用程序来对数据库进行增删改查。

2,

   
   
   
   
  1. package com.myivtec.util;  
  2.  
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8.  
  9. public class JdbcUtil {  
  10. //这个url用来跟数据库建立连接
  11. //localhost 这个是用来建立连接的数据库的ip地址
  12. //3306是要连接的端口,就是数据库绑定的端口
  13. // db这个是要建立连接的数据库的名字
  14. //useUnicode=true&characterEncoding=UTF-8这里使用unicode编码,编码格式是UTF-8,就是跟数据库建立连接的格式
  15. //这个字符集的设置是用来解决中文乱码问题的
  16.     static String url ="jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8";  
  17. //这个连接数据库的用户名
  18.     static String username = "root";  
  19. //这个是连接数据库的密码
  20.     static String password = "root";  
  21.     //注册驱动  
  22.     static {  
  23.         try {  
  24.             Class.forName("com.mysql.jdbc.Driver");  
  25.         } catch (ClassNotFoundException e) {  
  26.             // TODO Auto-generated catch block  
  27.             e.printStackTrace();  
  28.         }  
  29.     }  
  30. //得到一个数据库的连接
  31.     public static Connection getConnection() throws Exception{  
  32.         return DriverManager.getConnection(url,username,password);  
  33.     }  
  34. //这个方法用来释放连接
  35. //ResultSet是结果集,从数据库里查询出来的数据会存放在这里
  36. //Statement 这个是用来执行事务,SQL语句的
  37. //Connection是跟数据库之间的连接
  38.     public static void free(ResultSet rs,Statement st,Connection con){  
  39.         if(rs!=null){  
  40.             try {  
  41.                 rs.close();  
  42.             } catch (SQLException e) {  
  43.                 // TODO Auto-generated catch block  
  44.                 e.printStackTrace();  
  45.             }  
  46.         }  
  47.         if(st!=null){  
  48.             try {  
  49.                 st.close();  
  50.             } catch (SQLException e) {  
  51.                 // TODO Auto-generated catch block  
  52.                 e.printStackTrace();  
  53.             }  
  54.         }  
  55.         if(con!=null){  
  56.             try {  
  57.                 con.close();  
  58.             } catch (SQLException e) {  
  59.                 // TODO Auto-generated catch block  
  60.                 e.printStackTrace();  
  61.             }  
  62.         }  
  63.     }  
  64. }  

2,model类跟数据库进行对应

   
   
   
   
  1. package com.myivtec.model;  
  2.  
  3. public class User {  
  4.       
  5.     private int id;  
  6.     private String username;  
  7.     private String password;  
  8.     /**  
  9.      * 1 代表管理员  
  10.      * 2 普通用户  
  11.      */ 
  12.     private int isAdmin = 2;  
  13.     private String email;  
  14.     public int getId() {  
  15.         return id;  
  16.     }  
  17.     public void setId(int id) {  
  18.         this.id = id;  
  19.     }  
  20.     public String getUsername() {  
  21.         return username;  
  22.     }  
  23.     public void setUsername(String username) {  
  24.         this.username = username;  
  25.     }  
  26.     public String getPassword() {  
  27.         return password;  
  28.     }  
  29.     public void setPassword(String password) {  
  30.         this.password = password;  
  31.     }  
  32.     public String getEmail() {  
  33.         return email;  
  34.     }  
  35.     public void setEmail(String email) {  
  36.         this.email = email;  
  37.     }  
  38.     public int getIsAdmin() {  
  39.         return isAdmin;  
  40.     }  
  41.     public void setIsAdmin(int isAdmin) {  
  42.         this.isAdmin = isAdmin;  
  43.     }  
  44.       
  45.       
  46. }  

在数据库中对应的表的结构

   
   
   
   
  1. mysql> desc user 
  2.     -> ;  
  3. +----------+--------------+------+-----+---------+----------------+  
  4. | Field    | Type         | Null | Key | Default | Extra          |  
  5. +----------+--------------+------+-----+---------+----------------+  
  6. | id       | int(11)      | NO   | PRI | NULL    | auto_increment |  
  7. | username | varchar(100) | YES  |     | NULL    |                |  
  8. password | varchar(100) | YES  |     | NULL    |                |  
  9. | isAdmin  | int(11)      | YES  |     | NULL    |                |  
  10. | email    | varchar(100) | YES  |     | NULL    |                |  
  11. +----------+--------------+------+-----+---------+----------------+  
  12. rows in set (0.01 sec) 

3,DAO层

   
   
   
   
  1. package com.myivtec.dao;  
  2.  
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6.  
  7. import com.myivtec.form.CommonForm;  
  8. import com.myivtec.model.User;  
  9. import com.myivtec.util.JdbcUtil;  
  10.  
  11. public class UserDao {  
  12.     /**  
  13.      * 此方法用户查询用户名是否存在  
  14.      * @param username要查询的用户名  
  15.      * @return true存在 false不存在  
  16.      */  
  17.     public boolean isExit(String username){  
  18.         boolean res = false;  
  19.         Connection con = null;  
  20.         ResultSet rs = null;  
  21.         PreparedStatement ps = null;  
  22.         try {  
  23.             /**  
  24.              * 得到一个数据库连接  
  25.              */  
  26.             con = JdbcUtil.getConnection();  
  27.             /**  
  28.              * 要执行查询SQL语句 ? 代表 要插入的参数条件  
  29.              */  
  30.             String sql = "select * from user where username = ?" ;  
  31.             ps = con.prepareStatement(sql);  
  32.             //这里讲参数替换条  
  33.             ps.setString(1, username);  
  34.             //执行查询,把结果存放在结果集对象rs中  
  35.             rs = ps.executeQuery();  
  36.             //结果集中有数据的话 将res设为true 
  37.             while(rs.next()){  
  38.                 res = true;  
  39.             }  
  40.         } catch (Exception e) {  
  41.             // TODO Auto-generated catch block  
  42.             e.printStackTrace();  
  43.         }finally{  
  44.             //释放连接资源  
  45.             JdbcUtil.free(rs, ps, con);  
  46.         }  
  47.         return res;  
  48.     }  
  49.     /**  
  50.      * 这个是登陆方法,用来验证用户输入的用户名和密码是否正确,就是在数据库中查询是否存在这样的一条记录  
  51.      * @param username  
  52.      * @param password 
  53.      * @return 
  54.      */  
  55.     public User login(String username,String password){  
  56.         User user = null;  
  57.         Connection con = null;  
  58.         ResultSet rs = null;  
  59.         PreparedStatement ps = null;  
  60.         try {  
  61.             //得到数据库的一个连接  
  62.             con = JdbcUtil.getConnection();  
  63.             //要执行的SQL语句  
  64.             String sql = "select username,password,isAdmin from user where username=? and password= ?";  
  65.             //创建一个PrepareStatement对象用来准备要执行的SQL语句  
  66.             ps = con.prepareStatement(sql);  
  67.             //把参数设进去  
  68.             //1代表第一个问号  
  69.             //2代表第二个问号  
  70.             ps.setString(1, username);  
  71.             ps.setString(2, password);  
  72.             //执行查询语句,并将结果存放在结果集rs中  
  73.             rs = ps.executeQuery();  
  74.             while(rs.next()){  
  75.                 user = new User();  
  76.                 //根据结果集,将结果构造一个对象  
  77.                 //根据列明得到要查询列的值  
  78.                 user.setIsAdmin(rs.getInt("isAdmin"));  
  79.                 user.setUsername(rs.getString("username"));  
  80.                 user.setPassword(rs.getString("password"));  
  81.             }  
  82.         } catch (Exception e) {  
  83.             // TODO Auto-generated catch block  
  84.             e.printStackTrace();  
  85.         }finally{  
  86.             //释放连接  
  87.             JdbcUtil.free(rs, ps, con);  
  88.         }  
  89.         return user;  
  90.     }  
  91. }