java数据库编程(未整理完,待续)
java使用数据库可以借助jdbc这个中间媒介。本文将介绍如何使用jdbc连接数据库,数据库的基本操作和jdbc的事物处理。
1 连接数据库
一般java连接数据库,都有几个步骤:
0、导入相应的驱动包。
1、加载驱动程序:
mysql的是:com.mysql.jdbc.Driver;
sql server的是:com.microsoft.sqlserver.jdbc.SQLServerDriver;
oracle的是:oracle.jdbc.driver.OracleDriver。下载的程序导入eclipse外面的库中。
使用:Class.forName("com.mysql.jdbc.Driver");//注册驱动
2、连接,此时需要确定的是url,user,password。
mysql的连接:jdbc:mysql://localhost:3306/数据库名
sql server的连接:jdbc:sqlserver://localhost:1433;DatabaseName=数据库名
oracle的连接:jdbc:oracle:thin:@localhost:1521:数据库名
使用:Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","123456");//建立连接
3、处理sql语句。
执行查询操作的sql语句
ResultSet rs = null;
try {
stmt = conn.createStatement();//获取Statement对象
rs = stmt.executeQuery(sql);//执行sql语句
//处理结果集
} catch (SQLException e) {
System.err.println(e.getMessage());
}
执行增删改操作的sql语句
try {
stmt = conn.createStatement();
rs = stmt.executeUpdate(sql);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
4、关闭数据库连接。
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
2 数据库操作
(1)基本操作
单表查询(多表查询在下面单独讲)
1. 查询表的全部记录:SELECT * FROM tableName
2. 查询表的记录(加条件):SELECT * FROM tableName WHERE field1= value1 or field2 = value2
3. 查询表的部分字段的记录:SELECT field1, field2,..., FROM tableName
4. 查询出结果,并赋别名:SELECT filed1 as 别名1, field2 as 别名2 FROM tableName ,
或不要as:SELECT filed1 别名1, filed2 别名2 FROM tableName
5. 查询不重复的列值:SELECT DISTINCT field1 FROM tableName
6. 查询表的前N个记录:SELECT TOP 100 field1, field2 FROM tableName
新增记录
1. 插入一条新纪录:INSERT INTO tableName (field1, field2, field3) VALUES(value1, value2, value3),需要注意的是字符串类型的值,需要用单引号括起来。
修改记录
1. 修改所有符合条件的记录:UPDATE tableName SET field1 = value1, field2 = value2 WHERE field3 = value3
删除记录
1. 删除表中的所有记录:DELETE FROM tableName 或者 DELETE * FROM tableName
2. 删除符合条件的记录:DELETE FROM tableName WHERE field1 = value1 AND field2 = value2
(2)查询结果排序
说明:关键字ORDER BY 写在SQL语句的最后
1. 按某字段进行排序:SELECT * FROM tableName ORDER BYfield1
2. 按多个字段进行排序:SELECT * FROM tableName ORDER BY field1,field2, ...
3. 正逆序排序:SELECT * FROM tableName ORDER BY field1DESC, field2 ASC,其中“DESC”表示逆序,“ASC”表示正序
(3)WHERE条件设置
说明:WHERE条件语句跟在SQL语句表的后面
1. 添加字段值条件,判断符号有大于“>”,小于“<”,等于“=”,不等于“<>”、“!=”,介于“BETWEEN...AND”,不介于“NOT BETWEEN...AND"
2. 多条件连接,多条件可以用AND或者OR进行连接,AND表示“并且”,OR表示“或者”,如上面所示。条件可以用括号进行合并判断。
例:SELECT * FROM tableName WHERE field1 > 0 AND field2 < 100
SELECT * FROM tableName WHERE field1 = 10 AND (field2 != 'aaa' OR field3<> 'bbb')
SELECT * FROM tableName WHERE field1 BETWEEN 'a' AND 'd' ,不同的数据库(sql server、orcale)对字符串的判断方式可能不同。
SELECT * FROM tableName WHERE field1 NOT BETWEEN 100 AND 1000
3. 集合作为条件,关键字‘IN’
SELECT * FROM tableName WHERE field1 IN ('value1', 'value2', 'value3',...),查寻出field1字段值在value集合中存在的结果。
(4)通配符
说明:通配符通常用于 WHERE 语句中的 LIKE 条件
1. 通配符有两个,百分号‘%’和下划线‘_’,百分号‘%’表示匹配若干个连续的字符,下划线‘_’表示匹配一个字符
SELECT * FROM tableName WHERE field1 like '%b_cd%'
上面语句表示字段field1满足前面有0个或若干个字符,接着有b字符隔了一个字符后,接着cd后面跟0个或若干个字符。
补充:百分号可以匹配0个字符,而下划线匹配表示必须有一个字符。
(5)级联查询(多表连接查询)
说明:级联查询,通常是两个或多个表设置了主键和外键引用,通过id进行级联查询
1. 普通方式表连接查询:SELECT * FROM table1, table2 WHERE table1.id = table2.id
2. 内联查询:SELECT * FROM table1 INNER JOIN table2ON table1.id = table2.id,其结果与方式1查询结果一致。
2. 左联查询:SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id,如果右表没有匹配,也从左表返回所有的行
3. 右联查询:SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = talb2.id,如果左表没有匹配,也从右表返回所有的行
4. 多表级联:SELECT * FROM table1 INNER JOIN table2ONtable1.id = table2.id LEFT JOIN table3 ON t1.id = t3.id RIGHT JOIN ... ON...
5. 级联更新和级联删除,对于不用数据库支持不同,这里不作详述。
(6)表操作
新建表
关键字:CREATE TABLE
1. 创建一个三个字段的表:CREATE TABLE tableName (fieldName1 int, fieldName2 varchar(255), fieldName3 date),字段定义用逗号隔开。
2. 创建一个带主键的表:CREATE TABLE tableName ( fieldName1 int PRIMARY KEY, fieldName2 varchar(100))
3. 创建一个带非空字段的表:CREATE TABLE tableName ( fieldName1 int NOT NULL, fieldName2 varchar(100))
4. 创建一个含唯一约束字段的表:CREATE TABLE tableName ( fieldName1 int UNIQUE, fieldName2 varchar(100))
5. 创建含两个字段确定唯一的表:CREATE TALBE tableName (field1 int, field 2 varchar(255), field3 date,CONSTRAINT customName UNIQUE(field1, field3))
6. 创建一个含外键的表:CREATE TABLE tableName ( fieldName1 int FOREIGN KEY REFERENCES otherTable(fieldName), fieldName2 varchar(100))
7. CHECK约束,可以添加各种高级约束,例:CREATE TABLE tableName ( fieldName1 int CHECK(fieldName1 > 0), fieldName2 varchar(100))
说明:创建各种约束的时候,可以在字段的后面直接跟关键字,也可以单独写一句定义,单独写一句定义的好处在于,第一可以为约束命名字,第二可以增加组合的约束。
CONSTRAINT name PRIMARY KEY【或NOT NULL、UNIQUE、FOREIGN KEY、CHECK等】 (field1)【(field1,field2)、REFERENCES otherTable(table2)、(field1>0)等】
修改表
关键字:ALTER TABLE
1. 增加列:ALTER TABLE table1 ADD newField1 dataType, newField2 dataType
特殊情况,增加非空列时,如果表目前不为空,则需要设置默认值,
例:ALTER TABLE table1 ADD newField1 int NOT NULL DEFAULT()
2. 删除列:ALTER TABLE table1 DROP COLUMN field1
3. 修改字段数据类型:ALTER TABLE table1 ALTER COLUMN field1 otherDataType
4. 修改字段的名称,较复杂,多采用存储过程实现,这里暂不详述。
删除表
关键字:DROP TABLE
1. 删除表:DROP TABLE tableName,语句非常简单,但是如果表与其他表之间有约束,需要先处理约束再删表。
(7)字段约束操作
1. 增加字段约束:ALTER TABLE table1 ADD PRIMARY KEY ( field1 )
ALTER TABLE table1 CONSTRAINT name ADD PRIMARY KEY(field1, field2)
ALTER TABLE table1 CONSTRAINT name ADD CHECK
2. 删除字段约束,约束不同,语句不完全一致:ALTER TABLE table1 DROP PRIMARY KEY,因为一个表只有一个主键,所以不需要跟名称
ALTER TABLE table1 DROP FOREIGN KEY foreignKEYName,只能根据约束名来删除
通用的删除约束的方法: ALTER TABLE table1 DROP CONSTRAINT foreignKEYName
3 事务处理
事务处理可以保证执行多条记录的一致性,实现数据库中表与表之间的关联。
jdbc事物控制的流程
(1)判断当前使用的jdbc驱动程序和数据库是否支持事务处理
【jdbc不能跨越多个数据库而且需要判断当前使用的数据库是否支持多个事物,如果使用mysql的事物功能,就要求mysql中表的类型是Innodb。】
(2)在支持事物处理的前提下,取消系统自动提交模式
(3)添加需要进行的事务信息
(4)将事务处理提交到数据库
(5)在处理事务时,若某条信息发生错误(异常),则执行事物回滚操作,并回滚到事物提交前的状态
相关语句:
检查数据库是否支持事物:DatabaseMetaData md = con.getMetaData();
boolean result = md.supportsTransactions();
Connection的setAutoCommit(false);取消自动提交
commit()提交事务
rollback()回滚事物
转载请注明文章来源:http://blog.csdn.net/hepfei90/article/details/14002869
java数据库编程(未整理完,待续)的更多相关文章
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- java数据库编程——读写LOB、可滚动和可更新的结果集、元数据
java 数据库编程 1. 读写LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其它数据.在SQL中,二进制大对象称为BLOB,字符型大对象称为CLOB. 要读取LOB,需要 ...
- 菜鸡的Java笔记 java数据库编程(JDBC)
java数据库编程(JDBC) 介绍 JDBC 的基本功能 content (内容) 现在几乎所有的项目开发过程之中都不可能离开数据库,所以在java ...
- Java数据库编程、XML解析技术
数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...
- java 数据库编程 学习笔记 不断更新
最近开始学习java,感觉java的数据库编程需要发个随笔记录一下,话不多说 切入正题. 一.数据库访问技术的简介 应用程序 → 执行SQL语句 →数据库 → 检索数据结果 → 应用程序 ( ...
- JAVA数据库编程、JAVA XML解析技术
JDBC概述 JDBC是JAVA中提供的数据库编程API curd :数据库增删改 链接字符串:String url = "mysql :/localhost :3306/jdbc/&quo ...
- Java多线程笔记[未更新完]
最近课上可摸鱼时间较多,因此并发开坑学习 本篇学习自Java多线程编程实战指南 目前进展:刚开坑,处于理解概念阶段 本篇学习自Java多线程编程实战指南 Q.进程和线程的区别 进程Process是程序 ...
- JDBC与JAVA数据库编程
一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持 2. JDBC的主要功能 a) 创建 ...
- [面试] Java GC (未整理完)
Java GC简介 什么是 GC ? Java程序不用像C++程序在程序中自行处理内存的回收释放.这是因为Java在JVM虚拟机上增加了垃圾回收(GC)机制,用以在合适的时间触发垃圾回收. 你都了解哪 ...
随机推荐
- C&Cpp.CallGraph
1. CodeViz http://www.skynet.ie/~mel/projects/codeviz/ 2. http://my.oschina.net/zmlblog/blog/186308
- “Interrupted by header callback: Server reports Content-Length”如何解决
mock初始化时的错误信息如下: Downloading Packages: [SKIPPED] systemd--.fc25.x86_64.rpm: Already downloaded [SKIP ...
- lazarus,synedit输入小键盘特殊符号的补丁
unit synedittextdoublewidthchars2; // fix up chinese symbel width //by steven {$mode objfpc}{$H+} in ...
- 如何使用AE来制作烟雾粒子特效
1. 首先,我们先建立一个合成,大小1280×720,帧速率25,持续时间为10秒,建好后,再新建一个固态层点击确定. 2.点击效果添加Particular粒子插件 3. 点开粒子插件的发射器,方 ...
- Vim on Mac Terminal
2018-04-15 在Python 里面加标注, 发现Vim强大的两种用法, 比如要在1-5行加标注: 1. 用寻找和替代(basic search and replace),:1, 5s/^/# ...
- BS架构如何实现即时消息提醒
转载地址:https://blog.csdn.net/cyjch/article/details/51506434
- jQuery学习笔记:基础
本文主要总结jQuery中一些知识点 概念 美元符号$是著名的jQuery符号.jQuery把所有功能全部封装在一个全局变量jQuery中,而$也是一个合法的变量名,它是变量jQuery的别名 $本质 ...
- JQuery中after() append() appendTo()的区别
首先 after() 是追加在元素外边而append() appendTo()是追加在元素里面. $(selector).after(content) $("span").afte ...
- 【Web】前端文件上传,带进度条
最近做项目发现,在文件上传的过程中,增加进度条,能大大改善用户体验.本例介绍带进度条的文件上传 环境搭建 参考:[Java]JavaWeb文件上传和下载. 原生ajax上传带进度条 <%@ pa ...
- 【WebService】WebService基础知识(一)
WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际) ...