JDBC
英文名称:JavaDataBaseConnectivity
中文名称:java数据库连接
简称:JDBC
JDBC是一种用于执行SQL语句的JavaAPI,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用
程序。

一、建立数据库连接

1、引用jar文件(http://dev.mysql.com/downloads/connector/j/ 下载jar文件)

2、注册驱动Class.forName(“com.mysql.jdbc.Driver”)(只需注册一次)

3、定义数据库连接字符串URL="jdbc:mysql://127.0.0.1:3306/数据库名称?user=用户名&password=密码&useUnicode=true&characterEncoding=utf-8";

  JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
  user:用户名
  password:密码
  useUnicode:是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
  characterEncoding:当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk
  autoReconnect:当数据库连接异常中断时,是否自动重新连接。(默认:false)
  autoReconnectForPools:是否使用针对数据库连接池的重连策略。(默认:false)
  failOverReadOnly:自动重连成功后,连接是否设置为只读。(默认:true)
  maxReconnects:autoReconnect设置为true时,重试连接的次数 (默认3:)
  initialTimeout:autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2
  connectTimeout:和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 0
  socketTimeout:socket操作(读写)超时,单位:毫秒。 0表示永不超时

二、常用数据库操作

  //数据库连接字符串
public static final String DRIVER="com.mysql.jdbc.Driver";
public static final String URL="jdbc:mysql://127.0.0.1:3306/MyLibrary?user=root&password=123456&useUnicode=true&characterEncoding=utf-8";

1、添加数据

    public static void insert()throwsSQLException{
Connectioncon=null;
Statementst=null;
try{
Class.forName(DRIVER);
con=DriverManager.getConnection(URL);
st=con.createStatement();
st.execute("insertintoarticle(title)values('标题');");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}finally{
con.close();
st.close();
}
}

2、删除数据

    public static void delete(intid)throwsSQLException{
Connectioncon=null;
Statementst=null;
try{
Class.forName(DRIVER);
con=DriverManager.getConnection(URL);
st=con.createStatement();
st.executeUpdate("deletefromarticlewhereid="+id+";");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}finally{
con.close();
st.close();
}
}

3、修改数据

    public static void update()throwsSQLException{
Connectioncon=DriverManager.getConnection(URL);
Statementst=con.createStatement();
st.executeUpdate("updatearticlesettitle='新标题'whereid=1;");
con.close();
st.close();
}

4、查询数据

    public static void select()throwsSQLException{
Connectioncon=null;
Statementst=null;
try{
Class.forName(DRIVER);
con=DriverManager.getConnection(URL);
st=con.createStatement();
ResultSetrs=st.executeQuery("select*fromarticle;");
while(rs.next()){
System.out.print(rs.getInt("id"));
System.out.println(rs.getString("title"));
}
//按表结构自动输出
// ResultSetMetaDatarsmd=rs.getMetaData();
// for(inti=1;i<rsmd.getColumnCount();i++){
// System.out.print(rsmd.getColumnName(i));
// System.out.println(rsmd.getColumnTypeName(i));
// }
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}finally{
st.close();
con.close();
}
}

5、参数预处理

    public static void insert(Stringtitle)throwsSQLException{
Connectioncon=DriverManager.getConnection(URL);
PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");
pst.setString(1,title);
pst.executeUpdate();
con.close();
pst.close();
}

6、批处理

    public static void insertBatch(String[]title)throwsSQLException{
// Connectioncon=DriverManager.getConnection(URL);
// Statementst=con.createStatement();
// for(inti=0;i<title.length;i++){
// st.addBatch("insertintoarticle(title)values('"+title[i]+"');");
// }
// st.executeBatch();
// con.close();
// st.close(); //参数预处理+批处理
Connectioncon=DriverManager.getConnection(URL);
PreparedStatementpst=con.prepareStatement("insertintoarticle(title)values(?);");
for(inti=0;i<title.length;i++){
pst.setString(1,title[i]);
pst.addBatch();
}
pst.executeBatch();
con.close();
pst.close();
}

7、事务操作

  7.1、数据库事务的特性:
    原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
    一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
  7.2、JDBC事务操作
  (1)setAutoCommit(Booleanauto Commit):设置是否自动提交事务;
  (2)commit():提交事务;
  (3)rollback():撤消事务;
    默认的情况为自动提交事务,也就是说,每一条对数据库的更新的sql语句代表一项事务,操作成功后,系统自动调用commit()来提交,否则将调用rollback()来撤消事务。在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交事务。然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后,调用commit()来进行整体提交。倘若其中一项sql操作失败,就不会执行commit()方法,而是产生相应的sqlexception,此时就可以捕获异常代码块中调用rollback()方法撤消事务。

    public static void transaction()throwsSQLException{
Connectioncon=DriverManager.getConnection(URL);
Statementst=con.createStatement();
try{
con.setAutoCommit(false);//更改JDBC事务的默认提交方式
st.executeUpdate("deletefromarticlewhereid=1;");
       //Savepoint sp = conn.setSavepoint();设置回滚点
st.executeUpdate("deletefromarticlewhereid=2;");
con.commit();//提交JDBC事务
con.setAutoCommit(true);//恢复JDBC事务的默认提交方式
}catch(Exceptionexc){
con.rollback();//回滚JDBC事务
}finally{
st.close();
con.close();
}
}

8、调用mysql存储过程

    public static void callProcedure()throwsSQLException{
Connectioncon=DriverManager.getConnection(URL);
CallableStatementcst=con.prepareCall("{callproc_select(?)}");
     //传入参数值
cst.setInt(1,3);
//如果第一个结果是ResultSet对象,则返回true;如果第一个结果是更新、添加、修改或者没有结果,则返回false
booleanissuccess=cst.execute();
//成功返回true,失败返回false
System.out.println(issuccess);
}

三、JDBC执行sql语句方法

  1、executeQuery(String sql): 执行SQL查询,并返回ResultSet 对象。

  2、executeUpdate(String sql): 可执行增,删,改,返回执行受到影响的行数。

  3、execute(String sql);:可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。

四、JDBC Statement类型

  1、Statement:接口提供了执行语句和获取结果的基本方法,用于执行不带参数的简单SQL语句,每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。

  2、PrepareStatement:可变参数的SQL,编译一次,执行多次,效率高;安全性好,有效防止Sql注入等问题;支持批量更新,批量删除;执行的SQL语句中是可以带参数的,并支持批量执行SQL。由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。

  3、CallableStatement:用于执行对数据库已存储过程的调用,继承自PreparedStatement,支持带参SQL操作;支持调用存储过程,提供了对输出和输入/输出参数的支持;
在JDBC中调用存储过程的语法如下所示:
  {call过程名[(?,?)]}
  返回结果参数的过程的语法为:
  {?=call过程名[(?,?,...)]}
  不带参数的存储过程的语法类似:
  {call过程名}
  CallableStatement中定义的所有方法都用于处理OUT参数或INOUT参数的输出部分:注册OUT参数的JDBC类型(一般SQL类型)、从这些参数中检索结果,或者检查所返回的值是否为JDBCNULL。

JDBC数据库常用操作(mysql)的更多相关文章

  1. 数据库常用操作(mysql)

    创建 create database 库名 create table 表名(列名 type(varchar(size),int(size),decimal(size,d))) "size&q ...

  2. DBA必备:MySQL数据库常用操作和技巧

    DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...

  3. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  4. php模拟数据库常用操作效果

    test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...

  5. MySQL数据库常用操作和技巧

    MySQL数据库可以说是DBA们最常见和常用的数据库之一,MySQL的广泛应用,也使更多的人加入到学习它的行列之中.下面是老MySQL DBA总结的MySQL数据库最常见和最常使用的一些经验和技巧,分 ...

  6. Flask学习笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy

    Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...

  7. mysql常用操作 mysql备份与恢复

    先登录mysql  ==>mysql -uroot -p  查看数据库的版本 select version(); 查看有哪些库 show datases; 查看当前处于哪个库 select da ...

  8. mysql数据库----python操作mysql ------pymysql和SQLAchemy

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...

  9. MySQL数据库4Python操作mysql、索引、慢查询日志

    目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...

随机推荐

  1. brew安装mysql

    1. 安装mysql5.7版本,不指定版本就默认安装最新的,目前最新是8 brew install mysql@5.7 2. 安装完进入/usr/local/Cellar/mysql@5.7目录,可以 ...

  2. lua返回服务器信息

    ngx.header.content_type = "text/plain"; ngx.say(tostring(ngx.var.request_uri));ngx.say(tos ...

  3. 关于mysql数据库的表概况 ,查看表状态

    SHOW TABLE STATUS FROM `DB_NAME` WHERE  ENGINE IS NOT NULL; SHOW TABLE STATUS FROM `DB_NAME`  WHERE ...

  4. sed 概述

    sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送 ...

  5. c++基础学习之函数与参数

    1.传值参数 //传值参数 int Abc(int a,int b,int c) { ; } a,b和c是函数Abc 的形式参数formal parameter,类型均为整型.如果在如下语句中调用函数 ...

  6. 使用jmatio读写matlab数据文件

    /** * Created by hfz on 2016/2/23. */ import com.jmatio.io.*; import com.jmatio.types.MLDouble; impo ...

  7. KEIL3中出现的字符不对齐的情况解决办法

    写代码的时候我的keil3中会出现光标不对齐的情况,如下图: 看似光标在t后面,其实是在逗号后面,这是因为字体加粗导致的.解决办法: Edit->Configuration->colors ...

  8. linux-排序-sort

    命令格式: sort [参数][源文件][-o 输出文件] 参数:  -b   忽略每行前面开始出的空格字符.  -c   检查文件是否已经按照顺序排序.  -f   排序时,忽略大小写字母.  -M ...

  9. FTTB FTTC FTTH FTTO FSA

    FTTB Fiber to The Building 光纤到楼 FTTC Fiber to The Curb 光纤到路边 FTTH Fiber to The Home 光纤到家 FTTO Fiber ...

  10. 【spring boot】spring boot中使用定时任务配置

    spring boot中使用定时任务配置 =============================================================================== ...