JDBC数据类型
我们知道java中的数据类型和SQL语言中的数据类型是有一定差别的;所以我们在使用java和数据库交互的时候需要利用JDBC驱动将java数据类型转换成相应的数据库数型;
总结如下的表格:
SQL | JDBC/Java | setter | updater | getter |
---|---|---|---|---|
VARCHAR | java.lang.String | setString | updateString | getString |
CHAR | java.lang.String | setString | updateString | getString |
LONGVARCHAR | java.lang.String | setString | updateString | getString |
BIT | boolean | setBoolean | updateBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal | getBigDecimal |
TINYINT | byte | setByte | updateByte | getByte |
SMALLINT | short | setShort | updateShort | getShort |
INTEGER | int | setInt | updateInt | getInt |
BIGINT | long | setLong | updateLong | getLong |
REAL | float | setFloat | updateFloat | getFloat |
FLOAT | float | setFloat | updateFloat | getFloat |
DOUBLE | double | setDouble | updateDouble | getDouble |
VARBINARY | byte[] | setBytes | updateBytes | getBytes |
BINARY | byte[] | setBytes | updateBytes | getBytes |
DATE | java.sql.Date | setDate | updateDate | getDate |
TIME | java.sql.Time | setTime | updateTime | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | updateClob | getClob |
BLOB | java.sql.Blob | setBlob | updateBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | updateARRAY | getARRAY |
REF | java.sql.Ref | setRef | updateRef | getRef |
STRUCT | java.sql.Struct | setStruct | updateStruct | getStruct |
什么是事务??
所谓的事务就是一件事在包含多条的DML语句的执行过程中,要么全部执行成功,要么出现异常立即回滚。
其实质上就是让多条的SQL在一个事务中执行,并且保证这些语句在同一时间共同执行,一个事务是吧单个的SQL语句或者是一组的SQL语句作为一个整体的逻辑单元,如果
中的任何的语句失败了,那么整个事务就失败了。
那么JDBC事务有哪些特征呢??
高度的概括为:ACID
原子性(Atomicity) :事物执行语句的最小单元
一致性(Consistency) :哪里少了,哪里就会多,没有平白无故的增加或减少
隔离性(Isolation) :事务没有提交,别人是看不见的
持久性(Durability) :事务提交之后对于系统的影响是永久的
package algorithm.cxg.JDBC;
import java.sql.*;
/**
* JDBC事务==>最好和hibernate的事务区别记忆,一举两得哦
* 1.开始事务:此处传递一个布尔值 false 到 setAutoCommit() 中,就可以关闭自动提交。反之我们传入一个 true 便将其重新打开。
* connection.setAutoCommit(false);
* 2.提交事务
* connection.commit();
* 3.事务回滚
* connection.rollback();
* @author admin
*
*/
public class TestJDBC1 {
//数据库驱动
public static String JDBC_DRIVE="com.mysql.jdbc.Driver";
//数据连接地址
public static String DB_URL="jdbc:mysql://localhost/hibernate";
//数据库名称
public static String DB_NAME="root";
//数据库密码
public static String DB_PASSWORD="";
public static void main(String[] args) {
Connection connection=null;
java.sql.Statement statement=null;
try {
//注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//1.打开数据库
System.out.println("数据库开始连接。。。");
connection=DriverManager.getConnection(DB_URL, DB_NAME, DB_PASSWORD);
//开始事务:此处传递一个布尔值 false 到 setAutoCommit() 中,就可以关闭自动提交。反之我们传入一个 true 便将其重新打开。
connection.setAutoCommit(false);
//2.执行SQL语句
statement=connection.createStatement();
//出入一条语句
String sql="INSERT INTO member VALUES (6,'CaoCaoCao','1311111111')";
statement.executeUpdate(sql);
System.out.println("数据插入完毕。。。");
//查询
sql="SELECT id,`name`,phone FROM member";
//3.处理结果集
ResultSet resultSet=statement.executeQuery(sql);
//**4提交事务
connection.commit();
while (resultSet.next()) {
//检索
int id=resultSet.getInt("id");
String name=resultSet.getString("name");
String phone=resultSet.getString("phone");
//显示
System.out.println("id:"+id+",name:"+name+",phone:"+phone);
}
resultSet.close();
statement.close();
connection.close();
} catch (SQLException se) {
se.printStackTrace();
try {
if (connection!=null) {
connection.rollback();//事务回滚
}
} catch (SQLException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//一般情况下用来关闭资源
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println("数据处理完成!");
}
}