- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java编程中使用JDBC API连接数据库和创建程序的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
JDBC连接数据库 。
涉及到建立一个JDBC连接的编程是相当简单的。下面是这些简单的四个步骤:
导入JDBC包: import 语句告诉Java编译器在哪里可以找到在代码中引用,并放置在您的源代码最开始的类.
使用标准的JDBC包,它允许选择,插入,更新和SQL表中删除数据,添加以下进口到您的源代码:
1
2
|
import
java.sql.* ;
// for standard JDBC programs
import
java.math.* ;
// for BigDecimal and BigInteger support
|
注册JDBC驱动程序: 使用它之前,必须注册你的驱动程序在程序。注册驱动程序是由Oracle驱动程序的类文件被加载到内存中以便它可以被用作JDBC接口的实现过程.
需要做这个注册只能在你的程序一次。可以通过以下两种方式之一注册一个驱动程序.
方法(I)- Class.forName(): 注册一个驱动程序中最常用的方法是使用Java的Class.forName()方法来动态加载驱动程序的类文件到内存中,它会自动将其注册。这种方法是可取的,因为它允许使驱动注册配置,便于携带.
下面的示例使用Class.forName()来注册Oracle驱动程序:
1
2
3
4
5
6
7
|
try
{
Class.forName(
"oracle.jdbc.driver.OracleDriver"
);
}
catch
(ClassNotFoundException ex) {
System.out.println(
"Error: unable to load driver class!"
);
System.exit(
1
);
}
|
可以使用getInstance()方法来解决不兼容的JVM,但要编写了两个额外的例外情况如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
try
{
Class.forName(
"oracle.jdbc.driver.OracleDriver"
).newInstance();
}
catch
(ClassNotFoundException ex) {
System.out.println(
"Error: unable to load driver class!"
);
System.exit(
1
);
catch
(IllegalAccessException ex) {
System.out.println(
"Error: access problem while loading!"
);
System.exit(
2
);
catch
(InstantiationException ex) {
System.out.println(
"Error: unable to instantiate driver!"
);
System.exit(
3
);
}
|
方法(二) - DriverManager.registerDriver(): 可以用它来注册一个驱动程序的第二种方法是使用staticDriverManager.registerDriver()方法.
应该,如果使用的是不兼容的JDK JVM,比如微软提供一个使用registerDriver()方法.
下面的示例使用registerDriver()来注册Oracle驱动程序:
1
2
3
4
5
6
7
8
|
try
{
Driver myDriver =
new
oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( myDriver );
}
catch
(ClassNotFoundException ex) {
System.out.println(
"Error: unable to load driver class!"
);
System.exit(
1
);
}
|
数据库URL制定: 当加载的驱动程序,可以建立程序中使用DriverManager.getConnection()方法的连接。为方便参考,让列出了三个重载DriverManager.getConnection()方法:
在这里,每个表单需要一个数据库URL。数据库的URL是指向数据库地址.
制定一个数据库URL是大多数用在建立连接相关.
下表列出了下来流行的JDBC驱动程序名和数据库的URL.
RDBMS JDBC驱动程序的名称 URL 格式 。
1
2
3
4
|
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName
|
以URL格式所有高亮的部分是静态的,需要改变只剩余部分按照数据库设置.
创建连接对象: 使用数据库URL的用户名和密码: 下面三种形式DriverManager.getConnection()方法来创建一个连接对象。getConnection()最常用形式要求传递一个数据库URL,用户名 username和密码 password:
对URL数据库部分databaseName的值:假设使用的是Oracle的瘦驱动程序,需要指定一个主机:端口.
假设有一台主机TCP/IP地址192.0.0.1 以及主机名和Oracle监听器被配置为在端口1521,数据库名称是EMP,然后完整的数据库URL是:
1
|
jdbc:oracle:thin:@amrood:1521:EMP
|
现在,必须调用适当的用户名和密码以及getConnection()方法来获得一个Connection对象,如下所示:
1
2
3
4
|
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
|
只使用一个数据库URL: 第二种形式 DriverManager.getConnection()方法只需要一个数据库URL:
1
|
DriverManager.getConnection(String url);
|
然而,在这种情况下,数据库的URL,包括用户名和密码,并具有以下的一般形式:
1
|
jdbc:oracle:driver:username/password
@database
|
所以上面的连接可以创建如下:
1
2
|
String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
Connection conn = DriverManager.getConnection(URL);
|
使用数据库的URL和一个Properties对象: 第三种形式DriverManager.getConnection()方法需要一个数据库URL和一个Properties对象:
DriverManager.getConnection(String url, Properties info); Properties对象,保存一组关键字 - 值对。它被用来调用getConnection()方法时驱动程序属性传递给驱动程序.
为了使通过前面的例子中所做的相同的连接,使用下面的代码:
1
2
3
4
5
6
7
8
|
import
java.util.*;
String URL =
"jdbc:oracle:thin:@amrood:1521:EMP"
;
Properties info =
new
Properties( );
info.put(
"user"
,
"username"
);
info.put(
"password"
,
"password"
);
Connection conn = DriverManager.getConnection(URL, info);
|
关闭JDBC连接: 在JDBC程序的结束,它明确要求关闭所有的连接到数据库,以结束每个数据库会话。但是,如果忘了,Java垃圾收集器会关闭连接时,它会清除陈旧的对象.
依托垃圾收集,特别是在数据库编程,是非常差的编程习惯。应该总是在关闭与连接对象关联的close()方法连接的习惯.
为了确保连接被关闭,可以在代码中的finally块执行。 finally块都会执行,不管是否发生或也不例外.
要关闭上面打开的连接,应该调用close()方法,如下所示:
conn.close(); 显式地关闭连接DBMS节约资源.
创建JDBC应用程序: 有下列涉及构建JDBC应用程序的六个步骤:
示例代码: 这个范例的例子可以作为一个模板,在需要建立JDBC应用程序.
基于对环境和数据库安装在前面的章节中做此示例代码已写入.
复制下面的例子FirstExample.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
|
//STEP 1. Import required packages
import
java.sql.*;
public
class
FirstExample {
// 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
;
Statement 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..."
);
stmt = conn.createStatement();
String sql;
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 FirstExample
|
现在来编译上面的例子如下:
1
|
C:>javac FirstExample.java
|
当运行FirstExample,它会产生以下结果:
1
|
C:>java FirstExample
|
1
2
3
4
5
6
|
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
|
。
最后此篇关于Java编程中使用JDBC API连接数据库和创建程序的方法的文章就讲到这里了,如果你想了解更多关于Java编程中使用JDBC API连接数据库和创建程序的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是 C 语言新手,我编写了这个 C 程序,让用户输入一年中的某一天,作为返回,程序将输出月份以及该月的哪一天。该程序运行良好,但我现在想简化该程序。我知道我需要一个循环,但我不知道如何去做。这是程序
我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。 import ja
我想安装screen,但是接下来我应该做什么? $ brew search screen imgur-screenshot screen
我有一个在服务器端工作的 UDP 套接字应用程序。为了测试服务器端,我编写了一个简单的 python 客户端程序,它发送消息“hello world how are you”。服务器随后应接收消息,将
我有一个 shell 脚本,它运行一个 Python 程序来预处理一些数据,然后运行一个 R 程序来执行一些长时间运行的任务。我正在学习使用 Docker 并且我一直在运行 FROM r-base:l
在 Linux 中。我有一个 c 程序,它读取一个 2048 字节的文本文件作为输入。我想从 Python 脚本启动 c 程序。我希望 Python 脚本将文本字符串作为参数传递给 c 程序,而不是将
对于一个类,我被要求编写一个 VHDL 程序,该程序接受两个整数输入 A 和 B,并用 A+B 替换 A,用 A-B 替换 B。我编写了以下程序和测试平台。它完成了实现和行为语法检查,但它不会模拟。尽
module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String ty
我想找到两个以上数字的最小公倍数 求给定N个数的最小公倍数的C++程序 最佳答案 int lcm(int a, int b) { return (a/gcd(a,b))*b; } 对于gcd,请查看
这个程序有错误。谁能解决这个问题? Error is :TempRecord already defines a member called 'this' with the same paramete
当我运行下面的程序时,我在 str1 和 str2 中得到了垃圾值。所以 #include #include #include using namespace std; int main() {
这是我的作业: 一对刚出生的兔子(一公一母)被放在田里。兔子在一个月大时可以交配,因此在第二个月的月底,每对兔子都会生出两对新兔子,然后死去。 注:在第0个月,有0对兔子。第 1 个月,有 1 对兔子
我编写了一个程序,通过对字母使用 switch 命令将十进制字符串转换为十六进制,但是如果我使用 char,该程序无法正常工作!没有 switch 我无法处理 9 以上的数字。我希望你能理解我,因为我
我是 C++ 新手(虽然我有一些 C 语言经验)和 MySQL,我正在尝试制作一个从 MySQL 读取数据库的程序,我一直在关注这个 tutorial但当我尝试“构建”解决方案时出现错误。 (我正在使
仍然是一个初学者,只是尝试使用 swift 中的一些基本函数。 有人能告诉我这段代码有什么问题吗? import UIKit var guessInt: Int var randomNum = arc
我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1 和 constant2 存储在 std::string 中,
我用 C++ 编写了这段代码,使用运算符重载对 2 个矩阵进行加法和乘法运算。当我执行代码时,它会在第 57 行和第 59 行产生错误,非法结构操作(两行都出现相同的错误)。请解释我的错误。提前致谢:
我是 C++ 的初学者,我想编写一个简单的程序来交换字符串中的两个字符。 例如;我们输入这个字符串:“EXAMPLE”,我们给它交换这两个字符:“E”和“A”,输出应该类似于“AXEMPLA”。 我在
我需要以下代码的帮助: 声明 3 个 double 类型变量,每个代表三角形的三个边中的一个。 提示用户为第一面输入一个值,然后 将用户的输入设置为您创建的代表三角形第一条边的变量。 将最后 2 个步
我是新来的,如果问题不好请见谅 任务:将给定矩阵旋转180度 输入: 1 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出: 16 15 14 13 12 11
我是一名优秀的程序员,十分优秀!