- 浏览: 163460 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhousheng193:
非常感谢LZ
在JSP页面及servlet的doGet()方法中处理汉字乱码的问题 -
jie523314:
学习下。。。
读取XML文件
Util类
测试类
元数据
数据连接元数据
DatabaseMetadata
数据库品牌、版本
表.....
结果集的元数据
ResultSetMetadata
列
getColumnCount() - 结果集中字段数量
getColumnName(序号) - 指定字段的名字
getColumnType(序号) - 指定字段的类型数字编号
使用Types中的常量做判断
getColumnTypeName(序号) - 指定字段的类型名称
java.sql.Types
封装表示字段类型的数字变号常量
Types.DATE - 年月日
Types.TIME - 时分秒
Types.TIMESTAMP - 年月日时分秒
ResultSet
数据传输量
setFetchSize(数据行数)
0 - JDBC驱动自行决定每次抓取的数据量
int age = rs.getInt("age");
// 刚取出的字段中数据在数据表中是否为null
boolean b = rs.wasNull();
double height = rs.getDouble("height");
b = rs.wasNull();
PreparedStatement
是Statement的子接口
比Statement更常用
1, 预编译的sql语句,重复执行相同的sql语句效率较高
2, 对sql语句中参数数据进行设置
3, 不用拼sql,不用处理sql注入
事务处理
事务
1, 启动事务
无事务:自动提交 auto commit = true
启动事务:关闭自动提交 auto commit = false
con.setAtuoCommit(false);
到达事务上边界
2, 提交
con.commit();
到达事务下边界
3, 回滚
con.rollback();
1, 在捕获到异常时执行
2, 在一定条件下
package tarena.util; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DBUtil { private static final String URL; private static final String DRIVER; private static final String USERNAME; private static final String PASSWORD; private static ThreadLocal threadLocal = new ThreadLocal(); static { try { InputStream in = DBUtil.class.getResourceAsStream("/db.properties"); Properties props = new Properties(); props.load(in); in.close(); URL=props.getProperty("url"); DRIVER=props.getProperty("driver"); USERNAME=props.getProperty("username"); PASSWORD=props.getProperty("password"); Class.forName(DRIVER); // 注册驱动 } catch(Exception e) { System.out.println("无法获得数据库连接信息"); throw new RuntimeException(e); } } private DBUtil() {} public static Connection open() throws SQLException{ return DriverManager.getConnection( URL,USERNAME,PASSWORD); } public static void close( Connection con, Statement stmt, ResultSet rs) { try {rs.close();} catch(Exception e) {} try {stmt.close();} catch(Exception e) {} try {con.close();} catch(Exception e) {} } public static Connection openInThread() throws SQLException{ Connection con = (Connection)threadLocal.get(); if(null == con) { con = open(); threadLocal.set(con); } return con; } public static void closeInThread() { try { Connection con = openInThread(); con.close(); threadLocal.remove(); } catch(Exception e) {} } }
测试类
package day02; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; import tarena.util.DBUtil; public class JDBCTest3 { public static void main(String[] args) throws Exception { test1(); } static void test1() throws Exception { Connection con = null; Statement stmt = null; try { con = DBUtil.openInThread(); con.setAutoCommit(false); // 输入员工数据保存 // 如果姓名存在,删除再插入新数据 // 如果不存在,直接插入新数据 Emp emp = inputEmp(); if(nameExist(emp.getFirstName(), emp.getLastName())) { deleteByName(emp.getFirstName(), emp.getLastName()); } save(emp); con.commit(); } catch(Exception e) { con.rollback(); throw e; } finally { DBUtil.closeInThread(); } } private static void save( Emp emp) throws Exception { Connection con = DBUtil.openInThread(); PreparedStatement pstmt = con.prepareStatement( "insert into s_emp(id,first_name, last_name, salary) " + "values(?,?,?,?)"); pstmt.setInt(1, emp.getId()); pstmt.setString(2, emp.getFirstName()); pstmt.setString(3, emp.getLastName()); pstmt.setDouble(4, emp.getSalary()); pstmt.executeUpdate(); } private static void deleteByName(String firstName, String lastName) throws Exception { Connection con = DBUtil.openInThread(); PreparedStatement pstmt = con.prepareStatement( "delete from s_emp " + "where first_name=? " + "and last_name=?"); pstmt.setString(1, firstName); pstmt.setString(2,lastName); pstmt.executeUpdate(); } private static boolean nameExist(String firstName, String lastName) throws Exception { Connection con = DBUtil.openInThread(); PreparedStatement pstmt = con.prepareStatement( "select * from s_emp " + "where first_name=? " + "and last_name=?"); pstmt.setString(1, firstName); pstmt.setString(2,lastName); ResultSet rs = pstmt.executeQuery(); // 指针下移有数据,即存在同名员工 boolean exist = rs.next(); rs.close(); pstmt.close(); return exist; } private static Emp inputEmp() { Scanner sc = new Scanner(System.in); System.out.print("请输入id:"); int id = sc.nextInt(); System.out.print("请输入first name:"); String fname = sc.next(); System.out.print("请输入last name:"); String lname = sc.next(); System.out.print("请输入salary:"); double sal = sc.nextDouble(); Emp e = new Emp(id,fname,lname,sal); return e; } }
引用
元数据
数据连接元数据
DatabaseMetadata
数据库品牌、版本
表.....
结果集的元数据
ResultSetMetadata
列
getColumnCount() - 结果集中字段数量
getColumnName(序号) - 指定字段的名字
getColumnType(序号) - 指定字段的类型数字编号
使用Types中的常量做判断
getColumnTypeName(序号) - 指定字段的类型名称
java.sql.Types
封装表示字段类型的数字变号常量
Types.DATE - 年月日
Types.TIME - 时分秒
Types.TIMESTAMP - 年月日时分秒
ResultSet
数据传输量
setFetchSize(数据行数)
0 - JDBC驱动自行决定每次抓取的数据量
int age = rs.getInt("age");
// 刚取出的字段中数据在数据表中是否为null
boolean b = rs.wasNull();
double height = rs.getDouble("height");
b = rs.wasNull();
PreparedStatement
是Statement的子接口
比Statement更常用
1, 预编译的sql语句,重复执行相同的sql语句效率较高
pstmt = con.prepareStatement("select ..."); pstmt.executeQuery(); pstmt.executeQuery();
2, 对sql语句中参数数据进行设置
pstmt = con.prepareStatement( "insert into emp(id,name,sal) values(?,?,?)"); pstmt.setInt(1,4534); pstmt.setString(2, "1' or '1' = '1"); pstmt.setDouble(3,5000D); pstmt.executeUpdate(); // 执行上面已经设置好的sql语句 pstmt.setInt(1, 4535); pstmt.executeUpdate();
3, 不用拼sql,不用处理sql注入
事务处理
事务
1, 启动事务
无事务:自动提交 auto commit = true
启动事务:关闭自动提交 auto commit = false
con.setAtuoCommit(false);
到达事务上边界
2, 提交
con.commit();
到达事务下边界
3, 回滚
con.rollback();
1, 在捕获到异常时执行
2, 在一定条件下
发表评论
-
实现分页
2010-07-22 10:05 634引用 package day03; import jav ... -
给JDBC添加数据源
2010-07-22 10:01 1055package day03; import java ... -
总结课程
2010-07-22 09:46 669引用 下载 commons-dbcp-1.4- ... -
向s_emp批量插入10000条数据随机产生的数据
2010-07-22 09:44 826引用 向s_emp批量插入10000条数据随机产生的数据 ... -
JDBC总结10-JDBC2.0 扩展
2010-07-20 11:41 764引用JDBC2.0 扩展 (一)JNDI(命名路径服务): ... -
JDBC总结09-JDCB 应用的分层
2010-07-20 11:33 789JDCB 应用的分层 分层就是对工能的隔离,降低层与层间的耦合 ... -
JDBC总结08-面向对象的数据库设计
2010-07-20 11:31 807引用 面向对象的数据库 ... -
JDBC总结07-SQL 数据类型及其相应的 Java 数据类型
2010-07-20 11:05 649... -
JDBC总结06-JavaBean 的定义、JDBC2.0 新特性、SQL3.0 规范中的新类型
2010-07-20 11:04 801引用 JavaBean 的定义: 1、 是一个普通的 Ja ... -
JDBC总结05-JDBC 中使用 Transaction 编程(事务编程)
2010-07-20 10:59 1064引用 五、JDBC 中使用 Transaction 编程(事务 ... -
JDBC总结04-JDBC 异常处理
2010-07-20 10:46 1114引用四、JDBC 异常处理: JDBC 中,和异常相 ... -
JDBC总结03-几个重要接口
2010-07-20 10:43 801引用 三、几个重要接口: (1) Statement —— S ... -
JDBC总结02-JDBC 编程的步骤
2010-07-20 10:38 776引用 ... -
JDBC总结01-jdbc简介
2010-07-20 10:08 549引用 JDBC(Java Database Co ...
相关推荐
JDBC 实践题 2 - 数据访问对象(DAO)设计与实现 本题目要求设计和实现一个数据访问对象(DAO),用于操作 personnel 表中的数据。该 DAO 需要提供五个方法:插入人员、修改人员、删除人员、查询所有人员和分页查询...
**标题解析:** "JDBC练习小项目用于java初学者" 这个标题表明这是一个针对初学者设计的Java编程练习项目,重点在于JDBC(Java Database Connectivity)的应用。JDBC是Java语言中用来规范客户端程序如何连接和操作...
在JDBC练习作业中,你可以尝试以下实践: 1. 创建一个简单的数据库连接并执行查询,展示结果。 2. 使用PreparedStatement处理动态SQL,例如用户输入的查询条件。 3. 实现一个DAO类,封装常用的CRUD(Create、Read、...
本练习代码主要关注如何使用DAO模式和JDBC API来实现用户购买物品和订单处理的功能。首先,我们来详细了解这两个概念。 DAO模式是一种设计模式,它提供了一种在业务逻辑和数据访问之间解耦的方式。在Java应用中,...
这个"jdbc struts练习源代码"的压缩包文件很可能是为了帮助开发者学习如何在Struts框架中集成和使用JDBC进行数据操作。 首先,让我们详细了解一下Struts框架。Struts提供了强大的控制层,使得开发者可以更好地组织...
在主函数中,实例化`UserDao`并调用对应方法进行测试。 以上就是JDBC操作数据库的基本步骤,涵盖了创建表、插入、更新、删除、查询和用户登录验证等功能。在实际开发中,还需要考虑事务管理、异常处理、连接池的...
本练习主要涵盖了Spring的三个方面:面向切面编程(AOP)、JDBC(Java Database Connectivity)以及事务管理(TX)。让我们详细探讨这些知识点。 1. **Spring AOP(面向切面编程)** 面向切面编程是Spring框架的一...
在Java编程领域,JDBC(Java Database Connectivity)是Java应用程序连接和操作数据库的标准接口。它允许程序员使用SQL语言与...通过实际的编程练习和不断学习,你可以更深入地理解和运用JDBC,从而提升你的开发技能。
系统采用 Struts2 + JDBC + Oracle 为主要的开发模式,主要实现了题库管理、分章练习、自动组卷测试及成绩分析等几块功能。 大型数据库技术课程在线练习及测试系统的需求分析 随着计算机技术和互联网技术的发展,...
在本测试练习项目中,我们将深入理解MyBatis的核心功能和常见操作,如增删改查(CRUD)以及级联查询。项目采用的是MyBatis的v3.2.2版本。 首先,`test.sql`文件通常是数据库初始化脚本,用于创建测试用的表结构和...
这个压缩包对于初学者来说是一个很好的起点,它提供了实战练习,帮助理解JDBC与MySQL的配合使用,以及如何在Java程序中实现数据库操作。通过阅读相关代码和运行测试程序,可以快速掌握JDBC的基础知识和实践技巧。
总的来说,这个练习将带你深入理解Spring如何处理数据库操作,如何利用事务保证数据一致性,以及如何使用JUnit进行单元测试。通过实际操作,你将能更好地掌握这些核心技能,提升自己的开发能力。在实践中不断学习,...
**JDBC_test: 练习JDBC程序** 在Java编程中,JDBC(Java Database Connectivity)是连接Java应用程序与各种数据库的重要桥梁。本项目“JDBC_test”旨在提供一个实践平台,帮助开发者深入理解并熟练掌握JDBC的核心...
SSSM测试练习是一个基于Java编程语言的项目,其核心是Spring MVC框架的运用。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序。这个压缩包文件可能是为了教学目的而设计的,帮助初学者深入理解Java编程...
<description>JDBC connect string for a JDBC metastore <name>javax.jdo.option.ConnectionDriverName <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore ...
最后,"tp3"可能是一个项目或测试模块的名称,表示这是一个关于DAO、JDBC、Hibernate和XML mapping的第三部分练习或测试用例,用于实践和检验上述技术的正确使用。 综上所述,这个项目涵盖了Java后端开发中数据库...
Java的JDBC(Java Database Connectivity)项目,如“银行管理系统”,是学习和实践Java编程语言以及数据库操作的理想...在实际项目中,还需要考虑性能优化、代码复用、测试策略等多个方面,以实现高效、可维护的系统。
综上所述,"考试系统exam练习"是一个全面的项目,涵盖了从后端到前端,从数据库设计到测试的多种IT技能。对于希望提升Java Web开发能力的学习者来说,这是一个很好的实践平台,可以通过实际操作来加深理解和应用这些...
这个练习可以帮助开发者掌握和应用JavaWeb开发中的关键概念和技术,如Servlet、JSP、JDBC以及用户交互设计。以下是一些相关的知识点: 1. **Servlet**:Servlet是Java编程语言中用于扩展服务器功能的接口。在这个...
这个练习集主要是针对JavaEE技术栈的学习与实践,通过"J2EE习题甲.xls"和"J2EE习题乙.xls"两个Excel文件,我们可以深入理解和掌握JavaEE的核心概念和技术。 JavaEE的主要组件包括: 1. **Servlet**:Servlet是...