欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

stmt在java中的应用_JDBC技术基础总结转载,非原创

发布时间:2024/10/8 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 stmt在java中的应用_JDBC技术基础总结转载,非原创 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

JDBC的全称是Java DataBase

Connectivity,即Java数据库连接。它是一套行业标准的API,可以在Java应用程序中与关系型数据库建立连接,并执行相关操作,例如Oracle,DB2等主流数据库产品。

控制台,图形界面客户端与数据库交互的途径是执行SQL语句,Java程序也不例外。Java中访问数据库主要使用JDBC。JDBC是Java规定的访问数据库的标准API,目前主流的数据库都支持JDBC。本章使用的开发工具是MyEclipse5.5。

5.1.1

JDBC的概念

JDBC(Java数据基础连接,Java

Database

Connectivity)是标准的Java访问数据库的API。JDBC定义了数据库的连接,SQL语句的执行以及查询结果集的遍历等。JDBC把这些操作定义为接口,位于包java.sql下面。如java.sql.Connection,java.sql.Statement,java.sql.ResultSet等。各个数据库提供商在自己的JDBC驱动中实现了这些接口。

使用JDBC,可以针对不同的数据库产品使用同一套程序,而不需要编写不同的程序。JDBC的基本功能如下所示。

连接数据库

向数据库执行查询数据动作

向数据库执行更新数据动作

向数据库执行插入数据动作

向数据库执行删除数据动作

执行存储过程

JDBC支持数据库访问的两层和三层模型。两层模型是Java应用程序或Applet直接与数据库进行交互操作的模型。它需要JDBC驱动将SQL语句发送到数据库,然后将执行结果再返回给客户端应用程序。三层模型是在应用与数据库之间,有一个中间应用服务器。这个应用服务器是将程序解耦合,使得逻辑与数据分离。其具体过程,是使用JDBC驱动把命令发送给中间应用服务器,在此服务器中执行一定的逻辑操作,再将这些命令发送给数据库。数据库接收命令后,执行相关操作,将产生的结果返回给中间服务器,再通过中间服务器将数据发回给应用。

5.1.2

JDBC和数据库数据类型的转化

JDBC是使用Java技术来访问数据库数据的,数据库数据类型和Java的数据类型不同。所以使用JDBC技术时,需要Java与数据库的数据类型转化。Java与数据库的数据类型转化映射如表5.1所示。

表5.1

数据库数据类型和Java数据类型对照

SQL数据类型类型

Java数据类型

5.2

JDBC API

JDBC

API由两个部分组成,一个是核心的API,其类包路径为java.sql,这是J2SE的一部分。它具有可滚动的结果集,批量更新的实现类;二是扩展的API,其类包路径为javax.sql,这是J2EE的一部分。它具有访问JNDI资源,分布式事务等实现类。常用的标准类如下所示。

java.sql.DriverManager:完成驱动程序的装载和建立新的数据库连接。

java.sql.Connection:表示对某一指定数据库的连接。

java.sql.Statement:管理在一指定数据库连接上的SQL语句的执行。

java.sql.ResultSet:一个SQL语句的执行结果。

java.sql.Statement:接口,用作执行一条静态的SQL语句并接收产生的结果。

java.sql.PreparedStatement:继承了Statement接口,用于对预编译的SQL语句的执行。

java.sql.CallableStatement:继承了Statement接口,用于对一个数据库存储过程的执行。

java.sql.SQLException:处理数据库访问时的出错信息。

java.sql.SQLWarning:处理数据库访问时的警告信息。

java.sql.Statement:用作执行一条静态的SQL语句并接收产生的结果。

java.sql.Time:用于表示时、分、秒。

java.sql.Timestamp:扩展标准java.util.date类,用于表示SQL的时间戳,增加了一个以纳秒为单位的时间域。

java.sql.Types:定义区分SQL类型的常量。

java.sql.DatabaseMetaData:定义了JDBC元数据接口。

5.2.1

连接对象Connection

通过Connection连接对象可以获取Statement语句对象,或者PreparedStatement语句对象。通过语句对象就可以对数据库进行查询和更新操作。查询是读取数据动作,更新是包括增加、删除、修改数据的操作。Connection的类路径为java.sql.Connection。

Connection常用的方法有以下几种:

close():完成关闭连接。

 commit()

:完成提交。

 rollback()

:完成回滚。

createStatement():该方法返回Statement对象。

 prepareStatement(String

sql):参数sql是执行 SQL的语句 ,该方法返回PrepareStatement对象。

 setAutoCommit(Boolean

autoCommit):参数autoCommit表示是否自动提交,该方法用于设置自动提交。

5.2.2

Statement对象

执行操作数据库的过程是,通过Connection连接对象获取Statement对象,再通过Statement对象执行相关读取或更新操作。Statement对象有两种具体实现,他们分别为PreparedStatement和CallableStatement。PreparedStatement主要是用来预编译SQL语句,这个对象主要是为了提高程序效率;CallableStatement继承了PreparedStatement接口,用于存储过程。

Statement对象是通过Connection对象的createStatement()方法来创建的。对于不是频繁查询记录的应用而言,使用Statement对象是一个合适的做法,因为它不必像PreparedStatement对象一样,需要预编译。Statement对象的创建过程如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection

conn=DriverManager.getConnection(URL);

Statement st = conn.

createStatement();

有了Statement对象,就可以对数据库进行查询和更新操作。Statement的类路径为java.sql.Statement。它的常用方法如下:

close():完成关闭Statement。

 executeQuery(String

sql):参数sql表示查询SQL语句,该方法返回ResultSet对象。

 executeUpdate(String

sql):参数sq表示操作SQL语句,该方法返回更新的行数。

 execute(String

sql):参数sql表示操作SQL语句,该方法返回一个boolean值,表明是否返回了ResultSet对象。

 getResultSet()

:该方法ResultSet对象。

通常使用Statement的三个基本方法来执行SQL命令。下面分别介绍这三个方法。

1.

executeQuery()方法

主要是用来执行查询命令,返回一个ResultSet对象,代码如下所示:

String sql = “select *

from user”;

ResultSet rs = statement.

executeQuery(sql);

这个示例代码是查询user表的所有数据。

2.executeUpdate()方法

主要是用来执行增加,删除及修改记录操作,返回一个int整型值,此整型值是被更新的行数,代码如下所示:

String sql = “insert into

user(name,age,sex) values(‘Jack,25,’男)”;

int num = statement.

executeUpdate (sql);

这个示例代码是向user表中插入一行记录。

3.execute()方法

主要是用来执行一般的SQL命令,包括增删改查以及数据定义,返回一个布尔值,它显示了是否返回一个查询结果集ResultSet对象,查询user表的所有数据代码如下所示:

String sql = “select *

from user”;

boolean value =

statement. execute(sql);

5.2.3

PreparedStatement对象

除了普通的Statement之外,还有一种语句在实际应用中经常用到。这就是预编译的PreparedStatement。PreparedStatement继承了Statement接口,所谓预编译,就是在创建语句对象时,将SQL执行语句一起进行编译,然后写入缓存,只保留参数动态输入。这样在执行相同的数据库操作时,例如查询某条记录的信息,不必总是对查询SQL命令进行编译,而只是修改相应的参数,例如根据某个标识查询记录,就能获得查询结果,达到了提高效率的目的。

PreparedStatement对象是通过Connection对象的prepareStatement

()方法来创建的。prepareStatement()方法有一个参数,这个参数需要输入所要执行的SQL语句。该SQL语句可以保留一个或多个参数作为动态输入,如果需要有参数动态输入,则此SQL语句的参数位置需要用“?”代替。然后需要根据参数的序号位置,分别调用不同类型的set方法将参数值动态输入,示例代码如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection conn

=DriverManager.getConnection(URL);

String sql = “select *

from user where id = ?”;

PreparedStatement pstmt =

conn. prepareStatement (sql);

pstmt.setString(1,”x001”);

ResultSet rs = pst.

executeQuery();

这个示例代码主要是实现根据用户标识从user表中查询相关记录数据。示例中,首先通过connection对象创建一个PreparedStatement对象,初始化时将用户标识id作为动态输入参数,之后使用setString方法输入参数。如果需要查询不同的用户,则只要修改用户标识id,而不需要重新编译一个SQL命令,代码如下所示:

String sql = “select *

from user where id = ?”;

PreparedStatement pstmt =

connection. prepareStatement (sql);

pstmt.setString(1,”x007”);

因为用户标识id是字符串类型,所以在设置输入参数时需要选择setString方法,同理针对不同的参数类型,例如int类型用setInt方法。setString方法的第一个参数代表的是参数的序号位置,当有多个参数时,通过序号位置分别将参数嵌入其中,第二个参数是具体的参数值,当多个参数情况时,代码如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

Connection

conn=DriverManager.getConnection(URL);

String sql = “select *

from user where name = ? and age < ? and sex =

?”;

PreparedStatement pstmt =

connection. prepareStatement (sql);

pstmt.setString(1,”Jack”);//设置第一个参数

pstmt.setInt(2,”20”);//设置第二个参数

pstmt.setString(3,”男”);//设置第三个参数

ResultSet rs = pstmt.

executeQuery();//获得结果集

PreparedStatement的常用方法如下:

close():该方法完成关闭Statement。

executeQuery():该方法输出ResultSet对象。

executeUpdate():该方法输出数据更新的行数。

 execute()

:该方法输出boolean值,表明是否返回了ResultSet对象。

 setBoolean(int

paramIndex, boolean

x):参数paramIndex表示所传递的参数序号,参数x表示传递的是布尔类型参数值。

 setByte(int paramIndex,

byte

x):参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个字节型参数值。

 setShort(int

paramIndex, short

x):参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个短整型参数值。

 setInt(int paramIndex,

int x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个整型参数值。

 setLong(int paramIndex,

long x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个长整型参数值。

 setFloat(int

paramIndex, float x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个浮点型参数值。

 setDouble(int

paramIndex, double x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个双精度型参数值。

 setBytes(int

paramIndex, byte[] x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个字节数字参数值。

 setDate(int paramIndex,

java.sql.Date x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个日期类型参数值。

 setTime(int paramIndex,

java.sql.Time x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的是一个时间参数值。

 setObject(int

paramIndex, Object x)

:参数paramIndex表示所传递的参数序号,参数x表示该方法传递的参数值是一个对象。

5.2.4

结果集ResultSet

java.sql.ResultSet接口封装了这个结果集对象。其中的每条记录结果代表了一个数据库行。通常可以通过一个Statement对象,或PreparedStatement对象及一些其他子接口对象的executeQuery()方法,获得结果集对象。通过Statement对象的execute()方法,执行一个SQL查询命令,也可以获得一个结果集对象,但不是直接获取。它首先通过execute()方法返回的布尔值,判断是否返回一个结果集对象,然后通过getResultSet()方法获取一个ResultSet对象。在有些场合,需要同时返回多个结果集对象,这是就需要通过Statement对象的getMoreResults()方法来实现对结果集集合的遍历。

在JDBC1.0中,结果集只能单向的滚动,即调用ResultSet的next()方法,使游标向后一行记录滚动。所谓滚动,指的是游标在记录行中的定位。在JDBC2.0中,扩展了上述滚动功能。使得滚动方式更加的灵活和可操控,例如JDBC2.0增加了前滚,即游标向当前记录的前一行滚动,及向某一指定的记录行跳转等。

JDBC2.0中,设置结果集的滚动模式是在Connection对象中创建Statement对象(或PreparedStatement对象)时完成的。默认状态下,滚动模式就是传统的单向向后的滚动。如果以这种模式,生成结果集后,实现前滚或指向特定行等新增的滚动时,将会抛出异常。

设置滚动模式的方法如下所示。

public Statement

createStatement(int resultSetType, int resultSetConcurrency) throws

SQLException

该方法创建一个Statement对象,同时设置返回结果集的模式。

或者获取PreparedStatement语句对象,语法格式如下所示。

public PreparedStatement

prepareStatement(String sql, int resultSetType, int

resultSetConcurrency)

throws

SQLException

该方法创建一个PreparedStatement对象,同时设置返回结果集的模式。

5.3

JDBC操作数据库

数据库程序常被称为CURD程序,因为它包括数据的创建Create、更新Update、读取查询Read、删除Delete等逻辑操作,取首字母缩写便是CURD。CURD概括了数据库的程序结构,程序无论大小,归根结底都是这四种操作。这一节中将介绍利用JDBC技术实现对数据库表的CURD操作。从建表开始,到表对应的实体类,然后是添加、查询、修改和删除

5.3.1

实现JDBC连接MySQL数据库

在执行操作数据库程序前,首先需要通过JDBC驱动建立与数据库的连接。连接数据源有两种方式,一是通过DriveManager类,一是通过DataSource接口及JNDI资源来获取连接。本章主要介绍通过DriveManager类来连接数据库。

DriveManager的类路径为java.sql.DriverManager。它主要是完成驱动程序的装载和建立新的数据库连接。java.sql.DriverManager的常用方法如下:

 getConnection (String

URL):参数URL表示数据库连接地址,该方法输出Connection对象。

 getConnection(String

URL,String username, String

password):参数URL表示数据库连接地址,参数username表示登录数据库用户名,参数password表示登录数据库用户口令。该方法输出Connection对象。

建立数据库连接,首先要加载数据库驱动。针对不同的数据库产品,有不同的数据库驱动。要加载驱动,首先要获取类包。本章的数据库采用的是MySQL数据库。需要的驱动包为mysql-connector-java-3.1.12-bin.jar,数据库驱动类路径为“com.mysql.jdbc.Driver”。

加载过程是使用Class.forName()方法将驱动加载到运行环境之中。加载的时候,驱动会自动向DriverManager完成注册。加载驱动的代码如下所示:

String driverName =

"com.mysql.jdbc.Driver"

try{

Class.forName(driverName);

}catch(Exception

e){

e.printStackTrace();

}

接着需要定义URL,即统一资源定位符

(Uniform Resource Locator),这个URL是指向数据源的。JDBC

URL的语法格式如下所示:

jdbc://

这一行代码中,jdbc为指定协议。为数据库连接机制的驱动。为数据库地址。

以MySQL数据库为例,数据库连接地址URL代码如下所示:

String URL =

"jdbc:mysql://localhost:3306/bank?username=root&password=root"

这个URL显示连接数据库地址为“localhost:3306”,数据库名为“bank”,连接数据库用户为“root”及密码为“root”。

有了驱动和连接地址后,需要使用DriveManager来获取连接。代码如下所示:

Connection

connection=DriverManager.getConnection(URL);

也可以使用另一种方法,代码如下所示:

String URL =

"jdbc:mysql://localhost:3306/test ";

String username =

"root";

String password =

"root";

Connection

connection=DriverManager.getConnection(URL,username,password);

综合上面的内容,可以得到获取一个数据库连接的大致过程。连接数据库需要数据库驱动和数据库连接地址,以及数据库的用户名和密码。

现在来编写一个数据库连接的类。在MyEclipse中新建一个Web工程,选择JavaEE5.0规范,工程名为jdbc。把JDBC驱动mysql-connector-java-5.0.5-bin.jar拷贝到WebRoot/WEB-INF/lib目录下。在该工程的src目录下新建一个包,包名为con.cn.jdbc。在包中新建一个Java类,类名为JDBC_Connection,在类中编写如下代码(这里省略了import内容,源代码见光盘第5章\5-3):

package

com.cn.jdbc;

public class

JDBC_Connection {

static String drivername

="com.mysql.jdbc.Driver";

static String

url="jdbc:mysql://localhost:3306/bank";

static String

username="root";

static String

password="root";

static{

try {

Class.forName(drivername);//创建驱动

System.out.println("创建驱动成功!");

} catch

(ClassNotFoundException e) {

e.printStackTrace();

}

}

public static Connection

getConnection(){

Connection conn =

null;

try {

conn = (Connection)

DriverManager.getConnection(url, username,

password);

System.out.println("连接数据库成功!");

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}

return

conn;

}

public static void

main(String[] args) {

JDBC_Connection.getConnection();

}

}

在MyEclipse中运行该类,在控制台中打印如下信息:

创建驱动成功!

连接数据库成功!

这说明数据库连接已经成功了。

在连接数据库的类中,一般还要写一个关闭连接的方法,每一次操作完成以后都要关闭连接。如果诗句访问量很大的话,不关闭连接会影响数据库的效率和性能,关闭连接方法的写法如下:

public static void

free(ResultSet rs,Connection conn ,Statement

stmt){

try {

if(rs

!=null)

rs.close();//关闭结果集

} catch (SQLException e)

{

System.out.println("关闭ResultSet失败!");

e.printStackTrace();

}finally

{

try {

if(conn !=

null)

conn.close();//关闭连接

} catch (SQLException e)

{

System.out.println("关闭Connection失败!");

e.printStackTrace();

}finally{

try {

if(stmt !=

null)

stmt.close();//关闭Statement对象

} catch (SQLException e)

{

System.out.println("关闭Statement失败!");

e.printStackTrace();

}

}

}

}

5.3.2

使用JDBC往数据库表插入数据

Java程序也可以执行INSERT语句往数据库插入数据,方法仍然是使用Statement对象,也可以是PreparedStatement对象,执行INSERT语句是要使用executeUpdate(String

sql)方法。executeUpdate()方法用以执行INSERT,UPDATE,DELETE等等,返回数据库中影响的行数,返回int类型。

在往数据库表格中插入数据时,首先数据库中要存在表,还需要用到数据库表对应的实体类。在MySQL中创建一张表,SQL语句如下(源代码见光盘第5章\5-3)::

CREATE TABLE users

(

id

int(11) NOT NULL,

name

varchar(20) DEFAULT NULL,

age

int(11) DEFAULT NULL,

tel

varchar(20) DEFAULT NULL,

address varchar(50) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT

CHARSET=gb2312;

每一张表格要对应一个实体类,实体类中的属性对应着表格的字段名,同时,数据类型转化要正确。表格对应的实体类代码如下(源代码见光盘第5章\5-3)::

package

com.cn.jdbc;

public class UserVo

{

private int

id;

private String

name;

private int

age;

private String

tel;

private String

address;

public String

getAddress() {

return

address;

}

public void

setAddress(String address) {

this.address =

address;

}

public int getAge()

{

return

age;

}

public void setAge(int

age) {

this.age =

age;

}

public int getId()

{

return

id;

}

public void setId(int id)

{

this.id =

id;

}

public String getName()

{

return

name;

}

public void

setName(String name) {

this.name =

name;

}

public String getTel()

{

return

tel;

}

public void setTel(String

tel) {

this.tel =

tel;

}

}

把使用JDBC技术把数据插入到表格中,首先需要连接数据库,然后执行插入的SQL语句,往数据库表中插入数据的代码如下(这里省略了import内容,源代码见光盘第5章\5-3):

package

com.cn.jdbc;

public class AddUser

{

public void add(UserVo

userVo){

Connection conn =

null;

PreparedStatement pstm =

null;

ResultSet rs =

null;

try {

//调用JDBC_Connection类的getConnection方法连接数据库

conn =

JDBC_Connection.getConnection();

//添加数据的sql语句

String sql = "insert into

users(id,name,age,tel,address)

values(?,?,?,?,?)";

pstm =

conn.prepareStatement(sql);

pstm.setInt(1,

userVo.getId());//把添加的id值存入pstm对象中,int类型的值用setInt()方法

//把添加的name值存入pstm对象中String类型的值用setString方法

pstm.setString(2,userVo.getName());

pstm.setInt(3,userVo.getAge());//把添加的age值存入pstm对象中

pstm.setString(4,

userVo.getTel());//把添加的tel值存入pstm对象中

pstm.setString(5,

userVo.getAddress());//把添加的address值存入pstm对象中

pstm.executeUpdate();//提交pstm对象

System.out.println("添加成功!添加的内容如下:");

System.out.println("id:"+userVo.getId()+"\t

name:"+userVo.getName()

+"\t

age:"+userVo.getAge()+"\t tel:"+userVo.getTel()+

"\t

address:"+userVo.getAddress());

} catch (Exception e)

{

e.printStackTrace();

} finally

{

JDBC_Connection.free(rs,

conn, pstm);

}

}

public static void

main(String[] args) {

AddUser addUser = new

AddUser();

UserVo userVo = new

UserVo();

int id

=207;

String

name="赵六";

int age=22

;

String

tel="324242";

String address =

"北京海淀区";

//下面是设置要添加的变量值,放入UserVo对象中

userVo.setId(id);

userVo.setName(name);

userVo.setAge(age);

userVo.setTel(tel);

userVo.setAddress(address);

//调用add()方法,把UserVo对象作为参数传递

addUser.add(userVo);

}

}

在MyEclipse中运行上述代码,控制台打印的信息如下:

创建驱动成功!

连接数据库成功!

添加成功!添加的内容如下:

id:207 name:赵六 age:22

tel:324242 address:北京海淀区

5.3.3

使用JDBC查询数据库表数据

查询用到select语句,当使用JDBC技术查询表中的全部内容时,需要使用查询全部的SQL语句,把查询结果放到List集合中。代码如下(这里省略了import内容,源代码见光盘第5章\5-3):

package

com.cn.jdbc;

public class Query

{

public

List

showUser(){

Connection conn =

null;

Statement stmt =

null;

ResultSet rs =

null;

List

list = new

ArrayList();//声明一个List集合,用于存放查询出的数据

try {

conn =

JDBC_Connection.getConnection();//连接数据库

stmt =

conn.createStatement();//建立Statement对象

rs =

stmt.executeQuery("select * from users");

while(rs.next()){//结果集存在,则进行循环遍历

UserVo userVo = new

UserVo();

userVo.setId(rs.getInt("id"));

userVo.setName(rs.getString("name"));

userVo.setAge(rs.getInt("age"));

userVo.setTel(rs.getString("tel"));

userVo.setAddress(rs.getString("address"));

list.add(userVo);//把每次获得的对象数据放入list集合中

}

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(rs,

conn, stmt);//关闭连接

}

return

list;

}

public static void

main(String[] args) {

Query query = new

Query();

List

list=query.showUser();//调用查询方法

//如果list集合不为空,则循环遍历打印出所有的信息

if(list!=null){

System.out.print("id

");

System.out.print("name

");

System.out.print("age

");

System.out.print("tel

");

System.out.print("address

");

System.out.println();

for (int i = 0; i

< list.size(); i++) {

System.out.print(list.get(i).getId()+"\t");

System.out.print(list.get(i).getName()+"\t");

System.out.print(list.get(i).getAge()+"\t");

System.out.print(list.get(i).getTel()+"\t\t");

System.out.print(list.get(i).getAddress()+"\t");

System.out.println();

}

}

}

}

上述代码中,调用JDBC_Connection的getConnection()方法来连接数据库,然后执行查询全部的SQL语句,在MyEclipse中运行上述代码,在控制台中打印出如下信息:

创建驱动成功!

连接数据库成功!

id  name  age  tel

address

2  战三

22

456124456 中国

4  李四

22

456124456 中国北京

107  Jack  19

123-465465 银河系

207  赵六

22  324242 北京海淀区

234  为其

23

235346 谁都

867  儿童

4  45655  地方

2345

阿凡达  21  2342  阿达的

3454  赵六  22  256465 阿萨德

5.3.4

使用JDBC查询指定条件的数据

在实际开发中,有时候会需要根据指定条件来查询出相关数据,根据指定条件来查询数据,使用select语句中的条件查询,需要用到where子语句。下面的代码是根据id查询的例子(这里省略了import内容,源代码见光盘第5章\5-3)。

package

com.cn.jdbc;

public class QueryById

{

public UserVo

queryUserById(int id) {

UserVo userVo =

null;

Connection conn =

null;

PreparedStatement pstmt =

null;

ResultSet rs =

null;

try {

conn =

JDBC_Connection.getConnection();

pstmt =

conn.prepareStatement("select * from users where id =

?");

pstmt.setInt(1,

id);//设置条件id

rs

=pstmt.executeQuery();

while(rs.next()){//结果集存在,则遍历结果,放入UserVo对象中

userVo = new

UserVo();

userVo.setId(rs.getInt("id"));

userVo.setName(rs.getString("name"));

userVo.setAge(rs.getInt("age"));

userVo.setTel(rs.getString("tel"));

userVo.setAddress(rs.getString("address"));

}

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(rs,

conn, pstmt);//关闭连接

}

return

userVo;

}

public static void

main(String[] args) {

QueryById byId = new

QueryById();

int id

=207;

UserVo

vo=byId.queryUserById(id);

if(vo!=null){

System.out.print("id\t

");

System.out.print("name\t

");

System.out.print("age\t");

System.out.print("tel\t");

System.out.print("

address");

System.out.println();

System.out.print(vo.getId()+"\t");

System.out.print(vo.getName()+"\t");

System.out.print(vo.getAge()+"\t");

System.out.print(vo.getTel()+"\t");

System.out.print(vo.getAddress()+"\t");

System.out.println();

}else{

System.out.println("id为"+id+"的用户不存在!");

}

}

}

上述代码中,调用JDBC_Connection的getConnection()方法来连接数据库,传递一个id值为207的参数给条件查询的SQL语句。在MyEclipse中运行上述代码,在控制台中打印效果如下:

创建驱动成功!

连接数据库成功!

id name age tel

address

207 赵六 22 324242 北京海淀区

5.3.5

使用JDBC删除表数据

删除数据使用Statement的executeUpdate(String

sql)方法执行DELETE语句。与INSERT不同的是,DELETE必须使用WHERE条件指定删除哪一行数据,否则将删除所有数据。对于有主键的表来说,可以使用主键来标识哪一行数据,因为主键值是唯一的,不可重复的。根据id删除的方法如下(这里省略了import内容,源代码见光盘第5章\5-3):

package

com.cn.jdbc;

public class DeleteUser

{

public void

deleteUser(int id) {

Connection conn =

null;

PreparedStatement pstmt =

null;

try {

conn

=JDBC_Connection.getConnection();

String sql = "delete from

users where id =?";

pstmt =

conn.prepareStatement(sql);

pstmt.setInt(1,

id);//给sql语句里的id赋值

pstmt.executeUpdate();

System.out.println("删除成功!删除了id值为"+id+"的数据");

} catch (SQLException e)

{

// TODO Auto-generated

catch block

e.printStackTrace();

}finally{

JDBC_Connection.free(null,

conn, pstmt);//关闭连接

}

}

public static void

main(String[] args) {

DeleteUser deleteUser =

new DeleteUser();

int id =

1;

UserVo userVo = new

UserVo();

QueryById queryById = new

QueryById();

userVo =

queryById.queryUserById(id);//调用根据id查询的方法查询出id=2的数据

if (userVo != null)

{//如果查询出的数据不为空,则执行删除方法

deleteUser.deleteUser(id);

}else

{

System.out.println("删除失败!原因:id为"+id+"的数据不存在!");//数据为空则打印删除失败信息

}

}

总结

以上是生活随笔为你收集整理的stmt在java中的应用_JDBC技术基础总结转载,非原创的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。