java核心技术之JDBC (一)

JDBC

1.什么是JDBC

JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以

用它来操作关系型数据库。JDBC接口及相关类在java.sql包和javax.sql包里。我们

可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。

JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加

简单

2.jdbc使用过程

  • 1.     注册驱动 (Driver)
  • 2.     建立连接(创建Connection)
  • 3.     创建执行sql语句(通常是创建Statement或者其子类)
  • 4.     执行语句
  • 5.     处理执行结果(在非查询语句中,该步骤是可以省略的)
  • 6.     释放相关资源

package com. db.jdbc ;

import java. sql.Connection ;

import java. sql.DriverManager ;

import java. sql.ResultSet ;

import java. sql.SQLException ;

import java. sql.Statement ;

import org. junit.Test ;

public class jdbcTest {

final String url = "jdbc:mysql://localhost:3306/test" ;

final String user = "root";

final String password = "";

ResultSet rs = null;

Statement st = null;

Connection connection = null;

@Test

public void test_jdbc(){

try {

Class .forName( "com.mysql.jdbc.Driver");//加载驱动

connection = DriverManager.getConnection( url, user, password);//获取链接

st = connection. createStatement();//创建执行

rs = st. executeQuery("select
* from test");//执行

while( rs.next ()){//处理结果

System .out. println(rs .getString( "name"));

}

catch (Exception e) {

e .printStackTrace();

}finally {

try {

if( rs!=null){

rs.close ();

}

if( st!=null){

st.close ();

}

if( connection!=null){

connection.close ();

}

catch (SQLException e) {

// TODO Auto-generated
catch block

e .printStackTrace();

}

}

}

}

3.注册驱动的方式

  • Class.forName("com.mysql.jdbc.Driver");
  • System.setProperty("jdbc.drivers",
    "com.mysql.jdbc.Driver");
  • DriverManager .registerDriver(new Driver());

测试代码:

@Test

public void test_register_Driver(){

try {

//            Class.forName("com.mysql.jdbc.Driver");

//            System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

DriverManager .registerDrivernew Driver());

Connection connection = DriverManager.getConnection( url, user, password);

Assert .assertEqualsfalse, connection.isClosed());

catch (Exception e) {

e .printStackTrace();

}

}

这三个注册驱动的方式有什么不同喃?

4.statement

一个statement 只能维护一个resultSet

为什么喃?

我是这样理解的,一个连接可以通过不同的操作来获取不同的结果,每一个不同的结果都有不同的statement来装,而一个statement对象对应着一个resultset结果,如果一个statement装着不同的结果,那我们以哪个为准喃?所以一个statement
只能维护一个resultSet


@Test

public void test_statement() throws Exception{

Class .forName( "com.mysql.jdbc.Driver");

Connection connection = DriverManager.getConnection( url, user, password);

Statement st = connection.createStatement ();

ResultSet rs = st.executeQuery ("select
* from test");

while( rs.next ()){

rs .close();

}

ResultSet rs1 = st.executeQuery ("select
* from test");

while( rs1.next ()){

}

}

结果:报错

5.Statement和PrparedStatement的区别?


看看statement和 PrparedStatement执行同样的查询

@Test

public void test_statement() throws Exception{

Class .forName( "com.mysql.jdbc.Driver");

Connection connection = DriverManager.getConnection( url, user, password);

Statement st = connection.createStatement ();

String id = "1";

ResultSet rs = st.executeQuery ("select
* from test where id="+id );

while( rs.next ()){

System .out. println(rs .getString( "name"));

}

}

结果:OK

@Test

public void test_prestatement() throws Exception{

Class .forName( "com.mysql.jdbc.Driver");

Connection connection = DriverManager.getConnection( url, user, password);

PreparedStatement ps = connection.prepareStatement( "select
* from test where id=?");

ps .setString( 1, "1");

ResultSet rs = ps.executeQuery ();

while( rs.next ()){

System .out. println(rs .getString( "name"));

}

}

结果:OK

结果都是OK,到底有什么区别喃?

如果我们把id的值赋值为“or 1 or ”,上面查出来的就是全部。。

这个就是我们经常说sql注入攻击

第二个区别就是:preparedStetement 可以预编译语句,可以缓存起来,提高查询速度

下次继续写JDBC的事物,数据库隔离级别,存储过程,还有就是回答上面的那个问题,三个注入有什么区别?

时间: 2024-10-13 12:44:35

java核心技术之JDBC (一)的相关文章

java核心技术-(总结自杨晓峰-java核心技术36讲)

1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk的区别,jre包含了jvm和java类库:jdk除了jvm和java类库,还包含了一些java工具集 常见的垃圾收集器有: Serial GC:串行收集,垃圾回收时会阻塞工作线程 Parallel GC:并行收集,多线程收集,停顿时间短,吞吐量高 CMS:使用标记清除算法,多线程进行垃圾收集 G1:

《Java核心技术 卷II 高级特性 原书第10版》高清pdf

<Java核心技术 卷II 高级特性 原书第10版> 本书是Java领域有影响力和价值的著作之一,由拥有20多年教学与研究经验的Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年全球畅销不衰,广受好评.第10版根据JavaSE8全面更新,同时修正了第9版中的不足,系统全面讲解了Java语言的核心概念.语法.重要特性和开发方法,包含大量案例,实践性强. ? 百度网盘链接: https://pan.baidu.com/s/1aZ9KUgxwHNQJMH6X7h

完整java开发中JDBC连接数据库代码和步骤

完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(Class

理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处(转)

在描述JNDI,例如获得数据源时,JNDI地址有两种写法,例如同是  jdbc/testDS 数据源: A:java:comp/env/jdbc/testDS B:jdbc/testDS   这两种写法,配置的方式也不尽相同,第一种方法应该算是一种利于程序移植或迁移的方法,它的实现与“映射”的概念相同,而B方法,则是一个硬引用. java:comp/env 是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来J

《Java核心技术 卷1 基础知识 原书第9版》pdf

下载地址:网盘下载 内容简介 编辑 CayS.Horstmann等编著,公飞编译的<Java核心技术>(CoreJava)自第1版出版以来,一直备受广大Java程序设计人员的青睐,畅销不衰,是Java经典书籍.第8版针对JavaSE6平台进行了全面更新,囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识.面向对象程序设计.接口与内部类.事件监听器模型.swing图形用户界面程序设计.打包应用程序.异常处理.登

java核心技术学习笔记之一程序设计概述

Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向对象的语言: 网络技能:Socket,FTP,Http,URL编程简单: 健壮性:避免指针错误使用: 安全性:构建防病毒防篡改系统: 体系结构中立:字节码: 可移植性: 解释性:可以解释任何移植了的字节码: 高性能: 多线程 动态性: 二.   Internet 和 Java Applet 在网页中

Java核心技术-4-对象与类

4 对象与类 4.1 面向对象程序设计概述 1 类 封装(数据隐藏):将数据和行为组合在一个包中,并对对象使用者隐藏数据的实现方式. 对象中的数据成为实例域,操纵数据的过程称为方法. 2 对象 对象的三个主要特性:对象的行为behavior,对象的状态state,对象标识identity.3 识别类 4 类之间的关系 依赖uses-a,一个类的方法操纵另一个类的对象 聚合has-a,一个类的对象(其数据域)包含另一个类的对象 继承is-a,类A扩展类B. 4.2 使用预定义类 1 对象与对象变量

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

java中使用jdbc链接数据库

jdbc:java是通过jdbc技术实现对各种数据库的访问的,换句话说,jdbc是java应用程序与各种数据库之间进行对话的媒介 工具/原料 jdbc架包 方法/步骤 1.引用各种语言包:import java.sql.*;//这里面包含了Connection/DriverManager/Statement/ResultSet等各种包 2.加载jdbc驱动:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//里