java的数据库相关操作

Wesley13
• 阅读 699
通过JDBC方式连接数据库

1.准备工作
    在系统上安装mysql以及java开发环境,IDE等。
    检查:1.eclipse可以编译运行程序
          2.MySQL用户名密码正确
          3.查询表存在,查询语句可以执行
        
2.下载MySQL的驱动包,mysql-connector-java-5.1.47-bin.jar,新建java项目之后需要把驱动包加入项目。
3.编写代码
        
        try {  
        
              Class.forName("com.mysql.jdbc.Driver");  //加载MYSQL JDBC驱动程序 
              System.out.println("Success loading Mysql Driver!");  //ja
             }catch (Exception e) {  
              System.out.print("Error loading Mysql Driver!");  
              e.printStackTrace();  
         }  
         try{  
              Connection connect = DriverManager.getConnection(  
               "jdbc:mysql://localhost:3306/test","root","root");  
                //连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码  
               
              System.out.println("Success connect Mysql server!");  
              Statement stmt = connect.createStatement();  
              ResultSet rs = stmt.executeQuery("select * from info");  
                            //user 为你表的名称  
              while (rs.next()) {  
                      System.out.println(rs.getString("id"));  
                      System.out.println(rs.getString("name"));  
                 }  
             }catch(Exception e) {  
              System.out.print("get data error!");  
              e.printStackTrace();  
          }  
    //通过JDBC实现查询,需要把sql语句写在程序中。而且,处理查询的结果也要手工处理
    

二、使用JDBC TEMPLATE的相关操作。
    
    spring提供的操作JDBC的工具类。
    依赖于,连接池DATASource,(数据源)。
    使用准备:在mysql中建立数据库,建立表,添加数据。
    创建项目、导入jar包:日志,spring核心4个包,jdbc包、事务的包以及他们的依赖c3p0连接池,dbcp连接池和依赖。mysql的包。
    建立一个和表对应的类,user对应info表。作为javabean
    
    
    具体使用方法。
    - 使用API(了解) 使用API和JDBC很相似。
        建立一个TestAPI,主函数
        1.创建数据源,连接池
        BasicDataSource dataSource = new ****;
        dataSource.setDriverClassName();
        dataSource.setUrl();
        dataSource.setUsername();
        dataSource.setPassword();
        
        2.创建模板
        JdbcTemplate jdbcTemplate = new **
        jdbcTemplate.setDataSource(dataSource);
        
        3.通过API来操作
        jdbcTemplate的成员函数来进行增删改查。
        jdbcTemplate.update("","","")//语句中可以使用?来代替,后面给出数据。
        //只要看到了NEW,SET,就可以交给Spring来实现DAO
        
    - 配置DBCP
        通过Spring去注入模板
        建立一个userDAO类,中间包含jdbcTemplate.通过set方法设置值
        建立一个mainA类,编写beans.xml文件。配置DAO<bean id = “” class = “” >,还需要在xml中创建模板。模板中还需要注入一个数据源。
        通过spring工厂来生成这个类。
        不熟悉使用从上向下写,熟悉从下向上写,先写xml,再写main函数。(需要前面的注入知识)
        
        UserDAO的内容:
        package com.test.b_dbcp;
        import org.springframework.jdbc.core.JdbcTemplate;
        import org.springframework.jdbc.core.metadata.OracleCallMetaDataProvider;
        public class UserDao {
            public JdbcTemplate jdbcTemplate;

            public JdbcTemplate getJdbcTemplate() {
                return jdbcTemplate;
            }

            public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
                this.jdbcTemplate = jdbcTemplate;
            }

            //获取了模板,使用模板的api进行操作。
            public void updateDate()
            {
                this.jdbcTemplate.update("update info set name = 'cxc' where id = 12");
            }
        }

        BEANS.XML的内容:
        <?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:p="http://www.springframework.org/schema/p"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd">
           
           //配置数据源的工厂
           <bean id = "dataSourceid" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
            <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
            <property name="username" value="root"></property>
            <property name="password" value="root"></property>
           </bean>
           
           //配置JDBCTemplate的工厂
           <bean id = "jdbcTemplateid" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSourceid"></property>
           </bean> 
            
            //配置UserDao的工厂
            <bean id="userDaoid" class="com.test.b_dbcp.UserDao">
            <property name="jdbcTemplate" ref="jdbcTemplateid"></property>
            </bean>
        </beans>
        
    - 配置C3P0
        和DBCP十分相似。只是数据源是通过C3P0的方式来配置    
        ComboPooledDataSource,相关的设置(set方法)可能不一样。
        jdbcTemplate相关的配置是一样的。
        
        xml文件:
        <?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:p="http://www.springframework.org/schema/p"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd">
          
           <bean id = "dataSourceid" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
           </bean>
                
           <bean id = "jdbcTemplateid" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSourceid"></property>
           </bean> 
            
            <bean id="userDaoid" class="com.test.c_c3p0.UserDao">
            <property name="jdbcTemplate" ref="jdbcTemplateid"></property>
            </bean>
        </beans>
        
        了解一个jdbcTemplate的API,查询。
        query(),返回一个,全部。常用:查询语句,封装对象。ctrl+shift+t查看帮助文档。
        在使用query()函数时,需要了解一个接口RowMapper;
        JdbcTemplate用于在每个行的基础上,映射结果集ResultSet的行的接口。该接口的实现,将每行数据映射到实例对象。但不必担心异常处理。调用JdbcTemplate将捕获并处理SQLExceptions。 
        通常用于JdbcTemplate的查询方法或存储过程的输出参数。 RowMapper对象通常是无状态的,因此可重用;它们是在一个地方实现行映射逻辑的理想选择。或者,考虑从jdbc.object包子类化MappingSqlQuery:而不是使用单独的JdbcTemplate和RowMapper对象,您可以构建该样式的可执行查询对象(包含行映射逻辑)
        需要建立一个新的的类去继承RowMapper,设置对应的关系。
        UserMapping如下
        public class UserMapping implements RowMapper<User> {
        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            // TODO Auto-generated method stub
            
            //建立一个user
            User user = new User();
            
            //通过rs进行关系对应
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            
            //输出结果
            return user;
        }
    }

        
    - 配置JDBCDaoSupport(使用比较多),在C3P0的基础上
    在userDao中需要写一个javaTemplate.可以让子类继承JdbcDaoSupport。
    可以通过getJdbcTemplate来代替jabcTemplate.
    
    //可以在xml中简化装配,不需要在dao中设置jdbcTemplate,只要直接把dataSource引入数据库中就可以了。
    //Dao需要继承JdbcDaoSupport。
    UserDao的写法
    public class UserDao extends JdbcDaoSupport {
        
        //获取了模板,使用模板的api进行操作。
            public void updateDate()
            {
                this.getJdbcTemplate().update("update info set name = 'qyq' where id = 12");
            }
            
            public void searchDate()
            {
                String sql = "select * from info;";
                List<User> ret_list = this.getJdbcTemplate().query(sql,new UserMapping());
                
                for(User user: ret_list)
                {
                    System.out.println(user.toString());
                }
            }
    }
    
    xml文件的写法
    <bean id = "dataSourceid" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
       <property name="user" value="root"></property>
       <property name="password" value="root"></property>
   </bean>
    
    <bean id="userDaoid" class="com.test.d_jdbcDaoSupport.UserDao">
    <property name="dataSource" ref="dataSourceid"></property>
    </bean>
    
    在xml文件中,可以删除jdbcTemplate。而不需要设置。直接对dao来引入数据源。
    如果继承了这个类,就可以直接引入数据源。
    
    - 配置properties。在之前的基础中。
    开发过程中,会把数据源的相关信息写到propertise的文件中jbdcInfo.propertise.
    在xml中加载配置文件
    使用context:property-placeholder location=""
    之后就可以通过key来获取文件中的内容。
    //因为电脑无法输入美元符号,这个就不进行测试了。
    
    
    所有需要的jar包
    mysql的驱动:mysql-connector-java-5.1.47-bin.jar 
    
    Spring的核心:
    spring-beans-4.1.8.RELEASE.jar
    spring-context-4.1.8.RELEASE.jar
    spring-core-4.1.8.RELEASE.jar
    spring-expression-4.1.8.RELEASE.jar
    org.apache.commons.logging_1.1.1.jar
    
    Spring JdbcTemplate相关:
    spring-jdbc-4.1.8.RELEASE.jar
    spring-tx-4.1.8.RELEASE.jar
    
    数据源相关:
    commons-dbcp2-2.5.0.jar
    commons-pool2-2.6.0.jar
    c3p0-0.9.5.2.jar
    

    
三、使用MyBatis链接数据库
1.在JDBC的基础上下载mybatis的jar包
2.导入jar包
3.查看帮助文档,编写文件xml
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这