JDBC java数据连接 读取properties 数据库连接池 预编译

1.创建连接,下载MySQL驱动(JDBC接口的实现类,就是一个jar包)

public class Demo01 {
    public static void main(String[] args)
            throws ClassNotFoundException, SQLException {
        //1. 注册驱动  告诉虚拟机使用的是哪个数据库软件
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获取连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3", "root", "root");
        System.out.println(conn);
        //3. 创建SQL执行对象
        Statement stat = conn.createStatement();
        //4. 执行SQL语句
        String sql = "create table jdbct1 (id int primary key,name varchar(10))";
        stat.execute(sql);
        System.out.println("执行完成!");
        //5. 关闭资源
        conn.close();
    }
}
public class Demo02 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3", "root", "root");
        Statement stat = conn.createStatement();
        String sql = "drop table jdbct1";
        stat.execute(sql);
        System.out.println("执行完成");
        conn.close();
    }
}
public class Demo03 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3", "root", "root");
        Statement stat = conn.createStatement();
        //执行增删改SQL
//        String sql = "insert into emp(empno,ename) values(100,‘Tom‘)";
//        String sql = "update emp set ename=‘Jerry‘ where empno=100";
//        String sql = "delete from emp where empno=100";
//        stat.executeUpdate(sql);
        //执行查询SQL
        String sql = "select ename,sal,job from emp";
        //查询到的结果装进了rs对象中
        ResultSet rs = stat.executeQuery(sql);
        //遍历结果集对象获取数据
        while(rs.next()) {
            //可以通过字段名和字段位置获取参数
            String name = rs.getString(1);
            double sal = rs.getDouble(2);
            String job = rs.getString(3);
            System.out.println(name+":"+sal+":"+job);
        }
        System.out.println("执行成功!");
        conn.close();
    }
}

2.DBUtil,返回一个Connection对象

public class DBUtils {
    public static Connection getConn() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3", "root", "root");
        return conn;
    }
}
public class Demo01 {
    public static void main(String[] args) {
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            //创建SQL执行对象
            Statement stat = conn.createStatement();
            //执行SQL
            String sql = "select ename from emp";
            ResultSet rs = stat.executeQuery(sql);
            while(rs.next()) {
                String name = rs.getString("ename");
                System.out.println(name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.读取properties文件

public class Demo02 {
    public static void main(String[] args) throws IOException {
        //创建读取配置文件数据的对象
        Properties p = new Properties();
        //获取文件流
        InputStream ips = Demo02.class.getClassLoader().getResourceAsStream("jdbc.properties");
        //把文件加载到属性对象中
        p.load(ips);
        //读取数据
        String name = p.getProperty("name");
        String age = p.getProperty("age");
        System.out.println(name+":"+age);
    }
}

4.数据库连接池

public class Demo03 {
    public static void main(String[] args) throws SQLException {
        //创建数据库连接池对象
        BasicDataSource ds = new BasicDataSource();
        //设置数据库连接信息
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/newdb3");
        ds.setUsername("root");
        ds.setPassword("root");
        //设置初始连接数量
        ds.setInitialSize(3);
        //设置最大连接数量
        ds.setMaxActive(5);
        //从连接池中获取连接  抛异常
        Connection conn = ds.getConnection();
        System.out.println(conn);
    }
}

5.DBUtils,增强版本

public class DBUtils {
    private static BasicDataSource ds;
    static {
        Properties p = new Properties();
        InputStream ips = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            p.load(ips);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String driver = p.getProperty("driver");
        String url = p.getProperty("url");
        String username = p.getProperty("username");
        String password = p.getProperty("password");
        //创建数据库连接池对象
        ds = new BasicDataSource();
        //设置数据库连接信息
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        //设置初始连接数量
        ds.setInitialSize(3);
        //设置最大连接数量
        ds.setMaxActive(5);
    }
    public static Connection getConn() throws Exception {
        //从连接池中获取连接  抛异常
        Connection conn = ds.getConnection();
        return conn;
    }
}

6.预编译

public class Demo04 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = s.nextLine();
        System.out.println("请输入密码");
        String password = s.nextLine();
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            /*Statement stat = conn.createStatement();
            String sql = "select count(*) from user "
                    + "where username=‘"+username
                    +"‘ and password=‘"+password+"‘";
            //输出后在终端中测试
            System.out.println(sql);
            ResultSet rs = stat.executeQuery(sql);*/
            //通过预编译的SQL执行对象解决SQL注入问题
            String sql = "select count(*) from user where username=? and password=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            //把?替换成真正的变量
            ps.setString(1, username);
            ps.setString(2, password);
            //执行SQL语句
            ResultSet rs = ps.executeQuery();
            while(rs.next()) {
                int count = rs.getInt(1);
                if(count>0) {
                    System.out.println("登录成功!");
                }else {
                    System.out.println("登录失败!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

7.批量操作

public class Demo05 {
    public static void main(String[] args) {
        String sql1 = "insert into emp(empno,ename) values(200,‘aaa‘)";
        String sql2 = "insert into emp(empno,ename) values(201,‘bbb‘)";
        String sql3 = "insert into emp(empno,ename) values(202,‘ccc‘)";
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            Statement stat = conn.createStatement();
            //添加到批量操作
            stat.addBatch(sql1);
            stat.addBatch(sql2);
            stat.addBatch(sql3);
            //执行批量操作
            stat.executeBatch();
            System.out.println("执行完成");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
public class Demo06 {
    public static void main(String[] args) {
//create table person(name varchar(10),age int);
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            String sql = "insert into person values(?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int i = 1; i <= 100; i++) {
                ps.setString(1, "name"+i);
                ps.setInt(2, 100+i);
                //添加到批量操作
                ps.addBatch();
                //避免内存溢出每隔30条执行一次
                if(i%30==0) {
                    ps.executeBatch();
                }
            }
            ps.executeBatch();//执行批量操作
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

8.返回自增主键

public class Demo08 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("请输入员工姓名");
        String name = s.nextLine();
        System.out.println("请输入工资");
        int sal = s.nextInt();
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            String sql = "insert into myemp values (null,?,?)";
            //设置获取自增主键值
            PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            //替换问号内容
            ps.setString(1, name);
            ps.setInt(2, sal);
            ps.executeUpdate();
            System.out.println("保存完成!");
            //开始获取自增主键值
            ResultSet rs = ps.getGeneratedKeys();
            while(rs.next()) {
                int id = rs.getInt(1);
                System.out.println("自增主键值:"+id);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

9.获取数据库本身信息

public class Demo10 {
    public static void main(String[] args) {
        //获取连接
        try (Connection conn = DBUtils.getConn();) {
            //获取数据库元数据对象
            DatabaseMetaData dbmd = conn.getMetaData();
            System.out.println("数据库名:"+dbmd.getDatabaseProductName());
            System.out.println("数据库驱动版本:"+dbmd.getDriverVersion());
            System.out.println("用户名:"+dbmd.getUserName());
            //获取和表相关的元数据
            String sql = "select * from emp";
            Statement stat = conn.createStatement();
            ResultSet rs = stat.executeQuery(sql);
            //获取元数据对象
            ResultSetMetaData rsmd = rs.getMetaData();
            //获取字段数量
            int count = rsmd.getColumnCount();
            //遍历字段名和类型
            for (int i = 0; i < count; i++) {
                String name = rsmd.getColumnName(i+1);
                String type = rsmd.getColumnTypeName(i+1);
                System.out.println(name+":"+type);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/hello4world/p/12190079.html

时间: 2024-10-14 11:44:54

JDBC java数据连接 读取properties 数据库连接池 预编译的相关文章

java提供的读取properties文件方法,应对编码问题

Properties prop=new Properties(); prop.load(Client.class.getClassLoader().getResourceAsStream("config.properties")); java提供的读取properties文件方法,应对编码问题

第77节:Java中的事务和数据库连接池和DBUtiles

前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功就算失败,导致回滚就是指所有的数据都会回到最初的状态. 有事务,是为了保证逻辑一定要成功,如银行转账. 回顾一下 什么是jsp,jsp的三大指令. page: 定义当前页面的信息 include: 包含其他页面 taglib: 引入标签库 三大动作标签: <jsp:forward page="">

21Spring_JdbcTemplatem模板工具类的使用——配置文件(连接三种数据库连接池)

上一篇文章提到过DriverManagerDataSource只是Spring内置的数据库连接池,我们可选的方案还有c3p0数据库连接池以及DBCP数据库连接池. 所以这篇文章讲一下上面三种数据库连接池的配置文件的形式. 第一种:DriverManagerDataSource:Spring内置的数据库连接池. 第一步:编写配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="

JDBC之数据连接

1:数据库语句: create database LandDB; use LandDB; create table T_BL_CANTON_CODE ( CTN_CODE int primary key, CTN_NAME varchar(60) not null, GOV_NAME varchar(60) not null, LAND_DP_NAME varchar(60) not null, PARENT_CODE int not null );INSERT INTO `landdb`.`t

Java项目中读取properties文件

package util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /**  * 获取配置文件信息  *   * @author Carl  *  */ public final class GetProperties { private static Properties prop = null; static{ prop = new Properties(); /

一个简单的spring 程序(如何在java类中读取Properties配置文件)

首先是个User类: package spring_introduction;public class User {String name; public String getName() {return name;} public void setName(String name) {this.name = name;}public void hello(){System.out.println("hello "+name);}} 配置文件Name.properties name=L

Java 数据库连接池—转载孤傲苍狼 http://www.cnblogs.com/xdp-gacl/p/4002804.html

一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.如下图所示: 二.使用数据库连接池优化程序性能 2.1.数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性

Java数据库连接池详解

http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去

jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用

一.连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP.Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接.打开数据库.存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃.数据库连接池技术是解决这个问题最常用的方法. 数据库连接池的主要操作如下: (1)建立数据库连接池对象. (2)按照事先指定的参数创建初始数量的数据库连