java中最常用的数据库连接技术就是JDBC。
目前几乎所有的主流数据库都提供了相应的jdbc驱动,可以简单理解为.net中的数据库客户端dll,.net中如果对于netframework默认不支持的数据库(比如sqllite,mysql之类),就必须要下载专门的数据库客户端dll文件,在vs.net中添加该dll的引用,然后就可以用它来连接数据库。
jdbc也是同样的道理,jdk默认安装后,几乎没带什么jdbc驱动,需要到各数据库提供商网站下载对应的jdbc驱动,以mysql为例,下载mysql jdbc驱动后(百度搜索 “mysql jdbc”就行),会得到一个mysql-connector-java-5.1.22-bin.jar的文件,把它复制到 \jdk\jre\lib\ext 目录下(这样程序运行时,通过ClassPath就能找到该文件)
然后就可以写代码连接了,示例代码 :
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
|
package
jmyang.jdbctest;
import
java.sql.DriverManager;
import
java.sql.ResultSet;
import
java.sql.Statement;
import
java.sql.Connection;
public
class
MySqlTest {
public
static
void
main(String[] args) {
Connection conn =
null
;
try
{
// 加载mysql驱动程序
Class.forName(
"com.mysql.jdbc.Driver"
);
// 连接localhost上的mysql,并指定使用test数据库,用户名为root,密码为***
"root"
,
"***"
);
if
(!conn.isClosed()) {
System.out.println(
"数据库连接成功!"
);
//验证是否连接成功
}
Statement statement = conn.createStatement();
//查询数据
ResultSet rs = statement.executeQuery(
"select * from person"
);
//输出结果集(类似.net中的DataSet/DataTable)
while
(rs.next()) {
System.out.println(
"id="
+ rs.getInt(
"Id"
) +
",name="
+
rs.getString(
"Name"
));
}
rs.close();
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
if
(conn !=
null
) {
try
{
conn.close();
conn =
null
;
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
}
}
|
l可以通过调用Connection对象的preparedStatement()方法获取PreparedStatement对象
lPreparedStatement接口是Statement的子接口,它表示一条预编译过的SQL语句
lPreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示,调用PreparedStatement对象的setXXX()方法来设置这些参数.setXXX() 方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从 1开始),第二个是设置的SQL语句中的参数的值
代码的可读性和可维护性.
PreparedStatement能保证安全性(
解决
sql
注入问题)
PreparedStatement能最大可能提高性能:
•DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。
•在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
对Mysql来说几乎没有区别,但对oracle数据库则非常明显
l用 PreparedStatement取代Statement就可以解决sql注入问题
ljava.sql.DriverManager用来装载驱动程序,获取数据库连接。
ljava.sql.Connection完成对某一指定数据库的联接,获取数据库操作对象
ljava.sql.Statement在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型。
•Java.sql.PreparedSatement 用于执行预编译的sql声明
•Java.sql.CallableStatement用于执行数据库中存储过程的调用
ljava.sql.ResultSet对于给定声明取得结果的途径
JDBC事务:
事务处理:保证所有事务都作为一个工作单元来执行,当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),要么整个事务回滚(rollback)到最初状态
在JDBC中,事务默认是自动提交的,每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚
实现事务的步子步骤:
•调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务
•在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
•在出现异常时,调用 rollback(); 方法回滚事务
可以通过Connection的getAutoCommit()方法来获得当前事务的提交方式