关于JDBC连接数据库

用户输入登录例程(此为传智播客学习视频中对应的源码,仅供学习):

实现JDBC操作

              //1、注册驱动

              //2、创建连接

              //3、得到执行sql语句的Statement对象

              //4、执行sql语句,并返回结果

              //5、处理结果

              //6关闭资源


...\src 下面的  dbinfo.properties文件,用于保存连接数据库需要的用户名、密码、注册的数据库驱动。只所以使用此文件来保存这些信息,是为了在更换数据库时,不需要再在代码中进行修改,直接修改此文件中对应的内容即可,可移植性高。

driverClass=com.mysql.jdbc.Driver

url=jdbc:mysql:///day06   (此中的\\\表示的是本机默认端口)

user=root

password=abc


...\src\com\itheima\client 路径下的 Login.java 文件

package com.itheima.client;

import java.util.Scanner;

import com.itheima.entity.User;

import com.itheima.service.DoLogin;

public class Login {

       public static voidmain(String[] args) {

              Scanner input =new Scanner(System.in);

              System.out.println("请输入用户名:");

              String name =input.nextLine();

              System.out.println("请输入密码:");

              String pwd =input.nextLine();

             

              DoLogin dl = newDoLogin();

              User user =dl.findUser(name, pwd);//调用查询用户的方法

              if(user!=null){

                     System.out.println("欢迎你:"+user.getName());

              }else{

                     System.out.println("用户名或密码错误!");

              }

       }     

}


...\src\com\itheima\entity路径下的 User.java 文件

package com.itheima.entity;

import java.util.Date;

public class User {

       private int id;

       private String name;

       private String password;

       private String email;

       private Date birthday;

       public int getId() {

              return id;

       }

       public void setId(intid) {

              this.id = id;

       }

       public String getName(){

              return name;

       }

       public voidsetName(String name) {

              this.name = name;

       }

       public StringgetPassword() {

              return password;

       }

       public voidsetPassword(String password) {

              this.password =password;

       }

       public String getEmail(){

              return email;

       }

       public voidsetEmail(String email) {

              this.email =email;

       }

       public Date getBirthday(){

              return birthday;

       }

       public voidsetBirthday(Date birthday) {

              this.birthday =birthday;

       }

       @Override

       public String toString(){

              return "User[id=" + id + ", name=" + name + ", password=" +password

                            +", email=" + email + ", birthday=" + birthday +"]";

       }

}


...\src\com\itheima\entity路径下的 DoLogin.java 文件

package com.itheima.service;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import com.itheima.entity.User;

import com.itheima.util.DBUtils;

public class DoLogin {

       /**

        * 根据用户名和密码查询用户对象信息

        * @param name

        * @param pwd

        * @return u

        */

       public UserfindUser(String name,String pwd){

              Connection conn =null;

              PreparedStatementstmt = null;

              ResultSet rs =null;

              User u = null;

              try {

                     conn =DBUtils.getConnection();//得到连接对象Connection

                     String sql="SELECT * FROM users WHERE NAME=? AND PASSWORD=?";

                     stmt =conn.prepareStatement(sql);//得到执行sql语句的对象Statement

                    /**

                      *  preparedStatement:预编译对象, 是Statement对象的子类。

                      *   特点:

                      *             性能要高

                      *             会把sql语句先编译

                      *             sql语句中的参数会发生变化,过滤掉用户输入的关键字。

                   **/

                     //给?赋值

                     stmt.setString(1,name);//1代表SQL语句中的第一个“?”号

                     stmt.setString(2,pwd);

                    

                     rs =stmt.executeQuery();//执行sql语句

                     if(rs.next()){

                            u =new User();

                            u.setId(rs.getInt(1));

                            u.setName(rs.getString(2));

                            u.setPassword(rs.getString(3));

                            u.setEmail(rs.getString(4));

                            u.setBirthday(rs.getDate(5));

                     }

              } catch(SQLException e) {

                     e.printStackTrace();

              }finally{

                     DBUtils.closeAll(rs,stmt, conn);

              }

              return u;

       }

}


...\src\com\itheima\entity路径下的 DBUtils.java 文件 

package com.itheima.util;

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 StringdriverClass;

       private static Stringurl;

       private static Stringuser;

       private static Stringpassword;

      /**

      *  此处使用了静态代码块,在第一次加载该类时,就会执行这段代码。

      *  此处没有使用DriverManager.registerDriver(newcom.mysql.jdbc.Driver());不建议使用,

      *    原因有2个:

      *       > 导致驱动被注册2次。

      *       > 强烈依赖数据库的驱动jar

      *       解决办法:

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

      **/

       static{

              ResourceBundle rb= ResourceBundle.getBundle("dbinfo");    //从dbinfo.properties文件中获取数据

              //给上面4个变量赋值

              driverClass =rb.getString("driverClass");

              url =rb.getString("url");

              user =rb.getString("user");

              password =rb.getString("password");

              try {

                     Class.forName(driverClass);

              } catch(ClassNotFoundException e) {

                     e.printStackTrace();

              }     

       }

       //得到连接

       public static ConnectiongetConnection() throws SQLException{

              returnDriverManager.getConnection(url, user, password);

       }

       //关闭资源

       public static voidcloseAll(ResultSet rs,Statement stmt,Connection conn){

              if(rs!=null){

                     try {

                            rs.close();

                     } catch(SQLException e) {

                            e.printStackTrace();

                     }

                     rs = null;

              }

              if(stmt!=null){

                     try {

                            stmt.close();

                     } catch(SQLException e) {

                            e.printStackTrace();

                     }

                     stmt =null;

              }

              if(conn!=null){

                     try {

                            conn.close();

                     } catch(SQLException e) {

                            e.printStackTrace();

                     }

                     conn =null;

              }

       }

}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值