1. PreparedStatement
1.1 PreparedStatement插入数据
@Test
public void testInsert ( ) {
User user = new User ( 1 , "lb" , "851425" ) ;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
String sql = "insert into nzgp2001.user(id, userName, password) VALUE (?,?,?)" ;
preparedStatement = connection. prepareStatement ( sql) ;
preparedStatement. setObject ( 1 , user. getId ( ) ) ;
preparedStatement. setObject ( 2 , user. getUserName ( ) ) ;
preparedStatement. setObject ( 3 , user. getPassword ( ) ) ;
int affectedRows = preparedStatement. executeUpdate ( ) ;
System. out. println ( "affectedRows:" + affectedRows) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement) ;
}
}
1.2 PreparedStatment修改
@Test
public void testUpdate ( ) {
User user = new User ( 1 , "lb" , "123456" ) ;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
String sql = "update user set userName = ?, password = ? where id = ?" ;
preparedStatement = connection. prepareStatement ( sql) ;
preparedStatement. setObject ( 1 , user. getUserName ( ) ) ;
preparedStatement. setObject ( 2 , user. getPassword ( ) ) ;
preparedStatement. setObject ( 3 , user. getId ( ) ) ;
int affectedRows = preparedStatement. executeUpdate ( ) ;
System. out. println ( "affectedRows:" + affectedRows) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement) ;
}
}
1.3 PreparedStatment删除
@Test
public void testDelete ( ) {
int id = 1 ;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
String sql = "delete from user where id = ?" ;
preparedStatement = connection. prepareStatement ( sql) ;
preparedStatement. setObject ( 1 , id) ;
int affectedRows = preparedStatement. executeUpdate ( ) ;
System. out. println ( "affectedRows:" + affectedRows) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement) ;
}
}
1.4 PreparedStatment查询
@Test
public void testSelectOne ( ) {
int id = 10 ;
User user = null;
ResultSet resultSet = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
String sql = "select * from user where id = ?" ;
preparedStatement = connection. prepareStatement ( sql) ;
preparedStatement. setObject ( 1 , id) ;
resultSet = preparedStatement. executeQuery ( ) ;
if ( resultSet. next ( ) ) {
String userName = resultSet. getString ( "userName" ) ;
String password = resultSet. getString ( "password" ) ;
user = new User ( id, userName, password) ;
}
if ( user != null) {
System. out. println ( user) ;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement, resultSet) ;
}
}
@Test
public void testSelectAll ( ) {
List< User> list = new ArrayList < > ( ) ;
ResultSet resultSet = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
String sql = "select * from user" ;
preparedStatement = connection. prepareStatement ( sql) ;
resultSet = preparedStatement. executeQuery ( ) ;
while ( resultSet. next ( ) ) {
int id = resultSet. getInt ( "id" ) ;
String userName = resultSet. getString ( "userName" ) ;
String password = resultSet. getString ( "password" ) ;
list. add ( new User ( id, userName, password) ) ;
}
for ( User user : list) {
System. out. println ( user) ;
}
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement, resultSet) ;
}
}
2. 封装
2.1 元数据
三种元数据
数据库元数据
通过java. sql. Connection获取对应的元数据
SQL语句元数据
通过java. sql. PreparedStatement获取对应的元数据
数据库结果集元数据
通过java. sql. ResultSet获取对应的元数据
MetaData
【重点】
1. SQL语句元数据,参数元数据其中的参数个数 对应 ? 占位符个数
2. 结果集元数据中的字段个数,和对应当前字段下标的字段名字
2.2 BeanUtils使用
BeanUtils提供了对于符合JavaBean规范的实体类进行赋值,取值,拷贝操作的一系列方法,可以自动完成数据类型转换,方便开发者在数据交互中使用。
所有的方法都是静态方法
三个方法
1. 赋值指定成员变量对应数据
a. 符合JavaBean规范的类对象
b. 指定成员变量的名字
c. Object类型数据用于赋值成员变量
2. 取值指定成员变量的数据
a. 符合JavaBean规范的类对象
b. 指定成员变量的名字
返回值是对应当前成员变量的数据类型
3. 拷贝符合JavaBean规范的两个对象数据
a. 符合JavaBean规范的目标类对象
b. 符合JavaBean规范的目标数据源对象
4. 真香方法,从Map双边对联中匹配赋值数据到符合JavaBean规范的类对象
a. 符合JavaBean规范的类对象
b. Map双边队列
2.3 更新方法
public int update ( String sql, Object[ ] parameters) {
int affectedRows = 0 ;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcUtil. getConnection ( ) ;
preparedStatement = connection. prepareStatement ( sql) ;
int parameterCount = preparedStatement. getParameterMetaData ( ) . getParameterCount ( ) ;
if ( parameterCount != 0 && parameters != null && parameterCount == parameters. length) {
for ( int i = 0 ; i < parameters. length; i++ ) {
preparedStatement. setObject ( i + 1 , parameters[ i] ) ;
}
}
affectedRows = preparedStatement. executeUpdate ( ) ;
} catch ( SQLException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement) ;
}
return affectedRows;
}
2.4 查询方法
public < T> List< T> query ( String sql, Object[ ] parameters, Class< T> cls) {
ResultSet resultSet = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
List< T> list = new ArrayList < > ( ) ;
try {
connection = JdbcUtil. getConnection ( ) ;
preparedStatement = connection. prepareStatement ( sql) ;
int parameterCount = preparedStatement. getParameterMetaData ( ) . getParameterCount ( ) ;
if ( parameterCount != 0 && parameters != null && parameterCount == parameters. length
for ( int i = 0 ; i < parameters. length; i++ ) {
preparedStatement. setObject ( i + 1 , parameters[ i] ) ;
}
}
resultSet = preparedStatement. executeQuery ( ) ;
ResultSetMetaData metaData = resultSet. getMetaData ( ) ;
int columnCount = metaData. getColumnCount ( ) ;
while ( resultSet. next ( ) ) {
T t = cls. getConstructor ( ) . newInstance ( ) ;
for ( int i = 1 ; i <= columnCount; i++ ) {
String fieldName = metaData. getColumnName ( i) ;
Object value = resultSet. getObject ( fieldName) ;
BeanUtils. setProperty ( t, fieldName, value) ;
}
list. add ( t) ;
}
} catch ( SQLException | NoSuchMethodException | InstantiationException
| IllegalAccessException | InvocationTargetException e) {
e. printStackTrace ( ) ;
} finally {
JdbcUtil. close ( connection, preparedStatement, resultSet) ;
}
return list. size ( ) != 0 ? list : null;
}