- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java基于jdbc连接mysql数据库功能实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了java基于jdbc连接mysql数据库的方法。分享给大家供大家参考,具体如下:
1、JDBC简介 。
Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是面向关系型数据库的.
1、JDBC架构:
JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:
JDBC API: 提供了应用程序对JDBC的管理连接; 。
JDBC Driver API: 支持JDBC管理到驱动器连接; 。
JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库; 。
JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源,该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序; 。
以下是结构图,它显示了驱动程序管理器方面的JDBC驱动程序和Java应用程序的位置:
2、常见的JDBC组件:
JDBC API提供了以下接口和类:
DriverManager: 这个类管理数据库驱动程序的列表,内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求,识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接; 。
Driver: 此接口处理与数据库服务器通信,很少直接与驱动程序对象,相反,使用DriverManager中的对象,它管理此类型的对象,它也抽象与驱动程序对象工作相关的详细信息; 。
Connection : 此接口与接触数据库的所有方法,连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象; 。
Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库,一些派生的接口接受除执行存储过程的参数; 。
ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据,它作为一个迭代器,让您可以通过移动它的数据; 。
SQLException: 这个类处理发生在一个数据库应用程序的任何错误. 。
2、连接JDBC需要掌握的基本知识 。
1、数据库的基本操作.
eg:Mysql的安装和基本操作(insert,delete,update,query) 。
2、java开发工具的使用, 。
eg:Eclipse/MyEclipse (包括mysql-connector-java-5.0.3-bin.jar的导入) 。
3、JDBC的连接及代码演示 。
1、JDBC连接工具类 。
1)、Configuration.java:可以从.xml文件中连接数据库的配置信息,需要引入dom4j-1.6.1.jar包 。
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
|
package
cn.java.jdbc;
import
java.io.InputStream;
import
org.dom4j.Document;
import
org.dom4j.DocumentException;
import
org.dom4j.Element;
import
org.dom4j.io.SAXReader;
public
class
Configuration {
private
String url;
private
String driver;
private
String username;
private
String password;
public
Configuration() {
}
public
Configuration(String url, String driver, String username,
String password) {
super
();
this
.url = url;
this
.driver = driver;
this
.username = username;
this
.password = password;
}
public
static
Configuration getConfigure()
{
try
{
InputStream in = Configuration.
class
.getResourceAsStream(
"/db.xml"
);
if
(
null
!=in) {
return
load(in);
}
return
null
;
}
catch
(DocumentException e) {
e.printStackTrace();
return
null
;
}
}
private
static
Configuration load(InputStream in)
throws
DocumentException {
SAXReader reader =
new
SAXReader();
Document doc = reader.read(in);
Element jdbc = doc.getRootElement();
String url = jdbc.element(
"url"
).getText();
String driver = jdbc.element(
"driver"
).getText();
String username = jdbc.element(
"username"
).getText();
String password = jdbc.element(
"password"
).getText();
Configuration cfg =
new
Configuration(url, driver, username, password);
return
cfg;
}
public
String getUrl() {
return
url;
}
public
void
setUrl(String url) {
this
.url = url;
}
public
String getDriver() {
return
driver;
}
public
void
setDriver(String driver) {
this
.driver = driver;
}
public
String getUsername() {
return
username;
}
public
void
setUsername(String username) {
this
.username = username;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
}
|
2)、db.xml:保存数据库的配置信息 。
1
2
3
4
5
6
7
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
jdbc
>
<
url
>jdbc:mysql://localhost:3306/test</
url
>
<
driver
>com.mysql.jdbc.Driver</
driver
>
<
username
>root</
username
>
<
password
></
password
>
</
jdbc
>
|
3)、ConnectionFactory.java:JDBC连接工厂方法之一 。
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
|
package
cn.java.jdbc;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.SQLException;
public
class
ConnectionFactory {
private
static
ConnectionFactory connectionFactory=
null
;
private
static
Configuration config=Configuration.getConfigure();
private
ConnectionFactory()
{
try
{
Class.forName(config.getDriver());
}
catch
(ClassNotFoundException e) {
}
}
public
Connection getConnection()
throws
SQLException
{
Connection con=
null
;
try
{
con=DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
return
con;
}
finally
{
// if (null != con) {
// con.close();
// }
}
}
public
static
ConnectionFactory getInstance()
{
if
(
null
==connectionFactory) {
connectionFactory=
new
ConnectionFactory();
}
return
connectionFactory;
}
}
|
4)、ConnectionFactory2.java:JDBC连接工厂方法之二 。
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
|
package
cn.java.jdbc;
import
java.sql.Connection;
import
java.sql.SQLException;
import
javax.sql.DataSource;
import
com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public
class
ConnectionFactory2 {
private
DataSource ds ;
private
static
ConnectionFactory2 connectionFactory2 =
null
;
private
ConnectionFactory2() {
MysqlDataSource myDS =
new
MysqlDataSource() ;
myDS.setServerName(
"localhost"
);
myDS.setDatabaseName(
"test"
);
myDS.setPort(
3306
) ;
myDS.setUser(
"root"
);
myDS.setCharacterEncoding(
"utf-8"
);
myDS.setPassword(
""
);
this
.ds = myDS ;
}
public
Connection getConnection()
throws
SQLException {
Connection conn =
null
;
try
{
conn = ds.getConnection() ;
conn.setAutoCommit(
false
);
return
conn;
}
catch
(SQLException e) {
if
(
null
!= conn) {
conn.close();
}
throw
e;
}
}
public
static
ConnectionFactory2 getInstance() {
if
(
null
== connectionFactory2) {
connectionFactory2 =
new
ConnectionFactory2();
}
return
connectionFactory2;
}
}
|
5)、User.java:定义数据库表user中的id和name的bean类,其中id是自动增长的 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package
cn.java.jdbc;
public
class
User {
private
int
id;
private
String name;
public
User() {
}
public
User(
int
id, String name) {
this
.id = id;
this
.name = name;
}
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;
}
}
|
6)、UserDao.java:user表的操作类,实现了insert、delete、update、query等方法 。
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package
cn.java.jdbc;
import
java.io.IOException;
import
java.sql.Connection;
import
java.sql.PreparedStatement;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.util.ArrayList;
import
java.util.List;
public
class
UserDao {
private
PreparedStatement st =
null
;
private
ResultSet rs =
null
;
public
UserDao() {
}
public
void
insert( Connection con,String name)
throws
SQLException,IOException {
String sql=
"insert into user(name) values(?) "
;
try
{
st=con.prepareStatement(sql);
st.setString(
1
, name);
st.executeUpdate();
}
finally
{
if
(
null
!=st) {
st.close();
}
}
}
public
void
delete(Connection con,
int
id)
throws
SQLException,IOException {
String sql=
"delete from user where id=?"
;
try
{
st=con.prepareStatement(sql);
st.setInt(
1
, id);
st.executeUpdate();
}
finally
{
if
(
null
!=st) {
st.close();
}
}
}
public
void
update( Connection con,
int
id,String name)
throws
SQLException,IOException {
String sql=
"update user set name=? where id=?"
;
try
{
st=con.prepareStatement(sql);
st.setString(
1
, name);
st.setInt(
2
, id);
st.executeUpdate();
}
finally
{
if
(
null
!=st) {
st.close();
}
}
}
public
User query(Connection con,
int
index)
throws
SQLException,IOException{
User user=
new
User();
String sql=
"select * from user where id=?"
;
try
{
st=con.prepareStatement(sql);
st.setInt(
1
, index);
rs=st.executeQuery();
while
(rs.next()) {
user.setId(rs.getInt(
1
));
user.setName(rs.getString(
2
));
break
;
}
}
finally
{
if
(
null
!=rs) {
rs.close();
}
if
(
null
!=st) {
st.close();
}
}
return
user;
}
public
List<User> queryAll(Connection con)
throws
SQLException,IOException {
List<User> list=
new
ArrayList<>();
String sql=
"select * from user"
;
try
{
st=con.prepareStatement(sql);
rs=st.executeQuery();
while
(rs.next()) {
User user=
new
User();
user.setId(rs.getInt(
1
));
user.setName(rs.getString(
2
));
list.add(user);
}
}
finally
{
if
(
null
!=rs) {
rs.close();
}
if
(
null
!=st) {
st.close();
}
}
return
list;
}
}
|
2、JDBC连接的测试类 。
1)、TestJdbc.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
|
package
cn.java.jdbc;
import
java.io.IOException;
import
java.sql.Connection;
import
java.sql.SQLException;
import
java.util.List;
public
class
TestJdbc {
public
static
void
main(String[] args) {
Connection con=
null
;
try
{
con=(Connection) ConnectionFactory.getInstance().getConnection();
UserDao userDao=
new
UserDao();
//con=(Connection) ConnectionFactory2.getInstance().getConnection();
if
(
null
!=con) {
System.out.println(
"Link JDBC SUCESS"
);
//userDao.insert(con, "zhangsir");
//userDao.delete(con, 4);
//userDao.update(con, 1, "david");
List<User> list=userDao.queryAll(con);
for
(User user : list) {
System.out.println(
"id="
+user.getId()+
" name="
+user.getName());
}
}
}
catch
(SQLException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(
null
!=con) {
try
{
con.close();
}
catch
(SQLException e) {
}
}
}
}
}
|
3、JDBC连接总结 。
JDBC操作的基本步骤是:
1、创建Connection对象,传入SQL查询命令字符串; 2、获取PreparedStatement对象:通过Connection对象传入SQL查询命令获取; 3、获取ResultSet:对PreparedStatement执行executeUpdate()或者executeQurey()获取; 4、依次关闭打开的对象:先后关闭ResultSet、PreparedStatement和Connection对象. 。
希望本文所述对大家java程序设计有所帮助.
原文链接:http://blog.csdn.net/j086924/article/details/51546876 。
最后此篇关于java基于jdbc连接mysql数据库功能实例详解的文章就讲到这里了,如果你想了解更多关于java基于jdbc连接mysql数据库功能实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在构建一个 RCP 应用程序,其中每个季度都会更新功能/插件。因此,如果用户选择自动更新功能/插件,则会下载更新插件的新 jar,但旧插件仍在使用我不再使用的磁盘空间。 我厌倦了删除包含旧 jar
我如何从外部 Controller 功能中调用 Controller 内部的功能,例如电话间隙回调功能 这是 Controller 外部定义的功能 function onDeviceReady()
如果某个功能(例如 MediaSource)可用,我如何使用 Google Dart 检查。 new MediaSource() 抛出一个错误。如何以编程方式检查此类或功能是否存在?有任何想法吗?是否
我正在尝试运行 Azure Orchestrations,突然我开始从 statusQueryGetUri 收到错误: 协调器函数“UploadDocumentOrchestrator”失败:函数“U
我见过 iPhone 上的应用程序,如果在 3.0 上运行,将使用 3.0 功能/API,例如应用内电子邮件编辑器,如果在 2.x 上运行,则不使用这些功能,并退出应用程序以启动邮件相反。 这是怎么做
这是 DB 规范化理论中的一个概念: Third normal form is violated when a non-key field is a fact about another non-ke
如果我定义 #if SOMETHING #endif 而且我还没有在任何地方定义 SOMETHING。 #if 中的代码会编译吗? 最佳答案 当#if的参数表达式中使用的名称未定义为宏时(在所有其他宏
我刚刚澄清了 A* 路径查找应该如何在两条路径具有相等值的 [情况] 下运行,无论是在计算期间还是在结束时,如果有两条相等的短路径。 例如,我在我的起始节点,我可以扩展到两个可能的节点,但它们都具有相
Java有没有类似下面的东西 宏 一种遍历所有私有(private)字段的方法 类似于 smalltalk symbols 的东西——即用于快速比较静态字符串的东西? 请注意,我正在尝试为 black
这个程序应该将华氏度转换为摄氏度: #include int main() { float fahrenheit, celsius; int max, min, step;
当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形
我有一个特殊的(虚拟)函数,我想在沙盒环境中使用它: disable.system.call eval(parse(text = 'model.frame("1 ~ 1")'), envir = e
使用新的 Service 实现,我是否必须为我的所有服务提供一个 Options 方法? 使用我的所有服务当前使用的旧 ServiceBase 方法,OPTIONS 返回 OK,但没有 Access-
我正在阅读 Fogus 的关于 Clojure 的喜悦的书,在并行编程章节中,我看到了一个函数定义,它肯定想说明一些重要的事情,但我不知道是什么。此外,我看不到这个函数有什么用 - 当我执行时,它什么
我有大量的 C 代码,大部分代码被注释掉和/或 #if 0。当我使用 % 键匹配 if-else 的左括号和右括号时,它也匹配注释掉的代码。 有没有办法或vim插件在匹配括号时不考虑注释掉或#if 0
我有这个功能: map(map(fn x =>[x])) [[],[1],[2,3,4]]; 产生: val it = [[],[[1]],[[2],[3],[4]]] 我不明白这个功能是如何工作的。
我使用 Visual Studio 代码创建了一个函数应用程序,然后发布了它。功能应用程序运行良好。我现在在功能门户中使用代码部署功能(KUDU)并跳过构建。下面是日志 9:55:46 AM
我有一个数据框df: userID Score Task_Alpha Task_Beta Task_Charlie Task_Delta 3108 -8.00 Easy Easy
我真的无法解决这个问题: 我有一个返回数据框的函数。但是,数据框仅打印在我的控制台中,尽管我希望将其存储在工作空间中。我怎样才能做到这一点? 样本数据: n <- 32640 t <- seq(3*p
有没有办法找出所有可能的激活器命令行选项? activator -help仅提供最低限度的可用选项/功能列表,但所有好的东西都隐藏起来,即使在 typesafe 网站在线文档中也不可用。 到目前为止,
我是一名优秀的程序员,十分优秀!