韩顺平j2eeJDBC与MySQL学习笔记.docx

上传人:b****4 文档编号:6013114 上传时间:2023-05-09 格式:DOCX 页数:118 大小:1.83MB
下载 相关 举报
韩顺平j2eeJDBC与MySQL学习笔记.docx_第1页
第1页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第2页
第2页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第3页
第3页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第4页
第4页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第5页
第5页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第6页
第6页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第7页
第7页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第8页
第8页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第9页
第9页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第10页
第10页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第11页
第11页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第12页
第12页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第13页
第13页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第14页
第14页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第15页
第15页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第16页
第16页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第17页
第17页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第18页
第18页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第19页
第19页 / 共118页
韩顺平j2eeJDBC与MySQL学习笔记.docx_第20页
第20页 / 共118页
亲,该文档总共118页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

韩顺平j2eeJDBC与MySQL学习笔记.docx

《韩顺平j2eeJDBC与MySQL学习笔记.docx》由会员分享,可在线阅读,更多相关《韩顺平j2eeJDBC与MySQL学习笔记.docx(118页珍藏版)》请在冰点文库上搜索。

韩顺平j2eeJDBC与MySQL学习笔记.docx

韩顺平j2eeJDBC与MySQL学习笔记

jdbc详解+学生选课项目

jdbc简介

数据库驱动

sun公司为统一对数据库的操作,定义一套java操作数据库的规范(接口+类),称之为jdbc。

jdbc接口和类主要是放在java.sql包和javax.sql包。

JDBC全称为:

JavaDatabaseConnectivity(java数据库连接),它主要由接口组成。

组成JDBC的2个包:

java.sql和javax.sql

开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

做jdbc开发的几个前提

1、引包importjava.sql.*;importjavax.sql.*;

2、把数据库驱动包jar包导入到java项目中,使用不同的数据库时要使用对应数据库版本的驱动。

这些驱动可以到相应数据库提供商的官方网站下载。

第一个JDBC程序

编写一个程序,这个程序从user1表中读取数据,并打印在命令行窗口中。

一、搭建实验环境:

1、在oracle中创建一个库,并创建user1表和插入表的数据。

user1表结构如下:

idnumber主键自增长

namevarchar2(30)

passwdvarchar2(50)

emailvarchar2(100)

birthdaydate

agenumber(3)

oracle下先建序列

createsequenceuser1_seq

startwith1

incrementby1

minvalue1

nomaxvalue

nocache

nocycle;

建user1表

createtableuser1(

idnumberprimarykey,

namevarchar2(30),

passwdvarchar2(50),

emailvarchar2(100),

birthdaydate,

agenumber(3));

2、新建一个java工程,并导入数据驱动。

二、编写程序,在程序中加载数据库驱动

DriverManager.registerDriver(Driverdriver);

Class.forName("oracle.jdbc.driver.OracleDriver");

程序详解--DriverManager

Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个类的常用方法:

DriverManager.registerDriver(newOracleDriver())

注意:

在实际开发中,并不推荐采用这个方法注册驱动。

查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序加载两次,也就是在内存中会有两个Driver对象。

推荐方式:

Class.forName("oracle.jdbc.driver.OracleDriver");

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要import驱动的API,这样可使程序不依赖具体的驱动,使程序的灵活性更高。

DriverManager.getConnection(url,user,password),根据url获取数据库的链接。

三、建立连接(Connection)

Connectionconn=DriverManager.getConnection(url,user,pass);

数据库URL

URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

常用数据库URL地址的写法:

Oracle--jdbc:

oracle:

thin:

@localhost:

1521:

sid

Sqlserver--jdbc:

microsoft:

sqlserver:

//localhost:

1433;DatabaseName=sid

MySql--jdbc:

mysql:

//localhost:

3306/sid

程序详解--Connection接口

Jdbc程序中的Connection,它用于代表数据库的链接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的,这个对象的常用方法:

createStatement():

创建向数据库发送sql的statement对象。

prepareStatement(sql):

创建向数据库发送预编译sql的PrepareSatement对象。

prepareCall(sql):

创建执行存储过程的callableStatement对象。

setAutoCommit(booleanautoCommit):

设置事务是否自动提交。

commit():

在链接上提交事务。

rollback():

在链接上回滚事务。

System.out.println(接口引用的某个类实例);将输出该类的全名@十六机制的hash值,该方法常用于查看某个接口引用指向的真正对象实例的类型是什么!

Connection接口连接不同的数据库,返回的对象实例类型是不同的。

对Connection中的事务提交示例详解:

setAutoCommit,commit(),rollback()的使用

packagecom.oracle.jdbc.test;

importjava.sql.*;

publicclassTestJdbcAutoCommit{

//使用jdbc去操作oracle数据库--事务处理setAutoCommit

publicstaticvoidmain(String[]args){

Connectionct=null;

Statementstatement=null;

Stringurl="jdbc:

oracle:

thin:

@127.0.0.1:

1521:

orcl";

Stringusername="scott";

Stringpassword="tiger";

//1、加载驱动

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

//2、得到连接

ct=DriverManager.getConnection(url,username,password);

//把事务设为不自动提交

ct.setAutoCommit(false);

//3、创建sql对象(Statement/PreparedStatement/CallableStatement)

statement=ct.createStatement();

//4、通过statement向数据库发出sql指令

//需求:

对emp表进行操作,把SMITH的sal-10给KING的sal+10

statement.executeUpdate("updateempsetsal=sal-10whereename='SMITH'");

statement.executeUpdate("updateempsetsal=sal+10whereename='KING'");

//提交所有语句

mit();

}catch(Exceptione){

//如果事务中的sql语句中有任何错误则进行回滚操作。

try{

ct.rollback();

}catch(SQLExceptione1){

e1.printStackTrace();

}

e.printStackTrace();

}finally{

//关闭资源[先开后关,后开先关]

if(statement!

=null){

try{

statement.close();

}catch(SQLExceptione){

e.printStackTrace();

}

statement=null;

}

if(ct!

=null){

try{

ct.close();

}catch(SQLExceptione){

e.printStackTrace();

}

ct=null;

}

}

}

}

四、创建用于向数据库发送SQL的Statement对象,并发送SQL

Statementst=conn.createStatement();

ResultSetrs=st.excuteQuery(sql);

程序详解--ResultSet

Jdbc程序中的ResultSet用于代表sql语句的执行结果。

ResultSet封装执行结果时,采用类似于表格的方式。

ResultSet对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法。

获取任意类型的数据

getObject(intindex)

getObject(stringcolumnName)

获取指定类型的数据,如:

getString(intindex)

getString(StringcolumnName)

提问:

数据库中列的类型是varchar2,获取该列的数据调用什么方法?

int类型呢?

bigint类型呢?

boolean类型?

答:

获取varchar2类型的列数据,会调用getString方法。

常用数据类型转换表(oracle)

SQL类型

jdbc对应方法

返回类型

number

getBoolean()

boolean

number

getByte()

byte

number

getShort()

short

number

getInt()

int

number

getLong()

long

char,nvarchar2,varchar2

getString()

String

Text(clob)Blob

getClobgetBlob()

ClobBlob

DATE

getDate()

java.sql.Date

TIMESTAMP

getTimestamp()

java.sql.Timestamp

number

getFloat()

float

number

getDouble()

double

常用数据类型转换表(sqlserver)

编号

SQLServer数据库类型

JDBC类型

1

int

java.lang.Integer

2

varchar

java.lang.String

3

char

java.lang.String

4

nchar

java.lang.String

5

nvarchar

java.lang.String

6

text

java.lang.String

7

ntext

java.lang.String

8

tinyint

java.lang.Integer

9

int

java.lang.Integer

10

tinyint

java.lang.Integer

11

smallint

java.lang.Integer

12

bit

java.lang.Boolean

13

bigint

java.lang.Long

14

float

java.lang.Double

15

decimal

java.math.BigDecimal

16

money

java.math.BigDecimal

17

smallmoney

java.math.BigDecimal

18

numeric

java.math.BigDecimal

19

real

java.lang.Float

20

uniqueidentifier

java.lang.String

21

smalldatetime

java.sql.Timestamp

22

datetime

java.sql.Timestamp

23

timestamp

byte[]

24

binary

byte[]

25

varbinary

byte[]

26

image

byte[]

27

sql_variant

java.lang.String

常用数据类型转换表(MySql)

类型名称

显示长度

数据库类型

JAVA类型

VARCHAR

L+N

VARCHAR

java.lang.String

CHAR

N

CHAR

java.lang.String

BLOB

L+N

BLOB

java.lang.byte[]

TEXT

65535

VARCHAR

java.lang.String

INTEGER

4

INTEGERUNSIGNED

java.lang.Long

TINYINT

3

TINYINTUNSIGNED

java.lang.Integer

SMALLINT

5

SMALLINTUNSIGNED

java.lang.Integer

MEDIUMINT

8

MEDIUMINTUNSIGNED

java.lang.Integer

BIT

1

BIT

java.lang.Boolean

BIGINT

20

BIGINTUNSIGNED

java.math.BigInteger

FLOAT

4+8

FLOAT

java.lang.Float

DOUBLE

22

DOUBLE

java.lang.Double

DECIMAL

11

DECIMAL

java.math.BigDecimal

BOOLEAN

1

同TINYINT

ID

11

PK(INTEGERUNSIGNED)

java.lang.Long

DATE

10

DATE

java.sql.Date

TIME

8

TIME

java.sql.Time

DATETIME

19

DATETIME

java.sql.Timestamp

TIMESTAMP

19

TIMESTAMP

java.sql.Timestamp

YEAR

4

YEAR

java.sql.Date

五、从表结果集的ResultSet中取出数据,打印到命令行窗口

程序详解--ResultSet

ResultSet还提供了对结果集进行滚动的方法:

next():

移动到下一行

Previous():

移动到前一行

absolute(introw):

移动到指定行[row从1开始计算]

beforeFirst():

移动resultSet的最前面

afterLast():

移动到resultSet的最后面

ResultSet的说明:

在默认情况下,rs的结果集,只能向前移动,这样rs结果集只能使用一次,不能复用。

如果需要复用,则可以在ct.createStatement(ResultSet.滚动类型,ResultSet.并发类型);

ResultSet的可选项有:

resultSetType结果集类型有三种:

ResultSet.TYPE_FORWARD_ONLY只能向下移动

ResultSet.TYPE_SCROLL_INSENSITIVE可以滚动,只读

ResultSet.TYPE_SCROLL_SENSITIVE可以滚动,可更改

resultSetConcurrency并发类型有两种:

ResultSet.CONCUR_READ_ONLY只读并发

ResultSet.CONCUR_UPDATABLE可写并发

ResultSet的详细讲解示例代码:

packagecom.oracle.jdbc.test;

importjava.sql.*;

publicclassTestJdbcResultSet{

//使用jdbc去操作oracle数据库--ResultSet

publicstaticvoidmain(String[]args){

Connectionct=null;

Statementstatement=null;

ResultSetrs=null;

Stringurl="jdbc:

oracle:

thin:

@127.0.0.1:

1521:

orcl";

Stringusername="scott";

Stringpassword="tiger";

//1、加载驱动

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

//2、得到连接

ct=DriverManager.getConnection(url,username,password);

//3、创建sql对象(Statement/PreparedStatement/CallableStatement)

//假设我们希望rs结果,可以滚动(可以向前,亦可向后)和只读并发

statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

//4、通过statement向数据库发出sql查询指令,并将返回结果集给ResultSet

rs=statement.executeQuery("select*fromemp");

//5、取出结果集

while(rs.next()){

System.out.println("雇员编号:

"+rs.getInt

(1)+"姓名:

"+rs.getString("ename")+"职位:

"+rs.getObject("job"));

}

//如果我们希望,重新使用rs

rs.beforeFirst();

System.out.println("*****************************");

while(rs.next()){

System.out.println("雇员编号:

"+rs.getInt

(1)+"姓名:

"+rs.getString("ename")+"职位:

"+rs.getObject("job"));

}

}catch(Exceptione){

e.printStackTrace();

}finally{

//关闭资源[先开后关,后开先关]

if(rs!

=null){

try{

rs.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

rs=null;

}

if(statement!

=null){

try{

statement.close();

}catch(SQLExceptione){

e.printStackTrace();

}

statement=null;

}

if(ct!

=null){

try{

ct.close();

}catch(SQLExceptione){

e.printStackTrace();

}

ct=null;

}

}

}

}

六、断开与数据库的连接,并释放相关资源。

程序详解--释放资源

jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet,Statement和Connection对象

特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。

Connection的使用原则是尽量晚创建,尽量早的释放。

为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

操作USER1表的java源代码

packagecom.oracle.jdbc.test;

importjava.sql.*;

publicclassTestJdbc{

//使用jdbc去操作oracle数据库

publicstaticvoidmain(String[]args){

Connectionct=null;

Statementstatement=null;

Stringurl="jdbc:

oracle:

thin:

@127.0.0.1:

1521:

orcl";

Stringusername="scott";

Stringpassword="tiger";

//1、加载驱动

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

//2、得到连接

ct=DriverManager.getConnection(url,username,password);

//3、创建sql对象(Statement/PreparedStatement/CallableStatement)

//Statement可以用来查询和操作数据库,缺点有注入漏洞。

//PreparedStatement预处理sql对象,安全性和可用性较高。

具有set方法可以有效防止sql注入漏洞。

//CallableStatement用来调用存储过程

statement=ct.createStatement();

//4、通过statement向数据库发出sql指令

//executeQuery用来执行DQL语句,查询操作

//executeUpdate用来执行DML语句,增删改操作

intn=statement.executeUpdate("insertintouser1values(user1_seq.nextval,'alex','123','alex@',sysdate,16)");

//可以通过n来判断sql操作是否成功!

}catch(Exceptione){

e.printStackTrace();

}finally{

//关闭资源[先开后关,后开先关]

if(statement

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2