• Java数据库连接技术


    使用mysql作为开发数据库,创建user表。创表语句如下:

    create database learn;
    use learn;
    CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32), age INT);
    INSERT INTO user(NAME, age) VALUES('coshaho', 29);
    INSERT INTO user(NAME, age) VALUES('cauchy', 29);

    一、使用Java直接连接mysql

    1、添加mysql驱动

          <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

    2、连接代码如下

    package com.coshaho.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * Java连接数据库
     * @author coshaho
     */
    public class MysqlConnector 
    {
        public static void main(String[] args)
        {
            Connection con = null;
            Statement statement = null;
            ResultSet rs = null;
            String driver = "com.mysql.cj.jdbc.Driver";
            String url = "jdbc:mysql://132.232.35.119:3306/learn";
            String user = "root";
            String password = "root";
            try 
            {
                Class.forName(driver);
                // 使用DriverManager获取连接
                con = DriverManager.getConnection(url,user,password);
                // 创建statement类对象,用来执行SQL语句!!
                statement = con.createStatement();
                String sql = "select * from user";
                rs = statement.executeQuery(sql);
                System.out.println("name" + "	" + "age");  
                 
                int age = 0;
                String name = null;
                while(rs.next())
                {
                    // ResultSet获取返回值时,列名不区分大小写
                    name = rs.getString("nAme");
                    age = rs.getInt("age");
                    System.out.println(name + "	" + age);
                }
            } 
            catch(ClassNotFoundException e) 
            {   
                e.printStackTrace();   
            } 
            catch(SQLException e) 
            {
                e.printStackTrace();  
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
            finally
            {
                // 从内向外释放连接
                try 
                {
                    if(null != rs)
                    {
                        rs.close();
                    }
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
                try 
                {
                    if(null != statement)
                    {
                        statement.close();
                    }
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
                try 
                {
                    if(null != con)
                    {
                        con.close();
                    }
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
            }
        }
    }

    3、执行效果

    二、使用连接池连接数据库

    这里以C3p0连接池作为样例,连接池里的连接使用完后,需要主动释放。

    1、maven配置如下。

        <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>

    2、C3p0配置文件名字必须为c3p0-config.xml,并且放到classpath下。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <c3p0-config>
        <!-- 默认C3p0配置 -->
        <default-config>
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://132.232.35.119:3306/learn</property>
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
    
        <!--以name为标识的数据源 -->
        <named-config name="mysql">
            <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://132.232.35.119:3306/learn</property>
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="acquireIncrement">5</property>
            <property name="initialPoolSize">10</property>
            <property name="minPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </named-config>
    </c3p0-config>

    3、测试代码

    package com.coshaho.datasource;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * C3p0连接池
     * @author coshaho
     */
    public class C3p0DataSource 
    {
        private static ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");
        
        
        public static Connection getConnection() throws SQLException
        {
            return ds.getConnection();
        }
        
        /**
                    * 需要主动释放连接,这里调用的close方法并非关闭连接,而是归还到连接池
         * @param conn
         * @param st
         * @param rs
         */
        public static void release(Connection conn,Statement st,ResultSet rs)
        {
            if(null != rs)
            {
                try
                {
                    rs.close();
                }
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
            if(null != st)
            {
                try
                {
                    st.close();
                }
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
            
            if(null != conn)
            {
                try
                {
                    conn.close();
                }
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        }
        
        public static void main(String[] args)
        {
            Connection conn = null;
            PreparedStatement st = null;
            ResultSet rs = null;
            try
            {
                conn = C3p0DataSource.getConnection();
                String sql = "insert into user(name, age) values(?, ?)";
                st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                st.setString(1, "hkx");
                st.setInt(2, 30);
                st.executeUpdate();
                // 获取数据库自动生成的主键
                rs = st.getGeneratedKeys();
                if(rs.next()){
                    System.out.println(rs.getInt(1));
                }
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }
            finally
            {
                C3p0DataSource.release(conn, st, rs);
            }
        }
    }

    三、Spring与C3p0整合

    spring集成c3p0,实际上,就是让spring初始化c3p0实例,并用jdbcTemplate管理。这里需要注意的是,使用jdbcTemplate直接执行sql,不需要手动释放连接,jdbcTemplate已经帮你自动释放连接了。 

    1、spring maven配置

          <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>

    2、spring文件配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context 
           http://www.springframework.org/schema/context/spring-context.xsd">
        
        <!-- 引入jdbc配置文件 -->   
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!-- 使用spring初始化DataSource -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        
        <!-- 使用JdbcTemplate封装DataSource -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    </beans>
    jdbc.driverClass=com.mysql.cj.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://132.232.35.119:3306/learn
    jdbc.user=root
    jdbc.password=root

    3、测试代码

    package com.coshaho.datasource;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    public class SpringJdbcTest 
    {
        private static ApplicationContext context;
        public static void main(String[] args)
        {
            String xmlpath = "spring.xml";
            context = new ClassPathXmlApplicationContext(xmlpath);
            JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
            jdbcTemplate.update("insert into user(name, age) values (?, ?)", 
                    "Jack", 20);
        }
    }
  • 相关阅读:
    图片验证码制作
    上传图片加水印
    组合查询加分页
    C# 数据类型 数据转换 自己的见解和方式
    C# 基础控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印
    关于Spring注解
    java I/O
    关于web.xml配置
    第7章 使用springMVC构建Web应用程序 7.1 springMVC配置
    js配合c3制作一个动态钟表
  • 原文地址:https://www.cnblogs.com/coshaho/p/10447788.html
Copyright © 2020-2023  润新知