JDBC(初步试用)

1.先用jdbc操作数据库,心里想让数据库干什么,用jdbc解决,在我们面前的只有一条路,就是jdbc

以前我们输入用户名密码进入数据库,进行查询,现在这个操作是这样完成的

import java.sql.*;
public class Connect {
    Connection conn; 
    Statement stmt;
    ResultSet rs;
    public Connect(String DB,String user,String password,String sql) throws SQLException {
    //加载驱动程序类
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    //获取连接类
    conn=DriverManager.getConnection(DB,user,password);
    //获取执行sql的对象
    stmt=conn.createStatement();
    //获取执行sql后的返回集
    rs=stmt.executeQuery(sql);
    //处理结果
    while(rs.next()) {
         System.out.print(rs.getObject(1));

    
    }
//关闭连接(就像你打开数据库获得你想要的东西后就得关了它,以免占用资源) } }
public class Test1 {
    public static void main(String [] agrs) throws SQLException {
        Connect c=new Connect("jdbc:mysql://localhost:3306/mydata","root","root","select * from emp");
        
    }
        
        
        
    

}

还可以show databases

public class Test1 {
    public static void main(String [] agrs) throws SQLException {
        Connect c=new Connect("jdbc:mysql://localhost:3306/mydata","root","root","show databases");
        c.conn.close();
        
    }
        
        
        
    

}

等等jdbc都可以做到

2.加载驱动程序可以用反射的机制

Class.forName("com.mysql.jdbc.Driver");

3.获取数据库的连接,可以用配置文件方式,也可以用url方式(注意配置文件需要放到根目录下)

info=new Properties();
    info.setProperty("user", user);
    info.setProperty("password", password);
    conn=DriverManager.getConnection(DB, info);
conn=DriverManager.getConnection(DB+'?'+"user="+user+'&'+"password="+password);

4.statement

5.结果集的处理

还有get##(基本数据类型等)将数据库的类型与java的类型对应起来

6.DBUtils

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class DBUtils {
    
    private static String url;
    private static String user;
    private static String password;
    private static String sql;
    private static String driverclass;
    
    static {
        //注意配置文件需要放到根目录下,不然报错
        ResourceBundle rb =ResourceBundle.getBundle("jdbc");
        driverclass=rb.getString("driverclass");
        url=rb.getString("url");
        user=rb.getString("user");
        password=rb.getString("password");
        sql=rb.getString("sql");
        try {
            Class.forName(driverclass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
    

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
        
    }
    public static Statement getStatement(Connection connect) throws SQLException {
        return connect.createStatement();
        
    }
    //有结果集
    public static ResultSet getSqlQuery(Statement stmt) throws SQLException {
        return stmt.executeQuery(sql);
        
    }
    //没有结果集
    public static void getSqlUpadate(Statement stmt) throws SQLException {
        stmt.executeUpdate(sql);
    }
    //处理结果集
    public static void getResult(ResultSet rs) throws SQLException {
          //结果集怎么才能输出所有列
        while(rs.next())
        System.out.println(rs.getObject(1));
        
    }
    //关闭资源
    public static void closeAll(ResultSet rs,Statement stmt,Connection conn) {
        if(rs!=null) {
              try{rs.close();
              
              }catch(Exception ee) {
                  
              }
              rs=null;
            }
            if(stmt!=null) {
                  try{stmt.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  stmt=null;
                }
            if(conn!=null) {
                  try{conn.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  conn=null;
                }
    }
    

}
driverclass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydata
user=root
password=root
sql=select  * from emp where empno = 9997
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
    public static void main(String[] agrs)  {
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;
        
        try {
            conn=DBUtils.getConnection();
            stmt=DBUtils.getStatement(conn);
            rs=DBUtils.getSqlQuery(stmt);
            DBUtils.getResult(rs);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("ha");
        }finally {
            DBUtils.closeAll(rs, stmt, conn);
        }
        
        
    }

    

}

 7.多个功能一起写

当多个功能一起写时,你会发现程序的好坏由这几个部分构成(界面,在控制台提示你输入什么,或者在控制台显示操作之后的结果数据;逻辑控制,当你输入什么时操作哪个部分,当你输入成功时又该操作哪部分,是怎么跟用户交互将这种逻辑体现出来;获取控制台输入的对象;与数据库的连接,结果集的处理)

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class Test {
    public static void main(String[] agrs)  {
        //这种控制总体架构的叫做什么,来规划各个模块的位置.这种控制也需要调代码优化的
        Connection coon;
        PreparedStatement stmt;
        ResultSet rs;
        while(true) {
            System.out.println("请输入登录,注册,查询商品的d,z,c其中一个:");
            Scanner sc =new Scanner(System.in);
            char s=sc.nextLine().charAt(0);
        switch(s) {
        case 'd':
            //输入界面和获取数据这部分也有调优
            int  i=1;
            while(i==1)
            {
            User u=new User();
            User u2=new User();
            System.out.println("请输入用户名:");
            String c1=sc.nextLine();
            System.out.println("请输入密码:");
            String c2=sc.nextLine();
            u.setName(c1);
            u.setPassword(c2);
            //连接数据库部分(分为连接部分,sql部分,逻辑控制部分,显示部分)
            try {
                coon=DBUtils.getConnection();
                String sql="select * from User where name=? and password=?";
                stmt=coon.prepareStatement(sql);
                stmt.setString(1, u.getName());
                stmt.setString(2, u.getPassword());
                rs=stmt.executeQuery();
                //处理结果集
                while(rs.next()) {
                    u2.setName(rs.getString(1));
                    u2.setPassword(rs.getString(2));
                }
            //判断是否相等(这也是一部分值得完善的代码)
            if(u2.getName()!=null&&u2.getPassword()!=null) {
                System.out.println("登录成功");
                i=0;
            }else {
                System.out.println("登录失败");
                System.out.println("请输入重新登录还是退出:0退出,1重新登录");
                String c3=sc.nextLine();
                 i=Integer.parseInt(c3);
                
            }
                
                
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
            
            break;
            
        case 'z':
            //这里跟上面一样,都是在控制台输入数据,返回一个对象,做一个获取user对象的类
            int i2=1;
            while(i2==1) {
            User u=new User();
            GetUser getuser=new GetUser();
            u=getuser.getUser();
            //与数据库的连接部分
            try {
                coon=DBUtils.getConnection();
                String sql="insert into User values (?,?)";
                stmt=coon.prepareStatement(sql);
                stmt.setString(1, u.getName());
                stmt.setString(2, u.getPassword());
                //检查模块
                if(!stmt.execute()) {//这里值的完善,因为可能出现重名等判断,还有密码等
                    //成功与否的方法
                    System.out.println("注册成功,欢迎"+u.getName());
                    i2=0;
                }else {//这里没有注册成功的代码跟上一个差不多
                    System.out.println("注册失败");
                    System.out.println("请输入重新注册还是退出:0退出,1重新登录");
                    String c3=sc.nextLine();
                     i2=Integer.parseInt(c3);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
            
            
            break;
        case 'c':
            User u2=new User();
            User u=new User();
            try {
                coon=DBUtils.getConnection();
                //查询这部分就更复杂了,因为有多种查询情况
                System.out.println("请选择你要查询的样子:0根据一个user名来查询,1根据多个user名来查询");
                Scanner sc2 =new Scanner(System.in);
                int m=Integer.parseInt(sc2.nextLine());
                if(m==0) {
                    System.out.println("请输入你要查询的名字");
                    String ss=sc2.nextLine();
                String sql="select * from User where name=? ";
                stmt=coon.prepareStatement(sql);
                stmt.setString(1, ss);
                rs=stmt.executeQuery();
                while(rs.next()) {
                    u2.setName(rs.getString(1));
                    u2.setPassword(rs.getString(2));
                }
                if(u2.getName()!=null) {
                System.out.println(u2.getName());
                System.out.println(u2.getPassword());
                }else {
                    System.out.println("没有");
                }
                
                }else {
                    System.out.println("请输入你要查询的第一个名字");
                    String ss=sc2.nextLine();
                    System.out.println("请输入你要查询的第二个名字");
                    String ss2=sc2.nextLine();
                    String sql="select * from User where use=? and ? ";
                    stmt=coon.prepareStatement(sql);
                    stmt.setString(1, ss);
                    stmt.setString(2, ss2);
                    rs=stmt.executeQuery();
                    //这里就需要定义一个list来存储多个对象(先不写)
                    while(rs.next()) {
                        System.out.println(rs.getString(1));
                        System.out.println(rs.getString(2));
                    }
                    
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        
            break;
            default:
                System.out.println("输入不合法");
        }
        }
    }

}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class DBUtils {
    
    private static String url;
    private static String password;
    private static String driverclass;
    private static String user;
    static {
        ResourceBundle rb =ResourceBundle.getBundle("jdbc");
        driverclass=rb.getString("driverclass");
        url=rb.getString("url");
        user=rb.getString("user");
        password=rb.getString("password");
        try {
            Class.forName(driverclass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }
    public static void closeAll(ResultSet rs,Statement stmt,Connection conn) {
        if(rs!=null) {
              try{rs.close();
              
              }catch(Exception ee) {
                  
              }
              rs=null;
            }
            if(stmt!=null) {
                  try{stmt.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  stmt=null;
                }
            if(conn!=null) {
                  try{conn.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  conn=null;
                }
    }
    

}
public class GetUser {
    User u;
    public User getUser() {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入用户名:");
        String c1=sc.nextLine();
        System.out.println("请输入密码:");
        String c2=sc.nextLine();
        u=new User();
        u.setName(c1);
        u.setPassword(c2);
        return u;
    }

}
public class User {
    public String name;
    public String password;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    

}

 8.进一步封装

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class DBUtils {
    
    private static String url;
    private static String password;
    private static String driverclass;
    private static String user;
    static {
        ResourceBundle rb =ResourceBundle.getBundle("jdbc");
        driverclass=rb.getString("driverclass");
        url=rb.getString("url");
        user=rb.getString("user");
        password=rb.getString("password");
        try {
            Class.forName(driverclass);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }
    public static void closeAll(ResultSet rs,Statement stmt,Connection conn) {
        if(rs!=null) {
              try{rs.close();
              
              }catch(Exception ee) {
                  
              }
              rs=null;
            }
            if(stmt!=null) {
                  try{stmt.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  stmt=null;
                }
            if(conn!=null) {
                  try{conn.close();
                  
                  }catch(Exception ee) {
                      
                  }
                  conn=null;
                }
    }
    

}
import java.util.Scanner;

public class GetUser {
    User u;
    public User getUser() {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入用户名:");
        String c1=sc.nextLine();
        System.out.println("请输入密码:");
        String c2=sc.nextLine();
        u=new User();
        u.setName(c1);
        u.setPassword(c2);
        return u;
    }

}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CRUD {
    Connection coon;
    PreparedStatement stmt;
    ResultSet rs;
    User u2;
    public User select (User u) {
        try {
            coon=DBUtils.getConnection();
            String sql="select * from User where name=? and password=?";
            stmt=coon.prepareStatement(sql);
            stmt.setString(1, u.getName());
            stmt.setString(2, u.getPassword());
            rs=stmt.executeQuery();
            //处理结果集
            while(rs.next()) {
                u2=new User();
                u2.setName(rs.getString(1));
                u2.setPassword(rs.getString(2));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            DBUtils.closeAll(rs, stmt, coon);
        }
        
        return u2;
    
    }
    public boolean create(User u) {
        try {
            coon=DBUtils.getConnection();
            String sql="insert into User values (?,?)";
            stmt=coon.prepareStatement(sql);
            stmt.setString(1, u.getName());
            stmt.setString(2, u.getPassword());//
            boolean i=stmt.execute();
            return i;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }finally {
            DBUtils.closeAll(rs, stmt, coon);
        }
        
        

    }
    public User select2(String ss) {
        try {
            coon=DBUtils.getConnection();
            String sql="select * from User where name=? ";
            stmt=coon.prepareStatement(sql);
            stmt.setString(1, ss);
            
            rs=stmt.executeQuery();
            //处理结果集
            while(rs.next()) {
                u2=new User();
                u2.setName(rs.getString(1));
                u2.setPassword(rs.getString(2));
            }
            return u2;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            return null;
        }finally {
            DBUtils.closeAll(rs, stmt, coon);
        }
        
    }
    public void select2(String ss,String ss2) {
        try {
            coon=DBUtils.getConnection();
            String sql="select * from User where use=? and ? ";
            stmt=coon.prepareStatement(sql);
            stmt.setString(1, ss);
            stmt.setString(2, ss2);
            rs=stmt.executeQuery();
            while(rs.next()) {
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            
        }finally {
            DBUtils.closeAll(rs, stmt, coon);
        }
    }

}
public class User {
    public String name;
    public String password;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    

}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class Test {
    public static void main(String[] agrs)  {
        //这种控制总体架构的叫做什么,来规划各个模块的位置.这种控制也需要调代码优化的
        Connection coon;
        PreparedStatement stmt;
        ResultSet rs;
        while(true) {
            System.out.println("请输入登录,注册,查询商品的d,z,c其中一个:");
            Scanner sc =new Scanner(System.in);
            char s=sc.nextLine().charAt(0);
        switch(s) {
        case 'd':
            //输入界面和获取数据这部分也有调优
            int  i=1;
            while(i==1)
            {
            User u=new User();
            User u2=new User();
            System.out.println("请输入用户名:");
            String c1=sc.nextLine();
            System.out.println("请输入密码:");
            String c2=sc.nextLine();
            u.setName(c1);
            u.setPassword(c2);
            
            
            CRUD R=new CRUD();
            u2=R.select(u);
            //判断是否相等(这也是一部分值得完善的代码)
            if(u2.getName()!=null&&u2.getPassword()!=null) {
                System.out.println("登录成功");
                i=0;
            }else {
                System.out.println("登录失败");
                System.out.println("请输入重新登录还是退出:0退出,1重新登录");
                String c3=sc.nextLine();
                 i=Integer.parseInt(c3);
                
            }
                
                
            
            }
            
            break;
            
        case 'z':
            //这里跟上面一样,都是在控制台输入数据,返回一个对象,做一个获取user对象的类
            int i2=1;
            while(i2==1) {
            User u=new User();
            GetUser getuser=new GetUser();
            u=getuser.getUser();
            //与数据库的连接部分
            CRUD C=new CRUD();
           if(! C.create(u)) {//这里值的完善,因为可能出现重名等判断,还有密码等
                    //成功与否的方法
                    System.out.println("注册成功,欢迎"+u.getName());
                    i2=0;
                }else {//这里没有注册成功的代码跟上一个差不多
                    System.out.println("注册失败");
                    System.out.println("请输入重新注册还是退出:0退出,1重新登录");
                    String c3=sc.nextLine();
                     i2=Integer.parseInt(c3);
                }
        
            }
            
            
            break;
        case 'c':
            User u2=new User();
        
    
                //查询这部分就更复杂了,因为有多种查询情况
                System.out.println("请选择你要查询的样子:0根据一个user名来查询,1根据多个user名来查询");
                Scanner sc2 =new Scanner(System.in);
                int m=Integer.parseInt(sc2.nextLine());
                if(m==0) {
                System.out.println("请输入你要查询的名字");
                String ss=sc2.nextLine();
                CRUD r=new CRUD();
                u2=r.select2(ss);
                if(u2!=null) {
                System.out.println(u2.getName());
                System.out.println(u2.getPassword());
                }else System.out.println("没有");
                
                
                }else {
                    System.out.println("请输入你要查询的第一个名字");
                    String ss=sc2.nextLine();
                    System.out.println("请输入你要查询的第二个名字");
                    String ss2=sc2.nextLine();
                     CRUD rr=new CRUD();
                     rr.select2(ss, ss2);
                    
                }
            
        
            break;
            default:
                System.out.println("输入不合法");
        }
        }
    }

}

9.标准的代码

http://blog.csdn.net/songdeitao/article/details/17484635 (别人写的)

原文地址:https://www.cnblogs.com/S-Mustard/p/7712061.html