jdbc(1)(一)

1.连接数据库,准备mysql连接jar包导入项目:

       Class.forName("com.mysql.jdbc.Driver");
       //建立连接是比较耗时,耗资源的,实际开发中多用连接池来管理
       Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","");

2.statement接口:执行静态sql语句,返回生成结果的对象

三种Statement类:

statement:由createStatement创建,用于发送简单的SQL语句。(不带参数)
preparedStatement:继承自statement接口,由prpareStatement创建,用于发送含有一个或者多个输入参数的sql语句,效率高于上面,并且可以防止sql注入。
CallableStatement:继承preparedStatement,由prPareCall创建,用于调用存储过程。

常用的statement方法:

execute():执行后返回是否有结果集,只有查询才有结果集,插入返回的是行数,而只有返回结果集是true,返回是null或者是数字就是false;
executeQuery():运行select,返回ResultSet结果集。
executeUpdate():运行insert/update/delete操作,返回新的行数。

例子:

     1.Statement statement = connection.createStatement();
       String id="4 or 1=1";//采用这种拼接字符串的方式容易出现这种类似的sql注入
       statement.execute("delete from t_user where id="+id);

     2.//preparestatement有预先编译的功能对于传递的参数会做一个检查(排查特殊意义的符号)
       PreparedStatement prepareStatement = connection.prepareStatement("delete from t_user where id=?");
       //可以指定类型
       prepareStatement.setString(1,"4");//编号是从开始对应占位符号?
       //也可以交给程序推断
       prepareStatement.setObject(1, 4);

     3.//数据库的java.sql.Date的对象和java的date不是同一对象。
       Date date = new Date(System.currentTimeMillis());

3.ResultSet接口:执行sql语句返回ResultSet结果集。

       //只有executeQuery返回结果集
       ResultSet rs = prepareStatement.executeQuery();
       //是否存在下条记录
       while(rs.next()){
           //纪录的第几个字段值
           String string = rs.getString(1);
           int int1 = rs.getInt(2);
       }

4.对于connection statement resultSet都需要关闭,必须每个都需要分开捕获,防止关闭异常相互影响。

5.批处理:

1.一般使用statement,因为prepareStatement的预编译大小有限,数据太大可能出异常。

2.设置事务不自动提交。

        // 事务不自动提交
        connection.setAutoCommit(false);
        Statement statement = connection.createStatement();

        for (int i = 0; i < 22222; i++) {
            //批处理语句,now()当前时间,数据库函数方法
            statement.addBatch("insert into t_user(name,pwd,time) values(‘xiao" + i + "‘,1234,now())");
        }
        //批处理执行方法
        statement.executeBatch();
        connection.commit();//提交事务

6.事务:一组sql语句同时成功或者同时失败。(默认事务的自动提交)(回滚必须保证不是自动提交)

开始于:连接建立后,或者上一个事务结束,DML(insert delete update)执行

结束于:

执行commit或者rollback

执行DDL语句:如create table

执行DCL语句:如grant

断开数据库

执行DML语句失败,执行rollback

7.事务的四个特点:(ACID)

atomicity(原子性):事务内操作是一个整体,要么都成功,或都失败。

consistency(一致性性):事务内一个操作失败,所有修改回滚到修改前的状态

isolation(隔离性):事务查看数据的状态,可以是隔离的,不能看到另一个事务的数据中间状态。

durability(持久性):事务完成对系统的影响是永久的。

8.隔离性的隔离级别:

读取未提交

读取已提交

可重读

序列化

9.数据库时间类型。是java.util.Date的子类:

java.sql.Date: 表示年月日

java.sql.Time: 表示时分秒

java.sql.Timestamp:表示年月日时分秒

        Date date = new Date(System.currentTimeMillis());
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        Time time = new Time(System.currentTimeMillis());
        System.out.println(date);//2017-01-08
        System.out.println(timestamp);//2017-01-08 20:46:49.413存入数据库并不会出现毫秒(.毫秒数)
        System.out.println(time);//20:46:49

时间转换成数据库时间类型:

        //时间转换方法        static long dateToLong(String s) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd hh:mm:ss");
        java.util.Date parse = simpleDateFormat.parse(s);
        return parse.getTime();
        }
         //获得需要的时间对象
        Date date1 = new Date(dateToLong("2017-1-8 00:00:00"));
        Timestamp timestamp1 = new Timestamp(dateToLong("2017-1-8 10:10:10"));
        System.out.println(date1);// 2017-01-08
        System.out.println(timestamp1);//2017-01-08 10:10:10.0存入数据库并不会出现毫秒(.毫秒数)

10.CLOB(character large object):可以存储大量文本数据,大字段数据读取采用数据流的方式一次读取。

mysql中不同的大小有相关的类型:
tinytext:最大长度:255(2*8-1)字符的text.
text(M):65535(2*16-1)
mediumtext:16,777,215(2*24-1)
longtext:4,294,967,295或者4G(2*32-1)

设置和获取Clob文本数据例子:

      1.// 设置文本数据
        void setCLOB(Connection con) throws SQLException, FileNotFoundException {
        PreparedStatement prepareStatement = con.prepareStatement("insert into t_user(name,info values(?,?)");
        prepareStatement.setObject(1, "wo");
        // 不管数据具体是哪种大文本类型都是setClob方法
        // 数据都是流的方式输入
        prepareStatement.setClob(2, new FileReader(new File("d:/test.txt")));
        // 如想输入字符串需要转换流(也可以用字节流转换
        BufferedReader bufferedReader = new BufferedReader(new CharArrayReader("我很长哦".toCharArray()));
        prepareStatement.setClob(3, bufferedReader);
        prepareStatement.executeUpdate();
    }

      2.// 获取文本数据
       void getClob(ResultSet r) throws SQLException, IOException {
        while (r.next()) {
            // 得到文本数据
            Clob clob = r.getClob("info");
            // 得到字符流
            Reader characterStream = clob.getCharacterStream();
            int i;
            while ((i = characterStream.read()) != -1) {
                System.out.println((char) i);
            }
        }

11.BLOB,二进制大数据和大文本数据操作极其类似。只是读取都是字节流:

设置:

        //设置blob二进制数据
        prepareStatement.setBlob(2,new FileInputStream("d:/a.jpg"));

12.一般配置从properties文件中获取配置。

        Properties properties = new Properties();
        //默认的加载路径bin目录下的
        properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
        //获取配置信息
        String property = properties.getProperty("dbName");

总结:对于数据库操作,注意关闭一些资源文件和流。

13.orm(object relationship map)对象关系映射(略)

14.自定义ORM

封装bean:

columnInfo:封装字段信息(类型,名字,键类型)

configuration:封装表的信息,(属性由字段生成,类名由表名生成)

TableInfo:封装配置文件信息(配置信息,properties,可以xml,及注解

15.连接池:

数据库的连接是需要建立socket通信的,非常消耗时间和资源的。连接池,对连接进行管理,保留一部分连接不关闭,达到重复使用的目的。

时间: 2024-09-30 16:30:57

jdbc(1)(一)的相关文章

jdbc的简单使用

1.加载驱动(mysql的驱动是com.mysql.jdbc.Driver,SqlServer的驱动是 com.microsoft.sqlserver.jdbc.SQLServerDriver) 2.加载数据库的连接(url, username,password) 3.编写sql语句(String sql="select * from grade  where gradeName = ?";) 4.遍历查询结果 [while (resultSet.next()) {   System.

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABLE 2 ( 3 gid NUMBER not null, 4 gname VARCHAR2(90), 5 gdetails CLOB, 6 gpicture VARCHAR2(100), 7 gprice NUMBER, 8 gleixing NUMBER, 9 gpinpai VARCHAR2(20) 10 ) 11 tablespace

jdbc驱动jar导入eclipse

在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java build path,右边选择libraries 3.选择add External jars 4.选择jar包的按照路径下的确定后就行了. Java连接MySQL的最新驱动包下载地址 http://www.mysql.com/downloads/connector/j 有两种方法导入jar包,第一种

JDBC

Java语言访问数据库的一种规范,是一套API JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC规范采用接口和实现分离的思想设计了Java数据库编程的框架.接口包含在java.sql及javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaE

java链接MySQL数据库时使用com.mysql.jdbc.Connection的包会出红线问题

package com.swift; //这里导入的包是java.sql.Connection而不是com.mysql.jdbc.Connection import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TestJDBC { public static void main(String[] args) { try { Class.forName(

Tomcat JDBC Pool使用说明

Maven依赖 <dependency>   <groupId>org.apache.tomcat</groupId>   <artifactId>tomcat-jdbc</artifactId>   <version>8.5.9</version> </dependency> 最新版本为9.0,推荐使用8.5.9稳定版 常用配置 连接池配置项很多,下面只列出了推荐配置,项目组可根据自身情况进行增减 <b

tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程

最近两天在整理关于flume的总结文档,没有启动过tomcat.昨天晚上部署启动,发现报了如题的错误,全文如下: 严重: The web application [/oa-deploy] registered the JBDC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a mem

使用JDBC如何提高访问数据库的性能?

1. 使用数据连接池(Connection Pool), 避免使用DriverManager.getConnection. 2. 合理的配置数据连接池参数,设置数据连接池的初始大小,最大连接数,连接超时时间等. 3. 选择合适的事务等级,按照不同的数据库操作类型选择不同的事务等级. 4. 及时关闭Connection,不关闭的话会严重影响系统的性能,甚至造成系统罢工. 5. 优化Statement 1) 选择合适的Statement, 根据不同的数据库操作选择Statement, Prepare

回滚的意义---JDBC事务回滚探究

JDBC手动事务提交回滚的常见写法一直是rollback写在commit的catch之后: try{ conn.setAutoCommit(false); ps.executeUpdate(); ps.executeUpdate(); conn.commit(); }catch(Exception e){ conn.rollback(); } 但是,这种回滚是没有意义的: 一旦commit前出错, 就不提交了, 回滚无用 一旦commit了, 说明没错, 不用回滚 找到一篇和我观点相同的文章:

Hive JDBC——深入浅出学Hive

第一部分:搭建Hive JDBC开发环境 搭建:Steps ?新建工程hiveTest ?导入Hive依赖的包 ?Hive  命令行启动Thrift服务 ?hive --service hiveserver & 第二部分:基本操作对象的介绍 Connection ?说明:与Hive连接的Connection对象 ?Hive 的连接 ?jdbc:hive://IP:10000/default" ?获取Connection的方法 ?DriverManager.getConnection(&q