全部博文(2065)
分类: Java
2010-04-26 21:16:51
JDBC理论学习专题
2.1 获取连接
加载驱动实例
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
将会加载一个数据库驱动到内存中去。这样的话我们的DriverManager就可以拿到一个可用的数据库驱动了。
创建连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");
2.2 执行SQL语句
statement = conn.createStatement();
然后通过使用statement才能获取到ResultSet结果集。请见上图说明的。可以有三种类型的Statement语句的!
2.3 处理异常
System.out.println(e.getMessage());
while((e = e.getNextException()) != null) {
System.out.println(e.getMessage());
}
这样的写法不错哦!可以获取全部的异常信息出来!
2.4 JAVA数据类型与SQL类型之间的匹配关系如下
Table 9-1. Methods to Retrieve Data from a ResultSet
SQL Data Type |
Java Type Returned by getObject() |
Recommended Alternative to getObject() |
CHAR |
String |
String getString() |
VARCHAR |
String |
String getString() |
LONGVARCHAR |
String |
InputStream getAsciiStream() InputStream getUnicodeStream() |
NUMERIC |
java.math.BigDecimal |
java.math.BigDecimal getBigDecimal() |
DECIMAL |
java.math.BigDecimal |
java.math.BigDecimal getBigDecimal() |
BIT |
Boolean |
boolean getBoolean() |
TINYINT |
Integer |
byte getByte() |
SMALLINT |
Integer |
short getShort() |
INTEGER |
Integer |
int getInt() |
BIGINT |
Long |
long getLong() |
REAL |
Float |
float getFloat() |
FLOAT |
Double |
double getDouble() |
DOUBLE |
Double |
double getDouble() |
BINARY |
byte[] |
byte[] getBytes() |
VARBINARY |
byte[] |
byte[] getBytes() |
LONGVARBINARY |
byte[] |
getBinaryStream() |
DATE |
java.sql.Date |
java.sql.Date getDate() |
TIME |
Java.sql.Time |
java.sql.Time getTime() |
TIMESTAMP |
Java.sql.Timestamp |
java.sql.Timestamp getTimestamp() |
数据库类型 --- JAVA数据类型 --- JDBC中的接口方法
2.6 处理Null字段
int age = rs.getInt("age");
if (!rs.wasNull())
out.println("Age: " + age);
表示是否为NULL字段的哦
2.7 更新
count =
statement.executeUpdate(sqls);
返回的是影响的记录数
如果一个SQL语句你不能确定到底是做select还是update操作的话就可以使用execute语句
这个语句如果返回的是true表示是做了一个查询,如果返回false就表示是做了更新!
2.8 使用预更新语句
这个语句是做了预编译处理的。其执行速度是比Statement更快的。
PreparedStatement pstmt =
(PreparedStatement) conn.prepareStatement("insert into
test(a,b) value(?,?)");
pstmt.clearParameters();
pstmt.setString(1, "hko");
pstmt.setString(2, "hs");
pstmt.executeUpdate();
这种语句的执行速度是比较快的因为做了预编译处理!
3.0 事务
JDBC默认在创建一个连接的时候将setAutoCommit()置为true了。即设置为自动提交的。
如果你现在要做事务即一次可以提交多个SQL语句的话就可以将这个值设置为false
判断一个连接是否为自动提交的一个方法为getAutoCommit()
如果你要一次提交多个SQL语句的话可以用commit()方法!
一旦遇到问题就可以用rollback()做事务回滚了!
PS:要注意一点如果你想使用事务的话就得用事务类型的引擎。像在MYSQL中如果你用MyISAM的话就不支持事务了。没有效果。可以换用InnoDB来做!
if (conn.getAutoCommit()) {
conn.setAutoCommit(false);
}
statement = conn.createStatement();
count = statement.executeUpdate(sqls);
statement.executeUpdate("insert into innodb(name) values('e')");
statement.executeUpdate("insert into innodb(names) values('e')");
conn.commit();
如果第一个SQL语句没问题可以成功提交。但是第二个SQL语句是有问题的就不可以正常提交了。这样两个SQL语句都没法提交了!