- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解Java的JDBC中Statement与PreparedStatement对象由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
一旦获得一个连接,我们可以与数据库进行交互。在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据.
它们还定义方法,帮助Java和数据库使用SQL数据类型之间转换数据的差异.
下表提供了每个接口的用途概要,了解决定使用哪个接口 。
Statement 对象
创建Statement对象 在可以使用Statement对象执行SQL语句,需要使用Connection对象的createStatement( )方法创建一个,如下面的示例所示:
1
2
3
4
5
6
7
8
9
10
11
|
Statement stmt =
null
;
try
{
stmt = conn.createStatement( );
. . .
}
catch
(SQLException e) {
. . .
}
finally
{
. . .
}
|
一旦创建了一个Statement对象,然后可以用它来与它的三个执行方法之一执行SQL语句.
boolean execute(String SQL) : 如果ResultSet对象可以被检索返回布尔值true,否则返回false。使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL.
int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行的数目。使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELETE语句.
ResultSet executeQuery(String SQL) : 返回ResultSet对象。当希望得到一个结果集使用此方法,就像使用一个SELECT语句.
关闭 Statement 对象: 正如关闭一个Connection对象来保存数据库资源,出于同样的原因,也应该关闭Statement对象.
close()方法简单的调用将完成这项工作。如果关闭了Connection对象首先它会关闭Statement对象也是如此。然而,应该始终明确关闭Statement对象,以确保正确的清除.
1
2
3
4
5
6
7
8
9
10
11
|
Statement stmt =
null
;
try
{
stmt = conn.createStatement( );
. . .
}
catch
(SQLException e) {
. . .
}
finally
{
stmt.close();
}
|
PreparedStatement 对象 PreparedStatement接口扩展了Statement接口,让过一个通用的Statement对象增加几个高级功能.
statement 提供动态参数的灵活性.
创建PreparedStatement 对象
1
2
3
4
5
6
7
8
9
10
11
12
|
PreparedStatement pstmt =
null
;
try
{
String SQL =
"Update Employees SET age = ? WHERE id = ?"
;
pstmt = conn.prepareStatement(SQL);
. . .
}
catch
(SQLException e) {
. . .
}
finally
{
. . .
}
|
在JDBC中所有的参数都被代表?符号,这是已知的参数标记。在执行SQL语句之前,必须提供值的每一个参数.
setXXX()方法将值绑定到参数,其中XXX表示希望绑定到输入参数值的Java数据类型。如果忘了提供值,将收到一个SQLException.
每个参数标记是由它的序号位置引用。第一标记表示位置1,下一个位置为2 等等。这种方法不同于Java数组索引,以0开始.
所有的Statement对象的方法来与数据库交互(a) execute(), (b) executeQuery(), 及(c) executeUpdate() 也与PreparedStatement对象的工作。然而,该方法被修改为使用SQL语句,可以利用输入的参数.
关闭PreparedStatement对象: 正如关闭Statement对象,出于同样的原因,也应该关闭的PreparedStatement对象.
close()方法简单的调用将完成这项工作。如果关闭了Connection对象首先它会关闭PreparedStatement对象。然而,应该始终明确关闭PreparedStatement对象,以确保正确的清除.
1
2
3
4
5
6
7
8
9
10
11
12
|
PreparedStatement pstmt =
null
;
try
{
String SQL =
"Update Employees SET age = ? WHERE id = ?"
;
pstmt = conn.prepareStatement(SQL);
. . .
}
catch
(SQLException e) {
. . .
}
finally
{
pstmt.close();
}
|
PreparedStatement实例 以下是这使得使用PreparedStatement以及打开和关闭statments的例子: 复制下面的例子中JDBCExample.java,编译并运行,如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
//STEP 1. Import required packages
import
java.sql.*;
public
class
JDBCExample {
// JDBC driver name and database URL
static
final
String JDBC_DRIVER =
"com.mysql.jdbc.Driver"
;
static
final
String DB_URL =
"jdbc:mysql://localhost/EMP"
;
// Database credentials
static
final
String USER =
"username"
;
static
final
String PASS =
"password"
;
public
static
void
main(String[] args) {
Connection conn =
null
;
PreparedStatement stmt =
null
;
try
{
//STEP 2: Register JDBC driver
Class.forName(
"com.mysql.jdbc.Driver"
);
//STEP 3: Open a connection
System.out.println(
"Connecting to database..."
);
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println(
"Creating statement..."
);
String sql =
"UPDATE Employees set age=? WHERE id=?"
;
stmt = conn.prepareStatement(sql);
//Bind values into the parameters.
stmt.setInt(
1
,
35
);
// This would set age
stmt.setInt(
2
,
102
);
// This would set ID
// Let us update age of the record with ID = 102;
int
rows = stmt.executeUpdate();
System.out.println(
"Rows impacted : "
+ rows );
// Let us select all the records and display them.
sql =
"SELECT id, first, last, age FROM Employees"
;
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while
(rs.next()){
//Retrieve by column name
int
id = rs.getInt(
"id"
);
int
age = rs.getInt(
"age"
);
String first = rs.getString(
"first"
);
String last = rs.getString(
"last"
);
//Display values
System.out.print(
"ID: "
+ id);
System.out.print(
", Age: "
+ age);
System.out.print(
", First: "
+ first);
System.out.println(
", Last: "
+ last);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}
catch
(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}
catch
(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}
finally
{
//finally block used to close resources
try
{
if
(stmt!=
null
)
stmt.close();
}
catch
(SQLException se2){
}
// nothing we can do
try
{
if
(conn!=
null
)
conn.close();
}
catch
(SQLException se){
se.printStackTrace();
}
//end finally try
}
//end try
System.out.println(
"Goodbye!"
);
}
//end main
}
//end JDBCExample
|
现在来编译上面的例子如下:
1
|
C:>javac JDBCExample.java
|
当运行JDBCExample,它会产生以下结果:
1
|
C:>java JDBCExample
|
1
2
3
4
5
6
7
8
|
Connecting to database...
Creating statement...
Rows impacted : 1
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 35, First: Zaid, Last: Khan
ID: 103, Age: 30, First: Sumit, Last: Mittal
Goodbye!
|
。
最后此篇关于详解Java的JDBC中Statement与PreparedStatement对象的文章就讲到这里了,如果你想了解更多关于详解Java的JDBC中Statement与PreparedStatement对象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在使用 Databricks JDBC 驱动程序版本 2.6.22,并尝试升级到 2.6.27。但是,升级后我收到消息说我的 JDBC URL 在尝试连接时无效。这些 JDBC URL 与旧版本
似乎JDBC Spec没有详细说明数据源连接池中alive or idle connections的准确含义。它只是具体实现吗? DBCP2如何或 HikariCP实际检查连接状态? 下面没有事件事务
在“XPages 扩展库”一书中,第 12 章,第 409 页有一个 JDBC 连接文件的例子: org.apache.derby.jdbc.EmbeddedDriver jdbc:
谁能告诉我 jdbc 是如何工作的?它如何设法与 DBMS 通信?因为 DBMS 可能是用其他编程语言编写的。 最佳答案 与数据库的通信由 JDBC 驱动程序处理,这些驱动程序可以使用各种策略与数据库
我想知道是否有人可以帮助我解决这个问题。我在尝试使用 Spring JDBC 编写代码时遇到了一个问题。当我运行服务器时,我收到了标题中提到的消息。我google了一下,有人说你应该导入ojdbc.j
我只是想运行一个示例 hivejdbc 客户端程序,但它给我一个内存不足的错误。 import java.sql.SQLException; import java.sql.Connection; i
我需要将 Google Spreadsheet 与 JasperReports Server 一起使用,为此我需要一个用于 Google Spreadsheet 的 JDBC 连接器。 我找到了这个
我需要将大量行(最多 100,000 行)插入到 6 个不同的 DB2 表中。我正在使用 Java JDBC 来完成它。我想在单个数据库事务中完成所有操作,以便在遇到任何问题时可以回滚整个操作。在某处
再次为自己是 Jmeter 新手道歉——我对 JDBC 请求有点困惑——我在过去的 3 个小时里浏览了这个网站上的帖子——但我找不到任何相关的东西(除非我我错过了一些东西)。 我的环境:Jmeter
我们正在创建一个带有 MySQL 后端的 XPages 应用程序。应用程序将被多个客户使用。每个都有自己的 NSF 数据库和相应的 MySQL 数据库。每个客户都有自己的 MySQL 用户名。我们正在
昨天我遇到了一个大问题。在我当前的项目中,我使用 Oracle 的 JDBC 的 ojdbc6 实现进行连接,但我还需要处理例如 oracle 8 数据库,这对于这个 JAR 是完全不可能的。 你会说
这个问题在这里已经有了答案: Closing JDBC Connections in Pool (3 个答案) 关闭 2 年前。 假设我有以下代码 DataSource source = (Data
我有 Informix 数据库,时间戳字段定义为 YEAR TO SECOND。 当我使用 JDBC rs.getString(column) 显示此字段时,它使用带毫秒的格式,因此此字段如下所示:
看完本教程之后; https://www.youtube.com/watch?v=ZnI_rlrei1s 我正在尝试使用logstash和jdbc获取我的本地主机mysql(使用laravel val
有人给我小费。 { "type": "jdbc", "jdbc": { "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试从mysql表中将1600万个文档(47gb)索引为elasticsearch索引。我正在使用jparante's elasticsearch jdbc river执行此操作。但是,在创建河
我正在尝试使用JDBC河将我的MySQL数据库复制到我的ElasticSearch索引中。 但是,每当我启动服务器时,与MySQL表的count(*)相比,创建的文档数量就增加了一倍。我通过清空索引并
使用新的logstash jdbc 连接器: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html后续的
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我是一名优秀的程序员,十分优秀!