`

JDBC基础知识_0

    博客分类:
  • jdbc
 
阅读更多

 

 

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);
		}
		
	}

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    jdbc.zip_JDBC mysql java_mysql jdbc

    1. **JDBC基础**:了解JDBC是什么,它的作用是在Java应用程序和数据库之间建立桥梁,允许执行SQL语句和处理结果。 2. **JDBC驱动管理**:Java程序需要加载合适的JDBC驱动才能连接到MySQL数据库,这通常通过`Class....

    JDBC_Web.rar_dirtuol_jdbc web项目_web 数据库 jdbc_超市管理 系统_超市管理系统

    开发者通过这个项目可以了解到如何整合JDBC、Servlet、JSP和DAO模式来实现一个完整的业务系统,并掌握数据库管理和Web应用开发的基础知识。此外,对于数据库设计和管理也有一定的学习价值,包括表结构的设计、数据的...

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query ...通过这个实例,你现在已经具备了使用Hive JDBC的基础知识,可以进一步探索更高级的Hive和Java集成技术。

    jdbc_on_oracle

    它不仅涵盖了JDBC的基础知识,还深入讨论了Oracle数据库的特性和优化技术,帮助读者构建健壮、高效且安全的Java应用程序。通过学习本书,开发者可以充分利用Oracle JDBC的全部潜力,提升其在数据库操作方面的专业...

    JSP+JDBC.rar_jdbc jsp_jdbc jsp文档_jsp 初学_jsp 文档_jsp 源码

    **JSP+JDBC技术详解** JSP(JavaServer Pages)和...总的来说,"JSP+JDBC.rar"是一个很好的学习材料,它不仅提供了实践案例,还有配套的文档说明,对于初学者来说,能够通过实际操作来巩固理论知识,提升开发技能。

    day2_jdbc.zip_jdbc ut_jdbc util_jdbcUtil_jdbc封装

    下面我们将详细探讨JDBC的基础知识,以及`JdbcUtil`类的设计思想和实现方法。 首先,JDBC是Java平台上的一个标准API,它提供了一组接口和类,使得Java程序员能够通过标准的SQL语句与各种关系型数据库进行通信。JDBC...

    JDBC.rar_ado ODBC jdbc_jdbc

    **JDBC基础与应用** Java Database Connectivity(JDBC)是Java平台中用于访问数据库的标准Java API,它由一组接口和类组成,使得Java开发者能够连接、操作和查询各种类型的数据库系统。在“JDBC.rar_ado ODBC jdbc...

    JDBC.zip_jdbc_oracle_初学

    以上就是JDBC连接Oracle数据库的基础知识。虽然描述中提到这些内容可能“很low”,但对于初学者来说,掌握这些基础是非常重要的,它们构成了后续更高级数据库操作和开发的基础。通过不断实践和学习,你将能够熟练地...

    jdbc.zip_jdbc jsp_jsp jd

    JDBC的基础知识通常包括以下几个方面: 1. **JDBC驱动**:JDBC驱动是Java程序与数据库之间的桥梁,分为四种类型:Type 1(JDBC-ODBC桥接)、Type 2(部分Java实现)、Type 3(完全基于网络的中间件)和Type 4(纯...

    day01_jdbc_consumer_

    了解JDBC,首先需要掌握以下几个关键知识点: 1. **JDBC驱动**: JDBC驱动是Java程序与数据库之间的桥梁,根据类型分为四种:JDBC-ODBC桥接驱动、网络纯Java驱动、部分Java驱动和协议驱动。每种驱动有其特定的应用...

    java_jdbc_banking_project_jdbc_

    1. **JDBC API**:了解JDBC的基础,包括`java.sql.DriverManager`、`Connection`、`Statement`、`PreparedStatement`和`ResultSet`等接口和类。`DriverManager`用于注册和连接数据库,`Connection`代表数据库连接,`...

    JAVAJDBC.rar_JAVAJDBC_jdbc学生管理_校园卡 java_校园卡 管理 系统

    1. **Java JDBC基础** - **JDBC API**: 包含了`java.sql`包下的接口和类,如`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等,它们提供了与数据库通信的基本方法。 - **数据库连接**: `...

    JDBC基础知识1_保存大文本_分页_批处理

    标题“JDBC基础知识1_保存大文本_分页_批处理”揭示了本文将要讨论的是Java数据库连接(Java Database Connectivity, JDBC)的基础知识,主要包括如何在数据库中处理大文本数据、实现分页查询以及利用批处理提高...

    jdbc_html_javascript 资源

    学习JavaScript,你需要掌握变量、数据类型、控制流、函数、对象、原型链、闭包等基础知识,以及DOM(Document Object Model)操作和事件处理。随着ES6(ECMAScript 6)的发布,JavaScript引入了类、模块、箭头函数...

    java_JDBC.rar_jdbc

    总的来说,"java_JDBC.rar_jdbc"项目是一个实践Java与数据库交互的好例子,涵盖了JDBC的基础知识,包括加载驱动、建立连接、执行SQL和管理数据库资源等核心概念。通过深入研究该项目,开发者可以进一步提升自己在...

    JDBC.rar_MYSQL_MYSQL  数据类型_jdbc_jdbc mysql

    "JDBC.rar_MYSQL_MYSQL 数据类型_jdbc_jdbc mysql" 这个压缩包文件显然聚焦于JDBC与MySQL数据库之间的数据类型对应关系,这对于开发涉及数据库操作的Java应用是基础且关键的知识。 首先,我们需要理解JDBC是什么。...

    java-jdbc.rar_java tomcat jdbc_tomcat jdbc

    总结来说,这个压缩包内容可能涵盖了Java在Tomcat环境下利用JDBC与各种数据库进行交互的基础知识,包括连接池的配置、数据库连接的建立和释放,以及SQL语句的执行等。通过深入研究这个压缩包中的内容,开发者可以更...

    JDBC_MYSQL.rar_JDBC-MYSQL_java jdbc mysql_java sql 简单

    1. **JDBC基础**: - JDBC是Java中的一个API,它提供了多种方法来建立数据库连接,执行SQL语句,处理结果集等。 - JDBC驱动:连接MySQL需要对应的JDBC驱动,通常使用`mysql-connector-java.jar`,将其添加到项目类...

    sql_homework_servlet_JDBC.zip_JDBC增删改查_jdbc_jdbc学生管理

    这里,我们先了解一下Servlet和JDBC的基础知识,然后深入到学生管理的场景应用。 Servlet是Java语言中用于扩展Web服务器功能的一种技术,它允许开发者创建动态响应的Web应用。Servlet通过接收到HTTP请求,处理数据...

    Java_JDBC.rar_JDBC入门

    这个“Java_JDBC.rar_JDBC入门”资源包中的“Java数据库接口JDBC入门基础讲座.pdf”很可能是详细的教程,涵盖了上述所有知识点,而“www.pudn.com.txt”可能是提供额外链接或者资料来源的信息。通过阅读这些材料,...

Global site tag (gtag.js) - Google Analytics