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技术基础总结转载,非原创的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Java减少依赖_去掉JAVA部分依赖的
- 下一篇: java农耕者_蒯通——大才也,《史记》