java-jdbc

来源:互联网 发布:将软件添加到磁贴 编辑:程序博客网 时间:2024/06/02 01:52
链接数据库步骤:
package com.west.demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/* * JDBC操作数据库的步骤 * 1.注册驱动 *    告知JVM使用的是哪一个数据库的驱动 * 2.获得链接 *    使用JDBC中的类,完成对MYSQL数据库的链接 * 3.获得语句执行平台 *    通过链接对象获取对SQL语句的执行者对象 * 4.执行SQL语句 *    通过执行者对象,向数据库执行SQL语句 *    获取到数据库的执行后的结果 * 5.处理结果 */public class JDBCDemo {    public static void main(String[] args) throws ClassNotFoundException,SQLException {        //1.注册驱动,反射技术,将驱动类加入到内存        Class.forName("com.mysql.jdbc.Driver");        //2.获得数据库的链接,DriverManager类中静态方法        /* static Connection getConnection(String url,String user,String password)         * 返回值是connection接口的实现类,在mysql驱动程序         * url:数据库地址, jdbc:mysql://localhost:3306/mybase;         */        String url = "jdbc:mysql://localhost:3306/mybase";        String username = "root";        String password = "qgm610824";        Connection con = DriverManager.getConnection(url,username,password);        //3.获得语句执行平台,通过数据库连接对象,获取到SQL语句的执行者对象        //con对象调用方法 statement createment() 获取statement对象,        //将SQL语句发送到数据库        //返回值是statement接口的实现类对象,在mysql驱动程序        Statement stat = con.createStatement();        /*4.执行SQL语句         * 通过执行者对象调用方法执行SQL语句,获取结果         * int executeUpdate(String sql) 执行SQL语句 用于insert delete update         * 不能用于select         * 返回int ,操作成功,返回的是表的行数         *          */        int row= stat.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')");        System.out.println(row);        //6.释放资源 一堆close        stat.close();        con.close();    }}
package com.west.demo;import java.sql.*;public class JDBCDemo1 {    public static void main(String[] args) throws ClassNotFoundException,SQLException{        //1.注册驱动        Class.forName("com.mysql.jdbc.Driver");        //2.获取链接对象        String url= "jdbc:mysql://localhost:3306/mybase";        String username= "root";        String password = "qgm610824";        Connection con = DriverManager.getConnection(url,username,password);        //3.获取执行SQL语句对象        Statement stat = con.createStatement();        //4.调用执行者对象方法,执行SQL语句,获取结果集        //ResultSet executeQuery(String sql)执行SQL语句中的        //select查询        String sql = "SELECT * FROM sort";        ResultSet rs = stat.executeQuery(sql);        //5.处理结果集        //ResultSet接口方法boolean next() 返回true有结果集,false没有结果集        while(rs.next()) {            //获取每列数据,使用是ResultSet接口的方法 getXX方法参数中,建议写String列名            System.out.println(rs.getInt("sid")+"   "+rs.getString("sname")+                    "   "+rs.getDouble("sprice")+"   "+rs.getString("sdesc"));        }        rs.close();        stat.close();        con.close();    }}
注入攻击:
package com.west.demo;import java.sql.*;import java.util.Scanner;/* * java程序实现用户登录,用户名和密码,数据库检查 * 演示注入攻击 */public class JDBCDemo3 {    public static void main(String[] args) throws ClassNotFoundException,SQLException{        //1.注入驱动        Class.forName("com.mysql.jdbc.Driver");        //2.获得连接对象        String url = "jdbc:mysql://localhost:3306/mybase";        String username = "root";        String password ="qgm610824";        Connection con = DriverManager.getConnection(url,username,password);        //3.获取执行SQL语句对象        Statement stat = con.createStatement();        Scanner sc =new Scanner(System.in);        String user=sc.nextLine();        String pass=sc.nextLine();        //执行SQL语句,查询用户名和密码,如果存在,登录成功,不存在登录失败        String sql="select * from users where username='"+user+"' and password='"+pass+"'";        System.out.println(sql);        ResultSet rs =stat.executeQuery(sql);        while(rs.next())        {            System.out.println(rs.getString("username")+"  "+rs.getString("password"));        }        rs.close();        stat.close();        con.close();    }} result:qew        af 'or'1=1        select * from users where username='qew' and     password='af 'or'1=1'q  12
防止注入攻击:
package com.west.demo;import java.sql.*;import java.util.Scanner;/* * Java程序实现用户登录,用户名和密码,数据库检查 * 防止注入攻击 * Statement有一个子接口PreparedStatement(SQL预编译存储,多次高效的执行SQL) *  */public class JDBCDemo4 {public static void main(String[] args) {    try {    Class.forName("com.mysql.jdbc.Driver");    String url="jdbc:mysql://localhost:3306/mybase";    String username="root";    String password="qgm610824";    Connection con = DriverManager.getConnection(url,username,password);    Scanner sc=new Scanner(System.in);    String usesr = sc.nextLine();    String pass = sc.nextLine();    String sql ="select * from users where username=? and password=?";    //调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类            //方法中参数,SQL语句中的参数全部采用问号占位符    PreparedStatement ps =con.prepareStatement(sql);    System.out.println(ps);    //调用pst对象set方法,设置问号占位符上的参数    ps.setObject(1, usesr);    ps.setObject(2, pass);    //调用方法,执行Sql,获取结果集    ResultSet rs = ps.executeQuery();    while(rs.next()) {        System.out.println(rs.getString("username")+"  "+rs.getString("password"));    }    rs.close();    ps.close();    con.close();    }catch(Exception e) {        e.printStackTrace();    }}}
使用PreparedStatement接口,实现数据表的更新操作:
package com.west.demo.util;import java.sql.*;/* * 使用PreparedStatement接口,实现数据表的更新操作 *  */public class JDBCDemoUtil {public static void main(String[] args) throws ClassNotFoundException, SQLException {    Class.forName("com.mysql.jdbc.Driver");    String url="jdbc:mysql://localhost:3306/mybase";    String username="root";    String password="qgm610824";    Connection con=DriverManager.getConnection(url,username,password);    String sql="UPDATE sort SET sname=?, sprice=? WHERE sid=?";    PreparedStatement ps=con.prepareStatement(sql);    ps.setObject(1, "汽车用品");    ps.setObject(2, 23456);    ps.setObject(3, 7);    ps.executeUpdate();    ps.close();    con.close();}}

####使用PreparedStatement接口,实现数据表的查询操作:

package com.west.demo.util;import java.sql.*;/* * 使用PreparedStatement接口,实现数据表的查询操作 *  */public class JDBCDemoUtil21 {public static void main(String[] args) throws ClassNotFoundException, SQLException {    Class.forName("com.mysql.jdbc.Driver");    String url="jdbc:mysql://localhost:3306/mybase";    String username="root";    String password="qgm610824";    Connection con=DriverManager.getConnection(url,username,password);    String sql="SELECT * FROM sort";    PreparedStatement ps=con.prepareStatement(sql);    ResultSet rs=ps.executeQuery();    while(rs.next()) {        System.out.println(rs.getString("sid")+"  "+rs.getString("sname")+"  "    +rs.getString("sprice")+"  "+rs.getString("sdesc"));    }    rs.close();    ps.close();    con.close();}}

JDBC工具类

package com.west.jdbcutil;/* * 实现JDBC工具类 * 定义方法,直接返回数据库的连接对象 *  * 写关闭方法 */import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCUtils {    private JDBCUtils() {}    private static Connection con;    static {        try {            Class.forName("com.mysql.jdbc.Driver");            String url = "jdbc:mysql://localhost:3306/mybase";            String username="root";            String password="qgm610824";            con=DriverManager.getConnection(url,username,password);        } catch (Exception e) {            throw new RuntimeException(e+"数据库连接失败");        }    }    /*     * 定义静态方法,返回数据库的连接对象     */    public static Connection getConnection() {        return con;    }    public static void close(Connection con,Statement stat,ResultSet rs) {        if(rs!=null) {            try {                rs.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if(stat!=null) {            try {                stat.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if(con!=null) {            try {                con.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    public static void close(Connection con,Statement stat){         if(stat!=null){             try{                 stat.close();             }catch(SQLException ex){}         }         if(con!=null){             try{                 con.close();             }catch(SQLException ex){}         }    }}

Properties配置文件工具类

以后想要连接其他数据库或表,只需要修改配置文件,不用修改源代码

配置文件:
文件要在src文件夹新建,后缀名为.properties内容为:driverClass=com.mysql.jdbc.Driver       url=jdbc:mysql://localhost:3306/mybase       username=root       password=xxxx
package com.west.jdbcutil;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;/* * 编写数据库连接的工具类,JDBC工具类 * 编写连接对象采用读取配置文件方式 * 读取文件获取连接,执行一次,static{} */public class JDBCUtilsConfig {    private static Connection con;    private static String driverClass;    private static String url;    private static String username;    private static String password;    static {        try {            readConfig();            Class.forName(driverClass);            con=DriverManager.getConnection(url, username, password);        }catch(Exception e) {            throw new RuntimeException("数据库连接失败");        }    }    private static void readConfig() throws IOException {        InputStream in =JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("base.properties");        Properties pro=new Properties();        pro.load(in);        driverClass=pro.getProperty("driverClass");        url = pro.getProperty("url");        username = pro.getProperty("username");        password = pro.getProperty("password");    }    public static Connection getConnection() {        return con;    }}
package com.west.propertiesdemo;import java.sql.Connection;import com.west.jdbcutil.JDBCUtilsConfig;public class TestUtils {    public static void main(String[] args) {        //直接调用JDBCUtilsConfig.getConnection        Connection con =JDBCUtilsConfig.getConnection();        System.out.println(con);    }}