zoukankan      html  css  js  c++  java
  • Java之JDBC学习

     (一),MySql数据库

         1,MySql数据库的数据类型定义

          

        2,完整性约束:

        3,索引:

          作用:唯一作用就是加快对表查询速度,索引通过快速路径方法访问来快速定位数据,从而减少磁盘的II/O;

          缺点:维护浪费开销,存储需要一定的磁盘空间

        4,数据库操作语言:

          1,insert into tableName(column1,...) values(value1,...);

          2,update tableName set(column1=value1...) where condition;

          3,delete from tableName where condition

        5,表与表之间的左外链接,右外链接,全链接,内链接区别

          左外链接:保留两表所有匹配成功的的记录,和左表未匹配成功的记录,其右对应项为null;

          右外链接:保留两表所有匹配成功的的记录,和右表未匹配成功的记录,其左对应项为null;

          全链接:保留两表所有的的记录,不管是否匹配上,没匹配上对应项为null;

          内链接:只保留链表匹配成功的记录数;

         6,系统属性:

    (二) JDBC操作

         1,所需jar包,下载地址

         2,简单的数据库JDBC操作: 

    复制代码
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class ExecuteDO {
        private String driver;
        private String url;
        private String user;
        private String pswd;
        //初始参数
        public void initParam(String paraFile) throws FileNotFoundException, IOException{
            Properties props=new Properties();
            props.load(new FileInputStream(paraFile));
            driver=props.getProperty("driver");
            url=props.getProperty("url");
            user=props.getProperty("user");
            pswd=props.getProperty("pswd");
        }
        //定义建表语言
        public void createTable(String sql) throws ClassNotFoundException{
            Class.forName(driver);//加载驱动
            try {
                Connection conn=DriverManager.getConnection(url,user,pswd);//获取数据库连接
                PreparedStatement stmt=conn.prepareStatement(sql);//创建状态对象,Prepared效率高些
                stmt.executeUpdate();//执行更新数据库,创建表
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        //插入表
        public void insertTable(String sql) throws ClassNotFoundException{
            Class.forName(driver);
            try {
                Connection conn=DriverManager.getConnection(url,user,pswd);
                PreparedStatement prst=conn.prepareStatement(sql);
                for(int i=0;i<5;i++){//循环插入5个值
                    prst.setString(1, "DD"+i);//设置第三列的数值,1代表第一个?
                    prst.executeUpdate();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //查询结果
        public void queryTable(String sql) throws ClassNotFoundException{
            Class.forName(driver);
            try {
                Connection conn=DriverManager.getConnection(url,user,pswd);
                PreparedStatement stat=conn.prepareStatement(sql);
                ResultSet reset=stat.executeQuery();
                while(reset.next())
                    System.out.println(reset.getInt(1)+"	"+reset.getString(2)+"	"
                            +reset.getString(3));
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public static void main(String[] args) throws Exception, IOException{
            ExecuteDO ed=new ExecuteDO();
            //新建属性文件
            Properties props=new Properties();
            props.setProperty("url", "jdbc:mysql://localhost:3306/javatest");
            props.setProperty("driver", "com.mysql.jdbc.Driver");
            props.setProperty("user", "root");
            props.setProperty("pswd", "123");
            props.store(new FileOutputStream("mysql.ini"),"commen Lins");
            ed.initParam("mysql.ini");
            //测试建表功能,DDL
            ed.createTable("create table jdbc_test(jdbc_id int auto_increment primary key,"+"jdb_name varchar(255),jdbc_desc text);");
            //测试插入表结果:DML
            ed.insertTable("Insert into jdbc_test(jdb_name,jdbc_desc) values('rr',?)");
            //测试查询表结果:DML功能
            ed.queryTable("select * from jdbc_test");
            System.out.println("ok!!");
        }
    }         
    复制代码

       PrepareStatement和Statement区别:

        1,PrepareStatement可以提高代码的可读性

        2,ParperStatement提高了代码的灵活性和执行效率。

        3,ParperStatement安全性更强些。

    (三)事务操作

        1,事务的特点

        2,Connection类控制事务有:setAutoCommit()//是否自动提交;commit()//提交事务 rollback():撤销事务;查看这里

    (四)使用数据库连接池操作:

         c3p0 jar包:优点时:可以自己清理不再使用的Connection,Statement,ResultSet 资源下载地址

       第一种连接方式(纯代码):

    复制代码
    import java.beans.PropertyVetoException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class Cp3Test {
    
        private static Connection conn;
        private static ComboPooledDataSource ds = new ComboPooledDataSource();
    
        public static Connection getConnection() {
            try {
                ds.setDriverClass("com.mysql.jdbc.Driver");
                ds.setJdbcUrl("jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true");
                ds.setUser("root");
                ds.setPassword("123");
                conn = ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (PropertyVetoException e) {
                e.printStackTrace();
            }
            return conn;
        }
        public static void main(String[] args){
            
            try {
                PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");
                ResultSet rs=pstmt.executeQuery();
                while(rs.next()){
                    System.out.println(rs.getInt(1)+"	"+rs.getString(2)+"	"
                            +rs.getString(3));
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    复制代码

      第二种方式:通过在src目录下建立名为"c3p0-config.xml”的xml文件

    xml文件内容如下:

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?>
    <c3p0-config>
        <default-config> 
            <property name="jdbcUrl">
                <![CDATA[
                    jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true
                ]]>
            </property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="user">root</property>
            <property name="password">123</property> 
           <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
            <property name="acquireIncrement">3</property>
           <!-- 初始化数据库连接池时连接的数量 -->
            <property name="initialPoolSize">10</property>
            <!-- 数据库连接池中的最小的数据库连接数 -->
            <property name="minPoolSize">2</property>
            <!-- 数据库连接池中的最大的数据库连接数 -->
            <property name="maxPoolSize">10</property>
        </default-config>
    </c3p0-config>
    复制代码

     调用方式如下:

    复制代码
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class Cp3Test {
        private static Connection conn;
        private static ComboPooledDataSource ds = new ComboPooledDataSource();
    
        public static Connection getConnection() {
            try {
                conn = ds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
        public static void main(String[] args){
            
            try {
                PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");
                ResultSet rs=pstmt.executeQuery();
                while(rs.next()){
                    System.out.println(rs.getInt(1)+"	"+rs.getString(2)+"	"
                            +rs.getString(3));
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    复制代码
  • 相关阅读:
    rocketMQ
    RocketMQ 事务消息
    Serial,Parallel,CMS,G1四大GC收集器特点小结
    CMS垃圾收集器与G1收集器
    CMS垃圾回收过程
    MySQL中EXPLAIN解释命令 查看索引是否生效
    redis持久化的几种方式
    深入浅出数据库索引原理
    Java中堆内存和栈内存详解
    jvm垃圾回收机制
  • 原文地址:https://www.cnblogs.com/xieyulin/p/7061198.html
Copyright © 2011-2022 走看看