0 数据库驱动(应用程序 和 数据库厂商之间相互交互的中间人):
1 JDBC(SUN公司提供的java操作各种数据库的规范)
2 准备数据脚本 见附件User.rar
3 本机中安装好mysql,细节见本博客另一篇文章 mysql基础知识
4 常用数据库URL地址写法:
Oracle—jdbc:oracle:thin:@localhost:1521:dbname
MySql—jdbc:mysql://localhost:3306/dbname
SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=dbname
5 JDBC常用到的类介绍:
a) DriverManager: 加载驱动,并创建与数据库的链接
常用到方法如下:
方法 | 功能 | 说明 |
registerDriver(new Driver()) | 加载具体数据库驱动 | 不推荐,会导致驱动程序加载两次导致内存中会有两个Driver对象(查看Driver的源代码) |
Class.forName(“com.mysql.jdbc.Driver”) | 加载具体数据库驱动,取代上面方法 | 不会导致驱动对象在内存中重复出现; 程序仅仅只需要一个字符串,不需要import驱动的API,即依赖具体的驱动。 |
DriverManager.getConnection(url, user, password) | 获取数据库连接 |
b) Connection 代表数据库的链接 ,客户端与数据库所有交互都是通过connection对象完成。
常用方法如下:
方法 | 说明 |
createStatement() | 创建向数据库发送sql的statement对象 |
prepareStatement(sql) | 创建向数据库发送预编译sql的PrepareSatement对象 |
prepareCall(sql) | 创建执行存储过程的callableStatement对象 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交 |
commit() | 在链接上提交事务 |
rollback() | 在此链接上回滚事务 |
c) Statement: 用于向数据库发送SQL语句
常用方法如下:
方法 | 说明 |
execute(String sql) | 用于向数据库发送任意sql语句 |
executeQuery(String sql) | 只能向数据发送查询语句 |
executeUpdate(String sql) | 只能向数据库发送insert、update或delete语句 |
addBatch(String sql) | 把多条sql语句放到一个批处理中 |
executeBatch() | 向数据库发送一批sql语句执行 |
d) ResultSet: 代表Sql语句的执行结果,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据
常用方法如下:
方法 | 说明 |
getObject(int index) | |
getObject(string columnName) | |
getString(int index) | |
getString(String columnName) |
e) 数据库字段类型和对应JDBC方法对应:
SQL类型 | Jdbc对应的方法 | 返回类型 |
bit | getBoolean() | boolean |
tinyint | getByte() | byte |
smallint | getShort() | short |
int | getInt() | int |
bigint | getLong() | long |
char,varchar,longvarchar | getString() | string |
text(clob) blob | getColb() getBlob() | clob blob |
date | getDate() | java.sql.date |
time | getTime() | java.sql.time |
timestamp | getTimestamp() | java.sql.timeStamp |
6 JDBC释放资源时:
a) 捕获异常后一定要抛出,给调用者一个提醒
b) finally内关闭jdbc连接资源时,按照从小到大的顺序依次关闭,每一个关闭都要用try catch包裹,保证关闭时即使出现异常也能让JVM继续执行下去,关闭别的资源
见如下写法:
public static void delete() throws ClassNotFoundException{ String url = "jdbc:mysql:///jdbc1"; String username = "root"; String password = "root"; Class.forName("com.mysql.jdbc.Driver"); Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = DriverManager.getConnection(url,username,password); st = conn.createStatement(); String sql = "delete from user where id=2"; st.executeUpdate(sql); }catch(Exception e){ // 出现异常后,将此异常抛出给调用者 throw new RuntimeException(e); }finally{ if(rs!=null) { try{ rs.close(); }catch(Exception e){ e.printStackTrace(); } rs = null; } if(st!=null) { try{ st.close(); }catch(Exception e){ e.printStackTrace(); } st = null; } if(conn!=null){ try{ conn.close(); }catch(Exception e){ e.printStackTrace(); } conn = null; } } }
7 JDBC防止SQ注入攻击:
7.1 使用类PreperedStatement的好处如下:
a) 使用类PreperedStatement可以避免SQL注入的问题
b) Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
c) PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
7.2 使用类PreperedStatement进行CRUD写法: --->给参数赋值时,参数起始位置从1开始
查询写法: String sql = "select * from user where username=?"; st = conn.prepareStatement(sql); st.setString(1, user.getUsername()); rs = st.executeQuery(); if(rs.next()){ dosomething....} 插入 修改 删除写法: sql = "insert into user(username,password,email) values(?,?,?)";// 插入 修改 删除语句 //给参数赋值 st = conn.prepareStatement(sql); st.setString(1, user.getUsername()); st.setString(2, user.getPassword()); st.setString(3, user.getEmail()); // 执行 插入/修改/删除语句 st.executeUpdate();
8 JDBC获取插入数据后返回的数据库主键:
使用关键词 RETURN_GENERATED_KEYS, 代码如下:
public static void main(String[] args) throws SQLException { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql ="insert into user(name,password,email,birthday) values(?,?,?,?)"; st = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//通知jdbc程序返回数据库的主键 st.setString(1, "aaaa"); st.setString(2, "1233"); st.setString(3, "zm@sina.com"); st.setDate(4, new java.sql.Date(new Date().getTime())); st.executeUpdate(); 返回的数据仅仅是新增数据后的DB分配的主键,因此直接获取第一个位置的数据即可得到主键 rs = st.getGeneratedKeys(); if(rs.next()){ System.out.println("主键为:" + rs.getInt(1)); } }finally{ // 释放语句 JdbcUtils.release(rs, st, conn); } }
相关推荐
1. **JDBC基础**:了解JDBC是什么,它的作用是在Java应用程序和数据库之间建立桥梁,允许执行SQL语句和处理结果。 2. **JDBC驱动管理**:Java程序需要加载合适的JDBC驱动才能连接到MySQL数据库,这通常通过`Class....
开发者通过这个项目可以了解到如何整合JDBC、Servlet、JSP和DAO模式来实现一个完整的业务系统,并掌握数据库管理和Web应用开发的基础知识。此外,对于数据库设计和管理也有一定的学习价值,包括表结构的设计、数据的...
在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query ...通过这个实例,你现在已经具备了使用Hive JDBC的基础知识,可以进一步探索更高级的Hive和Java集成技术。
它不仅涵盖了JDBC的基础知识,还深入讨论了Oracle数据库的特性和优化技术,帮助读者构建健壮、高效且安全的Java应用程序。通过学习本书,开发者可以充分利用Oracle JDBC的全部潜力,提升其在数据库操作方面的专业...
**JSP+JDBC技术详解** JSP(JavaServer Pages)和...总的来说,"JSP+JDBC.rar"是一个很好的学习材料,它不仅提供了实践案例,还有配套的文档说明,对于初学者来说,能够通过实际操作来巩固理论知识,提升开发技能。
下面我们将详细探讨JDBC的基础知识,以及`JdbcUtil`类的设计思想和实现方法。 首先,JDBC是Java平台上的一个标准API,它提供了一组接口和类,使得Java程序员能够通过标准的SQL语句与各种关系型数据库进行通信。JDBC...
**JDBC基础与应用** Java Database Connectivity(JDBC)是Java平台中用于访问数据库的标准Java API,它由一组接口和类组成,使得Java开发者能够连接、操作和查询各种类型的数据库系统。在“JDBC.rar_ado ODBC jdbc...
以上就是JDBC连接Oracle数据库的基础知识。虽然描述中提到这些内容可能“很low”,但对于初学者来说,掌握这些基础是非常重要的,它们构成了后续更高级数据库操作和开发的基础。通过不断实践和学习,你将能够熟练地...
JDBC的基础知识通常包括以下几个方面: 1. **JDBC驱动**:JDBC驱动是Java程序与数据库之间的桥梁,分为四种类型:Type 1(JDBC-ODBC桥接)、Type 2(部分Java实现)、Type 3(完全基于网络的中间件)和Type 4(纯...
了解JDBC,首先需要掌握以下几个关键知识点: 1. **JDBC驱动**: JDBC驱动是Java程序与数据库之间的桥梁,根据类型分为四种:JDBC-ODBC桥接驱动、网络纯Java驱动、部分Java驱动和协议驱动。每种驱动有其特定的应用...
1. **JDBC API**:了解JDBC的基础,包括`java.sql.DriverManager`、`Connection`、`Statement`、`PreparedStatement`和`ResultSet`等接口和类。`DriverManager`用于注册和连接数据库,`Connection`代表数据库连接,`...
1. **Java JDBC基础** - **JDBC API**: 包含了`java.sql`包下的接口和类,如`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等,它们提供了与数据库通信的基本方法。 - **数据库连接**: `...
标题“JDBC基础知识1_保存大文本_分页_批处理”揭示了本文将要讨论的是Java数据库连接(Java Database Connectivity, JDBC)的基础知识,主要包括如何在数据库中处理大文本数据、实现分页查询以及利用批处理提高...
学习JavaScript,你需要掌握变量、数据类型、控制流、函数、对象、原型链、闭包等基础知识,以及DOM(Document Object Model)操作和事件处理。随着ES6(ECMAScript 6)的发布,JavaScript引入了类、模块、箭头函数...
总的来说,"java_JDBC.rar_jdbc"项目是一个实践Java与数据库交互的好例子,涵盖了JDBC的基础知识,包括加载驱动、建立连接、执行SQL和管理数据库资源等核心概念。通过深入研究该项目,开发者可以进一步提升自己在...
"JDBC.rar_MYSQL_MYSQL 数据类型_jdbc_jdbc mysql" 这个压缩包文件显然聚焦于JDBC与MySQL数据库之间的数据类型对应关系,这对于开发涉及数据库操作的Java应用是基础且关键的知识。 首先,我们需要理解JDBC是什么。...
总结来说,这个压缩包内容可能涵盖了Java在Tomcat环境下利用JDBC与各种数据库进行交互的基础知识,包括连接池的配置、数据库连接的建立和释放,以及SQL语句的执行等。通过深入研究这个压缩包中的内容,开发者可以更...
1. **JDBC基础**: - JDBC是Java中的一个API,它提供了多种方法来建立数据库连接,执行SQL语句,处理结果集等。 - JDBC驱动:连接MySQL需要对应的JDBC驱动,通常使用`mysql-connector-java.jar`,将其添加到项目类...
这里,我们先了解一下Servlet和JDBC的基础知识,然后深入到学生管理的场景应用。 Servlet是Java语言中用于扩展Web服务器功能的一种技术,它允许开发者创建动态响应的Web应用。Servlet通过接收到HTTP请求,处理数据...
这个“Java_JDBC.rar_JDBC入门”资源包中的“Java数据库接口JDBC入门基础讲座.pdf”很可能是详细的教程,涵盖了上述所有知识点,而“www.pudn.com.txt”可能是提供额外链接或者资料来源的信息。通过阅读这些材料,...