Connection对象
-
一个connection对象定义了对于指定表的一个链接或会话空hi,可以执行SQL表达式并大会结果集。
-
数据库驱动可以使用class.forName()来加载
-
一个Connection对象有三个重要部分:①数据源的url ②用户名 ③密码
-
使用getConnection()方法建立
class.forName("JDBCDriver Name");
Connection myConn = DriverManager.getConnection(url);
Query Statement
Statement包含了JDBC发送到数据源的操作命令或者数据源返回的数据结果相关的信息,需要在Connection对象被创建的前提下才能够使用,可以通过execute(),executeQuery(),executeUpdate()方法被执行。
- execute()返回的是一个boolean值,且指定的SQL表达式可以被定义成String对象。
- executeQuery()返回的是ResultSet值,明确了有多少条数据被影响到,执行DML表达式。
- executeUpdate()返回int对象,一般执行SELECT语句。
Statement mystatement = myConn.createStatement();
PreparedStatement
这是一个Java对象,代表了对一个SQL表达式的预编译。可以用来执行有参数或者无参数的SQL表达式,在一个SQL表达式被多次执行的情况下是非常有用的。它是预编译的,所以可以立即被DBMS执行。
?表示通配符或参数,可以被任何值代替。赋值可用
- setString();
- setInt();
- setDouble();
- setDate();
public List findAccount(String firstName, String lastName)
throws AccountDAOException {
List<Account> results = new ArrayList<Account>();
try {
PreparedStatement pStmt = conn.prepareStatement("select * from test.account where first_name like ? and last_name like ?");
pStmt.setString(1, '%' + firstName.toUpperCase() + '%');
pStmt.setString(2, '%' + lastName.toUpperCase() + '%');
ResultSet rs = pStmt.executeQuery();
while (rs.next()) {
results.add(new AccountImpl(rs.getString(1), rs.getString(2),
rs.getString(3), rs.getString(4), rs.getFloat(5)));
}
} catch (SQLException e) {
throw new AccountDAOException(AccountDAOException.ERROR_FIND_NAME,
e);
}
return results;
}
JDBC异常类型
SQLException是SQL相关的异常的始祖,主要有以下扩展:
- BatchUpdateException
- RowSetWarning
- SerialException
- SQLClientInfoException
- SQLNonTransientException
- SQLRecoverableException
- SQLTransientException
- SQLWarning
- SyncFactoryException
- SyncProviderException
事务
设置Connection.autocommit(false)将会预防表达式或数据在得到明确的Connection.commit()指示之前被提交。
如果一个事件请求的变更长时间没有被确定,Connection.rollback()方法会被执行。
··(tab上面那个键)可用于区分mysql中的保留字
mysql大小写敏感问题
两个参数,lower_case_file_system 和 lower_case_table_names。
查看配置的命令
show global variables like '%lower_case%';
lower_case_file_system:表示当前系统文件是否大小写敏感,只读参数,无法修改。
lower_case_file_system | Value |
---|---|
ON | 大小写不敏感 |
OFF | 大小写敏感 |
lower_case_table_names:表示表名是否大小写敏感,可以修改。
lower_case_table_names | Value |
---|---|
0 | mysql会根据表名直接操作,大小写敏感。 |
1 | mysql会先把表名转为小写,再执行操作。 |
DataSource
是SUN制定的用于获取数据库连接的规范接口。它存在于 javax.sql包中,用来代替 DriverManager 的方式获取连接。是connection类型。
DataSource 与 DriverManager 获取连接的不同在于,后者是由SUN实现的,它只供了最基本的获取连接的方式。而DataSource是一个接口,不光SUN可以实现,很多第三方的中间件也可以很好地实现。
DataSource一般有如下三种实现方式:
- 标准实现:提供最基本的连接,也就是DriverManager的方式
- 连接池的实现:提供了连接池,是一种可以缓存及管理多个数据库连接的“容器”。
- 分布事务的实现 – 提供了连接池,而且这个池中的连接是支持分布式事务的(Distribute Transaction)。
package结构
- impl :全称为implement,表示实现的意思,通常处于controller层的service下,用来存放接口的实现类。
- JavaBean: 是一种JAVA语言写成的可重用组件,它是一个具体的和公共的类,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
- DAO:全称为Data Access Object,是进行数据操作的类,存放对于数据库中的数据做增删改查等操作的代码。数据访问对象是一个面向对象的数据库接口,最适用于单系统应用程序或小范围本地分布使用。DAO层一般有接口和该接口的实现类,接口用于规范实现类,实现类一般用于用于操作数据库。