`

JAVA基本功<7>_JDBC

 
阅读更多
一、jdbc基本概念
jdbc : Java Database Connectivity
sun公司为了统一对数据库的操作,定义了一套api,称之为jdbc
这套api完全有接口组成,我们在编写程序的时候针对接口进行调用
这些接口交给数据库厂家去实现, 不同的数据库厂商会提供不同的实现类,这些实现类被我们称作数据库的驱动

二、实现jdbc程序
步骤:
1. 实验环境
建 user 表  user.sql
create database xday12 character set utf8 collate utf8_general_ci;

use xday12;

create table users(
id int primary key auto_increment,
name varchar(40),
password varchar(40),
email varchar(60),
birthday date
)character set utf8 collate utf8_general_ci;

insert into users(name,password,email,birthday)
values('zs','123456','zs@sina.com','1980-12-04');
insert into users(name,password,email,birthday)
values('lisi','123456','lisi@sina.com','1981-12-04');
insert into users(name,password,email,birthday)
values('wangwu','123456','wangwu@sina.com','1979-12-04');

2. 导入数据库的驱动
mysql-connector-java-5.0.8-bin.jar

3. 编程java程序
// 1. 注册数据库的驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// 2. 建立与mysql数据库的连接  用到 jdbc api
String url = "jdbc:mysql://localhost:3306/day11";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
// 3. 创建用于发送sql语句的 Statement 对象
Statement stmt = conn.createStatement();
// 4. 编写一句 sql
String sql = "select * from users";
// 5. 发送sql, 获得结果集
ResultSet rs = stmt.executeQuery(sql);
// 6. 处理结果集
System.out.println("id | name   | password | email  | birthday");
while(rs.next()) {
// 有第一行
int id = rs.getInt("id"); // 通过列名取值比较直观
String name = rs.getString("name");
String psw = rs.getString("password");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id + " | " + name + " | " + psw + " | " + email + " | " + birthday);
}
// 7. 关闭连接 释放资源
rs.close();
stmt.close();
conn.close();

三、jdbc程序详解
1. 注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
上面的语句会导致注册两次驱动
原因在于,查看Driver类的源码会发现在静态代码块中完成了注册驱动的工作,
也就是说注册驱动其实很简单,只需要加载驱动类即可
Class.forName(“com.mysql.jdbc.Driver”);

2. 创建数据库的连接
Connection conn = DriverManager.getConnection(url, user, password);
其中:
url, 相当于数据库的访问地址,程序员通过url指定需要访问的数据库
jdbc:mysql:[]//localhost:3306/test?参数名:参数值
其中jdbc为主协议,mysql为子协议,localhost为主机名,3306为端口号,test为数据库名
url的后面可以跟参数,常用的参数有:user=root&password=root&characterEncoding=UTF-8

如果url地址后面跟了user和password,创建Connection对象时将不必再次传入值
Connection conn = DriverManager.getConnection(url);

补充: 如果访问的localhost:3306,url 可省写为jdbc:mysql:///test

3. Connection 对象
Connection对象用于表示与某个数据库之间的连接,在程序中对数据库的所有操作都需要通过此对象来完成
常用方法有:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。

4. Statement 对象
用于向数据库发送sql语句
execute(String sql):用于向数据库发送任意sql语句
executeQuery(String sql) :只能向数据发送查询语句。
executeUpdate(String sql):只能向数据库发送insert、update或delete语句
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。

5. ResultSet 对象
对于查询操作,该对象特别重要,因为它专门用于封装结果集
存储的形式就是一种表格的形式,同样是列+行,说白了就和我们在 dos 命令行窗口查询的结果一样

遍历方式:
一开始游标指向结果集第一行, 也就是表头
通过 next 将游标移向下一行, 如果没有下一行,该方法会返回false
获得当前行的数据需要调用get方法:
get(int index)获得第几列  列数从1开始
get(String columnName) 根据列名获得值  常用

数据库的数据类型与java中数据类型的对应关系


ResultSet对象的常用方法
next():移动到下一行
previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。

6. 释放数据库资源
由于数据库的资源非常宝贵,所以用完了一定要记得释放资源
特别是Connection对象,因为数据允许的并发访问连接数量往往都比较有限

在java程序中,我们应该将最终必须要执行的代码放到finally当中

释放资源的代码
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}

if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}

if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}


四、jdbc实现crud
1. 编写程序对User表进行增删改查操作

2. 防止 sql 注入
在 service 层进行逻辑判断
使用PreparedStatement对象

3. 编写工具类对 jdbc 程序进行优化
将获得连接和释放资源的代码写到通用的工具类中



五、 jdbc案例
实现一个简单的员工信息管理系统,练习对员工表的crud

字段名 说明 类型
id 编号 varchar(40)
name 员工姓名 varchar(20)
gender 性别 varchar(4)
birthday 出生日期 date
idcard 身份证号 varchar(20)
degree 学历 varchar(20)
entrydate 入职日期 date
position 部门 varchar(40)
department 职位 varchar(20)


web开发的两种模式

model1: jsp+javabean   只适合小型应用
model2: servlet+jsp+javabean    mvc
jsp 的作用只是显示的模板,所以在mvc中jsp应该禁止外界直接方法,藏在 web-inf下面

web应用的分层框架

案例实现步骤:
1. 搭建开发环境
1) 建工程 建包
2) 导入需要jar包
BeanUtils 相关jar包
jstl  标签
mysql 的驱动
3) 创建数据库和表
create database day12_employee;
use day12_employee;
create table employee
(
id varchar(40) primary key,
name varchar(20),
gender varchar(6),
birthday date,
idcard varchar(20),
degree varchar(20),
entrydate date,
department varchar(20),
position varchar(40)
);










分享到:
评论

相关推荐

    sqljdbc_6.0.7728.100_chs.exe

    1. 将 sqljdbc_&lt;版本&gt;_&lt;语言&gt;.exe 下载到一个临时目录。 2. 运行 sqljdbc_&lt;版本&gt;_&lt;语言&gt;.exe. 3. 按照提示输入安装目录。我们建议您将此 zip 文件解压缩到 %ProgramFiles% 中的默认目录下:"Microsoft JDBC Driver...

    Java连接达梦数据库驱动dm_jdbc

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16....

    List<Map>转化为List工具类

    一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List&lt;Map&lt;String, Object&gt;&gt;结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List&lt;Map&lt;String, Object&gt;...

    Java Programming With Oracle Sqlj

    &lt;br&gt;prepared_statement.close( )&lt;br&gt;&lt;br&gt;现在再看用SQLJ来编写上面的代码:&lt;br&gt;&lt;br&gt;int v_id = 1;&lt;br&gt;String v_name = null;&lt;br&gt;float v_price = 0.0;&lt;br&gt;#sql {&lt;br&gt; SELECT name, price INTO :v_name, :v_price ...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    Java版精华区 &lt;br&gt;含java jsp及js等精华帖子合集&lt;br&gt;适合收藏 查询&lt;br&gt;&lt;br&gt;序号 精华区主题 &lt;br&gt;--------------------------------&lt;br&gt; 1. [目录]Java教程 &lt;br&gt; 1. [目录]Java语言教程 &lt;br&gt; 2. [目录]来自java的传说...

    sqlserver 2012驱动

    2.若要解压缩此压缩的 tar 文件,请导航至要解压缩驱动程序的目录中,然后键入 gzip -d sqljdbc_&lt;版本&gt;_&lt;语言&gt;.tar.gz. 3.若要解压缩 tar 文件,请将其移至您要安装驱动程序的目录中,然后键入 tar –xf sqljdbc_...

    基于springboot的驾校管理系统的设计与实现

    &lt;dependency&gt; &lt;groupId&gt;com.microsoft.sqlserver&lt;/groupId&gt; &lt;artifactId&gt;sqljdbc4&lt;/artifactId&gt; &lt;scope&gt;4.0&lt;/scope&gt; &lt;version&gt;4.0&lt;/... &lt;artifactId&gt;java-sdk&lt;/artifactId&gt; &lt;version&gt;4.4.1&lt;/vers

    Java案例开发锦集

    案例3 用JDOM解析XML文件&lt;br&gt; 案例4 Java编制的时钟&lt;br&gt; 案例5 简单日历&lt;br&gt; 案例6 系统内存状态监视程序&lt;br&gt; 案例7 简单计算器&lt;br&gt; 案例8 多线程断点续传&lt;br&gt; 案例9 笛卡尔曲线&lt;br&gt;第四章 Java与游戏&lt;br&gt; 案例1 ...

    基于springboot的结合疫情情况的婚恋系统的设计与实现

    &lt;dependency&gt; &lt;groupId&gt;com.microsoft.sqlserver&lt;/groupId&gt; &lt;artifactId&gt;sqljdbc4&lt;/artifactId&gt; &lt;scope&gt;4.0&lt;/scope&gt; &lt;version&gt;4.0&lt;/... &lt;artifactId&gt;java-sdk&lt;/artifactId&gt; &lt;version&gt;4.4.1&lt;/vers

    基于springboot的乒乓球预约管理系统的设计与实现

    &lt;dependency&gt; &lt;groupId&gt;com.microsoft.sqlserver&lt;/groupId&gt; &lt;artifactId&gt;sqljdbc4&lt;/artifactId&gt; &lt;scope&gt;4.0&lt;/scope&gt; &lt;version&gt;4.0&lt;/... &lt;artifactId&gt;java-sdk&lt;/artifactId&gt; &lt;version&gt;4.4.1&lt;/vers

    基于springboot的校园在线拍卖系统的设计与实现

    &lt;dependency&gt; &lt;groupId&gt;com.microsoft.sqlserver&lt;/groupId&gt; &lt;artifactId&gt;sqljdbc4&lt;/artifactId&gt; &lt;scope&gt;4.0&lt;/scope&gt; &lt;version&gt;4.0&lt;/... &lt;artifactId&gt;java-sdk&lt;/artifactId&gt; &lt;version&gt;4.4.1&lt;/vers

    北大Java语言程序设计(ppt课件)

    &lt;br&gt;第七讲 多线程 &lt;br&gt; &lt;br&gt;第八讲 图形用户界面与事件处理&lt;br&gt; &lt;br&gt;第九讲 Java Applet&lt;br&gt; &lt;br&gt;第十讲 网络通信 &lt;br&gt; &lt;br&gt;第十一讲 J2EE &lt;br&gt;JDBC&lt;br&gt;J2EE简介&lt;br&gt;Servlet&lt;br&gt;JSP&lt;br&gt;Java Beans&lt;br&gt;EJB&lt;br&gt;Web ...

    Java数据编程指南

    数据定义&lt;br&gt;基本数据操作&lt;br&gt;数据完整性&lt;br&gt;表达式&lt;br&gt;连接&lt;br&gt;合并&lt;br&gt;子查询&lt;br&gt;小结&lt;br&gt;附录B 序列化&lt;br&gt;简介&lt;br&gt;序列化&lt;br&gt;可串行化的接口&lt;br&gt;小结&lt;br&gt;附录C Java和分布式应用程序&lt;br&gt;分布式系统&lt;br&gt;分布式...

    人大金仓驱动包kingbasejdbc.jar V8.6.0、8.8.0驱动jar包

    &lt;groupId&gt;com.kingbase8.jdbc&lt;/groupId&gt; &lt;artifactId&gt;kingbase8&lt;/artifactId&gt; &lt;version&gt;8.6.0&lt;/version&gt; &lt;scope&gt;system&lt;/scope&gt; &lt;systemPath&gt;${basedir}/src/main/resources/jar/kingbase8-8.6.0.jar&lt;/system...

    SQL Server JDBC Driver 2005

    如:C:\Program Files\Microsoft SQL Server 2005 JDBC Driver&lt;br&gt;&lt;br&gt;②:将C:\Program Files\Microsoft SQL Server 2005 JDBC Driver\&lt;br&gt;sqljdbc_1.0\chs下的sqljdbc.jar复制到tomcat下的C:\Tomcat 6.0\lib&lt;br&gt;...

    jive.chm

    &lt;br&gt; 13 JDBC性能优化技巧 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;权限设计&lt;br&gt; 1 权限系统概要 &lt;br&gt; 2 关于权限设计方面的问题 &lt;br&gt; 3 关于用户角色权限管理一点想法 &lt;br&gt; 4 关于权限系统的设计 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;缓存系统&lt;br&gt; 1 ...

    java_jdbc包括驱动

    java_jdbc包括驱动java_jdbc包括驱动java_jdbc包括驱动java_jdbc包括驱动

    java JDK5.0 实例开发宝典

    类型基本操作&lt;br&gt;2. 面向对象的操作 适配器模式 单列模式 工程模式 组合模式。。。&lt;br&gt;3. 精确计算数字和随机数字&lt;br&gt;4. java.util.package高级使用 List Set collection..&lt;br&gt;5. String高级操作 包括密码的使用 ...

    jdbc.zip_java jdbc_java+jdbc_jdbc_jdbc Java_zip

    jdbc server + client

    JavaDbLib.JAVA数据库驱动

    &lt;br&gt;&lt;br&gt;//连接字符串&lt;br&gt;String conStr="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=mydatabase";&lt;br&gt;&lt;br&gt;//MicroSoft SQL Server 2000&lt;br&gt;//加载驱动程序&lt;br&gt;String classStr=...

Global site tag (gtag.js) - Google Analytics