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操作,返回新的行数。

例子:

     .Statement statement = connection.createStatement();
String id="4 or 1=1";//采用这种拼接字符串的方式容易出现这种类似的sql注入
statement.execute("delete from t_user where id="+id); .//preparestatement有预先编译的功能对于传递的参数会做一个检查(排查特殊意义的符号)
PreparedStatement prepareStatement = connection.prepareStatement("delete from t_user where id=?");
//可以指定类型
prepareStatement.setString(,"");//编号是从开始对应占位符号?
//也可以交给程序推断
prepareStatement.setObject(, ); .//数据库的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();
int int1 = rs.getInt();
}

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

5.批处理:

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

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

        // 事务不自动提交
connection.setAutoCommit(false);
Statement statement = connection.createStatement(); for (int i = ; i < ; 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:最大长度:(*-)字符的text.
text(M):(*-)
mediumtext:,,(*-)
longtext:,,,295或者4G(*-)

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

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

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

设置:

        //设置blob二进制数据
prepareStatement.setBlob(,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通信的,非常消耗时间和资源的。连接池,对连接进行管理,保留一部分连接不关闭,达到重复使用的目的。

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

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  5. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  6. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  9. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. 安装 macbook 双系统( OS X 和 Ubuntu )

    打算 macbook 上面多安装一个 ubuntu 系统来用下.流程大致下面几步: 1. 备份重要资料 2. 划分硬盘区域用于安装 ubuntu 3. 下载 ubuntu ISO 文件,并刻录到 U ...

  2. 《程序设计中的组合数学》——polya计数

    我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...

  3. 动态规划——树形dp

    动态规划作为一种求解最优方案的思想,和递归.二分.贪心等基础的思想一样,其实都融入到了很多数论.图论.数据结构等具体的算法当中,那么这篇文章,我们就讨论将图论中的树结构和动态规划的结合——树形dp. ...

  4. Tomcat配置NIO

    tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态. ...

  5. 移动端转PC --> PC跳转移动端

    <script type=”text/javascript”>try {var urlhash = window.location.hash;if (!urlhash.match(“fro ...

  6. OpenMP与C++:事半功倍地获得多线程的好处

    来源:IIEEG 01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是.这个小笑话几十年来一直都是对的.一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限 ...

  7. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  8. U磁盘检测和大量收集量产工具

    1.ChipGenius ChipGenius是一款USB设备芯片型号检測工具,能够自己主动查询U盘.MP3/MP4.读卡器.移动硬盘等一切USB设备的主控芯片型号.制造商.品牌.并提供相关资料下载地 ...

  9. troubleshooting tools in JDK 7--转载

    This chapter describes in detail the troubleshooting tools that are available in JDK 7. In addition, ...

  10. 网络接口 使用NSURLConnection完成Get和Post方法

    网络接口 使用NSURLConnection完成Get和Post方法 什么是URL: URL就是统一资源定位器(UniformResourceLocator:URL).通俗地说,它是用来指出某一项信息 ...